各位好。
【正题】
最近在4.0上做双SD卡嵌套挂载问题的工作,结果总是出问题,没有头绪,很是郁闷。
原来的挂载配置:
外置sdcard mnt/sdcard
    emmc   mnt/emmc
要改成:
外置sdcard mnt/sdcard/ext_sd
    emmc   mnt/sdcard根据网上的一些关于挂载流程,修改了配置文件和逻辑后,log中显示mount成功,文件管理器中也可以看到相应的内置、外置卡上的文件。但是目前存在3个严重问题(注:修改之前原来的功能都OK。):1. 一开机就会显示“空白SD卡”的notify消息。
2. 进入settings的“存储管理”界面时settings会挂掉,log显示
07-16 06:58:38.389: E/AndroidRuntime(619): FATAL EXCEPTION: MemoryMeasurement
07-16 06:58:38.389: E/AndroidRuntime(619): java.lang.IllegalArgumentException
07-16 06:58:38.389: E/AndroidRuntime(619): at android.os.StatFs.native_setup(Native Method)
07-16 06:58:38.389: E/AndroidRuntime(619): at android.os.StatFs.<init>(StatFs.java:32)
07-16 06:58:38.389: E/AndroidRuntime(619): at com.android.settings.deviceinfo.StorageMeasurement$MeasurementHandler.measureApproximateStorage(StorageMeasurement.java:395)
在代码中加打印,发现传入的path是合法的字符串,奇怪~~
3. 插线连接到PC机时USB大容量存储器也启动不了,log显示“Device or resource busy”,跟驱动有关?【补充问题】
1. 内置外置SD卡的挂载/卸载,是要严格遵循“内置->外置”/“外置->内置”的顺序,是吧?
2. 同级目录上挂载和这种嵌套目录的挂载,有何区别?因为总觉得只是简单修改了一个挂载点,怎么会引发这么多问题呢?烦请高手指点一二。
期待回复。
感谢!

解决方案 »

  1.   

    不会吧,androider们上班都累了?休息一下,来这里看看吧~~~
      

  2.   

    mnt/sdcard, mnt/sdcard/ext_sd 这样两个挂载点,1.如果后者先挂载,前者挂载后,后者的节点应该就被覆盖了;2.如果前者先挂载,后者有可能找不到挂载点,权限或者相同文件名错误。
    不知我想的对不对,为什么不能做成同级的呢?
      

  3.   

    嗯,这个要求是有点古怪,不过听同事说之前在2.3上实现过类似功能。
    最初是想将外置SD卡作为内置卡的一个子目录(在文件管理器中可以看到这种层级关系),不知道android上目录的概念是否与挂载点有对应关系?
    还请指点。
    谢谢。
      

  4.   

    我遇到的问题跟你的不太一样,我遇到的是空间大小不对的问题,measureSizesOfMisc()直接返回了,根本就没有计算mnt/sdcard目录下文件占用的空间,造成显示不准确,还在郁闷中,不知道该如何解决。
      

  5.   

    我也遇到这样的问题啊
    求高手指点W/dalvikvm( 2405): threadid=14: thread exiting with uncaught exception (group=0x40cae1f8)
    E/AndroidRuntime( 2405): FATAL EXCEPTION: MemoryMeasurement
    E/AndroidRuntime( 2405): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
    E/AndroidRuntime( 2405):        at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4066)
    E/AndroidRuntime( 2405):        at android.view.ViewRootImpl.invalidateChild(ViewRootImpl.java:725)
    E/AndroidRuntime( 2405):        at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:774)
    E/AndroidRuntime( 2405):        at android.view.ViewGroup.invalidateChild(ViewGroup.java:4005)
    E/AndroidRuntime( 2405):        at android.view.View.invalidate(View.java:8576)
    E/AndroidRuntime( 2405):        at android.view.View.invalidate(View.java:8527)
    E/AndroidRuntime( 2405):        at android.widget.TextView.checkForRelayout(TextView.java:6814)
    E/AndroidRuntime( 2405):        at android.widget.TextView.setText(TextView.java:3308)
    E/AndroidRuntime( 2405):        at android.widget.TextView.setText(TextView.java:3164)
    E/AndroidRuntime( 2405):        at android.widget.TextView.setText(TextView.java:3139)
    E/AndroidRuntime( 2405):        at com.android.settings.applications.RunningProcessesView.refreshUi(RunningProcessesView.java:337)
    E/AndroidRuntime( 2405):        at com.android.settings.applications.RunningProcessesView.onRefreshUi(RunningProcessesView.java:477)
    E/AndroidRuntime( 2405):        at com.android.settings.applications.RunningState$1.handleMessage(RunningState.java:196)
    E/AndroidRuntime( 2405):        at android.os.Handler.dispatchMessage(Handler.java:99)
    E/AndroidRuntime( 2405):        at android.os.Looper.loop(Looper.java:137)
    E/AndroidRuntime( 2405):        at android.os.HandlerThread.run(HandlerThread.java:60)