在升级到新版本或安装过程中,有没有办法以编程方式清除Android应用的缓存?
答案 0 :(得分:0)
android在ActivityManager Class中有clearApplicationUserData()
。
此方法与设置中明确命中清除应用数据的效果相同。
这是参考 -
http://developer.android.com/reference/android/app/ActivityManager.html#clearApplicationUserData()
希望这会有所帮助 干杯!答案 1 :(得分:0)
回到this answer,您可以通过以下方式清除应用的缓存:
public static void deleteCache(Context context) {
try {
File dir = context.getCacheDir();
if (dir != null && dir.isDirectory()) {
deleteDir(dir);
}
} catch (Exception e) {}
}
private 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();
}
每次更新应用时,只需调用deleteCache()即可。 要检查您的应用是否已更新,您只需将版本字符串保存到SharedPreference中,并将保存的值与实际值进行比较。
public static boolean isNewVersion(Context context) {
String newVersion = "", oldVersion = "";
PackageManager manager = context.getPackageManager();
PackageInfo info = null;
try {
info = manager.getPackageInfo(context.getPackageName(), 0);
newVersion = info.versionName;
} catch (PackageManager.NameNotFoundException e) {
// TODO what to do?
}
oldVersion = getVersionString();
// returns whether the new version string differs (is also false for first install)
return !(oldVersion.equals(DEFVAL_STRING) || oldVersion.equals(newVersion));
}
public static String getVersionString(Context context) {
SharedPreferences preferences = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE);
return preferences.getString(KEY_VERSION, DEFVAL_STRING);
}
答案 2 :(得分:0)
用行动写接收器&#34; PACKAGE_REPLACED&#34;在清单中。
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)) {
// write logic to delete cache directory
// Get cache dir as context.getCacheDir()
}
}
答案 3 :(得分:0)
如果您只想将其用于webview,则可以将缓存清除添加到由webview加载的网址中。将应用版本添加到查询字符串中,您将在用户升级后获得全新下载:
datetime