diff --git a/app/src/main/java/com/ouxuan/oxface/utils/MaintenanceScheduler.java b/app/src/main/java/com/ouxuan/oxface/utils/MaintenanceScheduler.java index 20123f6..8f3a92e 100644 --- a/app/src/main/java/com/ouxuan/oxface/utils/MaintenanceScheduler.java +++ b/app/src/main/java/com/ouxuan/oxface/utils/MaintenanceScheduler.java @@ -312,8 +312,19 @@ public class MaintenanceScheduler { MemoryManager memoryManager = MemoryManager.getInstance(context); memoryManager.performMemoryCleanup(); - // 清理Glide缓存 - Glide.get(context).clearMemory(); + // 清理Glide缓存 - 必须在主线程中执行 + if (android.os.Looper.myLooper() == android.os.Looper.getMainLooper()) { + // 当前在主线程,直接执行 + Glide.get(context).clearMemory(); + } else { + // 当前不在主线程,使用Handler切换到主线程执行 + new android.os.Handler(android.os.Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + Glide.get(context).clearMemory(); + } + }); + } Log.d(TAG, "内存清理完成"); } @@ -375,6 +386,7 @@ public class MaintenanceScheduler { @Override public void run() { try { + // 磁盘缓存清理必须在后台线程执行 Glide.get(context).clearDiskCache(); Log.i(TAG, "磁盘缓存清理完成"); } catch (Exception e) { diff --git a/app/src/main/java/com/ouxuan/oxface/utils/MemoryManager.java b/app/src/main/java/com/ouxuan/oxface/utils/MemoryManager.java index 9b710a6..b4c336f 100644 --- a/app/src/main/java/com/ouxuan/oxface/utils/MemoryManager.java +++ b/app/src/main/java/com/ouxuan/oxface/utils/MemoryManager.java @@ -114,10 +114,22 @@ public class MemoryManager { try { Log.i(TAG, "开始内存清理"); - // 清理Glide图片缓存 + // 清理Glide图片缓存 - 必须在主线程中执行 if (context != null) { - Glide.get(context).clearMemory(); - Log.d(TAG, "已清理Glide内存缓存"); + if (android.os.Looper.myLooper() == android.os.Looper.getMainLooper()) { + // 当前在主线程,直接执行 + Glide.get(context).clearMemory(); + Log.d(TAG, "已清理Glide内存缓存"); + } else { + // 当前不在主线程,使用Handler切换到主线程执行 + new android.os.Handler(android.os.Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + Glide.get(context).clearMemory(); + Log.d(TAG, "已清理Glide内存缓存"); + } + }); + } } // 建议垃圾回收 @@ -141,7 +153,20 @@ public class MemoryManager { // 清理所有可能的缓存 if (context != null) { - Glide.get(context).clearMemory(); + // 清理Glide内存缓存 - 必须在主线程中执行 + if (android.os.Looper.myLooper() == android.os.Looper.getMainLooper()) { + // 当前在主线程,直接执行 + Glide.get(context).clearMemory(); + } else { + // 当前不在主线程,使用Handler切换到主线程执行 + new android.os.Handler(android.os.Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + Glide.get(context).clearMemory(); + } + }); + } + // 强制清理磁盘缓存(在后台线程中) new Thread(new Runnable() { @Override