最近遇到一类反馈,最终排查定位到是存储在应用私有cache目录(data/data/包名/cache)的一些文件被删除了(这里是文件夹内,部分文件被删除);
问题来了:
系统对于cache目录的清理策略是怎么样的?在高版本上有什么策略调整吗?
更多问答 >>
-
2024-06-06 11:06
-
2024-06-17 09:16
-
每日一问 | Java线程栈的栈溢出(StackOverflowError)是如何检测的?
2024-02-19 18:30 -
每日一问 | targetSdkVersion 有什么神奇的魔力?
2023-05-24 17:30 -
每日一问 | Android 模块化依赖中的资源冲突该如何规避?
2023-05-24 17:30
The system will automatically delete files in this directory as disk space is needed elsewhere on the device. The system will always delete older files first, as reported by {@link File#lastModified()}. If desired, you can exert more control over how files are deleted using {@link StorageManager#setCacheBehaviorGroup(File, boolean)} and {@link StorageManager#setCacheBehaviorTombstone(File, boolean)}.
Apps are strongly encouraged to keep their usage of cache space below the quota returned by {@link StorageManager#getCacheQuotaBytes(java.util.UUID)}. If your app goes above this quota, your cached files will be some of the first to be deleted when additional disk space is needed. Conversely, if your app stays under this quota, your cached files will be some of the last to be deleted when additional disk space is needed.
http://aospxref.com/android-12.0.0_r3/xref/frameworks/base/core/java/android/content/Context.java#getCacheDir
看注释,写的很清楚
在DeviceStorageMonitorService中检查存储容量变化,等可用空间小于1.5倍的最低阀值时,调用PMS.freeStorage释放空间至阀值2倍
http://aospxref.com/android-12.0.0_r3/xref/frameworks/base/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java#checkchatgpt:
Android 系统会对应用的data/data/包名/cache
目录进行自动清理,清理策略如下:当系统储存空间不足时,会优先清理
data/data/包名/cache
目录下的文件。当应用被卸载时,
data/data/包名/cache
目录下的文件也会一并删除。在 Android 6.0 及以上的版本中,系统增加了一种新的应用内存管理机制,称为 "Doze" 模式。当设备进入 Doze 模式后,系统会自动将系统资源分配给系统和用户正在使用的应用程序,将非重要任务推迟到设备唤醒时再执行。此时,系统也会限制应用访问某些设备资源及网络连接,以延长电池寿命。
由于 Doze 模式的限制,可能会导致部分后台操作无法正常进行,例如清理缓存文件等操作。因此,在开发应用时,应遵守 Android 建议的行为,尽量减少在 Doze 模式下执行的操作,避免影响用户体验。
总之,针对应用私有cache目录的清理策略,我们应该保持谨慎态度,尽量减少在 Doze 模式下执行的操作,同时合理管理好应用的缓存文件,确保在系统做出清理操作时也不会对应用造成不必要的影响。
别的不知道,但是康佳的系统会,系统升级之前,内存不够了,先把缓存清了,还不够,app都给你卸载了
海信的狗系统也是,,.,用着用着,...总是提示内存不足,还老是重启...最后刷机好了...
参考:frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
/**