我在stackoverflow上看到了其他答案,但没有一个能帮助我解决我的问题。
我在一个活动中有一个带webview的应用程序,我希望在应用程序被杀死时清除缓存。
以下是我用来删除缓存的代码 -
library(dplyr)
df %>% count(mother_age_group, wt = birth_count) %>%
ggplot(aes(mother_age_group, n)) +
geom_col()
我希望在应用程序被杀或应用程序被杀之前清除缓存,我应该在哪里调用public static void deleteCache(Context context) {
try {
File dir = context.getCacheDir();
deleteDir(dir);
} catch (Exception e) {}
}
public static boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
return dir.delete();
} else if(dir!= null && dir.isFile()) {
return dir.delete();
} else {
return false;
}
?
我尝试将其放在活动的deleteCache(this)
方法中,但是当我按下不是我的要求的活动上的后退按钮时,它会清除缓存。
所以我添加了
OnDestroy()
因此,当我按下按钮时,我的活动根本不会调用onDestroy(),也不会杀死应用程序。
在哪里需要清除生命周期方法的缓存? 和 在我的应用被杀之前,我在哪里可以触发事件到javascript函数?
答案 0 :(得分:0)
在离开活动之前先把它放好
WebView.clearCache(真);
答案 1 :(得分:0)
如果系统“决定”在后台杀死您的应用,则不会调用任何回调。如果您作为开发人员不能依赖于此,那么您是否应该重新考虑解决问题的方法?...
您确定知道的是,当您的应用程序进程创建时Application
's onCreate()
method is called。那么为什么不从方法中清除缓存,即不是在应用程序查杀时,而是在它启动时?
我关注this approach并创建了一项服务,并在
onTaskRemoved()
清除了我的缓存。
很好的方法,但是,根据我的经验,在极少数情况下onTaskRemoved()
不能保证被调用。我建议测试不同操作系统版本的方法调用(最好是针对一系列设备)。另请注意onTaskRemoved()
is only called when a user removes your app from the recent task list。
总而言之,如果您使用Application
的{{1}}清除缓存,则可以保证执行操作。