插拔SD卡出现:

01-23 15:48:00.512  2385  2385 E ImageLoader: /storage/sdcard0/Android/data/com.android.customerservice/cache/uil-images/journal.tmp: open failed: EIO (I/O error)01-23 15:48:00.512  2385  2385 E ImageLoader: java.io.FileNotFoundException: /storage/sdcard0/Android/data/com.android.customerservice/cache/uil-images/journal.tmp: open failed: EIO (I/O error)01-23 15:48:00.512  2385  2385 E ImageLoader:   at libcore.io.IoBridge.open(IoBridge.java:496)01-23 15:48:00.512  2385  2385 E ImageLoader:   at java.io.FileOutputStream.(FileOutputStream.java:87)01-23 15:48:00.512  2385  2385 E ImageLoader:   at java.io.FileOutputStream.(FileOutputStream.java:72)01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.nostra13.universalimageloader.cache.disc.impl.ext.DiskLruCache.rebuildJournal(DiskLruCache.java:358)01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.nostra13.universalimageloader.cache.disc.impl.ext.DiskLruCache.open(DiskLruCache.java:250)01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.nostra13.universalimageloader.cache.disc.impl.ext.LruDiskCache.initCache(LruDiskCache.java:112)01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.nostra13.universalimageloader.cache.disc.impl.ext.LruDiskCache.(LruDiskCache.java:106)01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.nostra13.universalimageloader.core.DefaultConfigurationFactory.createDiskCache(DefaultConfigurationFactory.java:89)01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.nostra13.universalimageloader.core.ImageLoaderConfiguration$Builder.initEmptyFieldsWithDefaultValues(ImageLoaderConfiguration.java:580)01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.nostra13.universalimageloader.core.ImageLoaderConfiguration$Builder.build(ImageLoaderConfiguration.java:559)01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.android.customerservice.activity.UserFeedbackChildActivity.onCreate(UserFeedbackChildActivity.java:160)01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.app.Activity.performCreate(Activity.java:6100)01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112)01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2481)01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2614)01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.app.ActivityThread.access$800(ActivityThread.java:178)01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1470)01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.os.Handler.dispatchMessage(Handler.java:111)01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.os.Looper.loop(Looper.java:194)01-23 15:48:00.512  2385  2385 E ImageLoader:   at android.app.ActivityThread.main(ActivityThread.java:5643)01-23 15:48:00.512  2385  2385 E ImageLoader:   at java.lang.reflect.Method.invoke(Native Method)01-23 15:48:00.512  2385  2385 E ImageLoader:   at java.lang.reflect.Method.invoke(Method.java:372)01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)01-23 15:48:00.512  2385  2385 E ImageLoader:   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)01-23 15:48:00.512  2385  2385 E ImageLoader: Caused by: android.system.ErrnoException: open failed: EIO (I/O error)01-23 15:48:00.512  2385  2385 E ImageLoader:   at libcore.io.Posix.open(Native Method)01-23 15:48:00.512  2385  2385 E ImageLoader:   at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)01-23 15:48:00.512  2385  2385 E ImageLoader:   at libcore.io.IoBridge.open(IoBridge.java:482)01-23 15:48:00.512  2385  2385 E ImageLoader:   ... 23 more

软件包名为com.android.customerservice,在com.android.customerservice.activity.UserFeedbackChildActivity的onCreate()方法中进行ImageLoader配置:

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)                .threadPriority(Thread.NORM_PRIORITY - 2)//设置当前线程的优先级                .denyCacheImageMultipleSizesInMemory()                .diskCacheFileNameGenerator(new Md5FileNameGenerator())//使用MD5对UIL进行加密命名                .diskCacheSize(100 * 1024 * 1024)// sd卡(本地)缓存的最大值                .tasksProcessingOrder(QueueProcessingType.LIFO)//后进先出                .build();

在UserFeedbackChildActivity页面时插拔SD卡,会闪退(必现),这是因为缓存路径会随着SD卡的插拔发生改变,在项目配置mk文件ProjectConfig.mk中有一个值MTK_2SDCARD_SWAP = yes/no,这个值可以通过反射得到:

 public static String getSwap() {        Object result = null;        try {            Class cl = Class.forName("android.os.SystemProperties");            Object invoker = cl.newInstance();            Method m = cl.getMethod("get", new Class[] { String.class, String.class });            result = m.invoke(invoker, new Object[] { "ro.mtk_2sdcard_swap", "unknown" });            return (String) result;        } catch (Exception e) {            e.printStackTrace();        }        return (String) result;    }

若MTK_2SDCARD_SWAP = yes,则插上SD卡,其路径为/storage/sdcard0,手机内置SD卡路径为/storage/sdcard1,若拔出SD卡,则手机内置SD卡路径会变为/storage/sdcard0。路径的改变会导致FileNotFoundException,进一步导致其他异常。

更多相关文章

  1. android下giflib
  2. Android(安卓)Universal Image Loader 源码分析
  3. android 通用的功能集锦
  4. android之NDK(jni)开发笔记1——运行第一个NDK程序
  5. Android获取SD卡路径/内存的几种方法
  6. android app 缓存 ---- android 文件缓存使用流程解析
  7. Android主流三方库源码分析(一、深入理解OKHttp源码)
  8. Facebook推出强大Android图片库Fresco 自动释放内存 图片缓存 内
  9. 【Android(安卓)内存优化】Bitmap 硬盘缓存 ( Google 官方 Bitma

随机推荐

  1. Android(安卓)Studio 基础入门笔记
  2. 零基础如何学好安卓开发
  3. Android(安卓)上显示 PDF 文件
  4. 命令行下使用android SDK工具手工开发简
  5. 如何在Android(安卓)TV 桌面添加自定义频
  6. Android下利用Fragment+RadioGroup和TabH
  7. 网页标签
  8. Android(安卓)翻书效果
  9. RecyclerView(三):LayoutManager职责及相关
  10. Android(安卓)搭建MVP+Retrofit+RxJava网