在升级到新版本期间清除android缓存

时间:2015-04-16 12:32:46

标签: android

在升级到新版本或安装过程中,有没有办法以编程方式清除Android应用的缓存?

4 个答案:

答案 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