清除应用数据并重启工具类

该代码段展示了如何在Android中实现清除应用数据,包括缓存、数据库、文件和共享偏好设置,并在清除后延迟一定时间重启应用。通过Utils类提供的静态方法,可以方便地进行数据清理和应用重启操作。同时,定义了一个KillSelfService服务来处理重启逻辑。
摘要由CSDN通过智能技术生成
public class Utils {
	public static void clearAppUserData(final Context context) {
		cleanExternalCache(context);
		cleanInternalCache(context);
		cleanDatabases(context);
		cleanFiles(context);
		cleanSharedPreference(context);
	}

	/**
	 * * 清除外部cache下的内容(/mnt/sdcard/android/data/com.xxx.xxx/cache) * * @param
	 * context
	 */
	public static void cleanExternalCache(Context context) {
		if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
			deleteFilesByDirectory(context.getExternalCacheDir());
		}
	}


	/** * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache) * * @param context */
	public static void cleanInternalCache(Context context) {
		deleteFilesByDirectory(context.getCacheDir());
	}

	/** * 清除/data/data/com.xxx.xxx/files下的内容 * * @param context */
	public static void cleanFiles(Context context) {
		deleteFilesByDirectory(context.getFilesDir());
	}

	/** * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases) * * @param context */
	public static void cleanDatabases(Context context) {
		deleteFilesByDirectory(new File("/data/data/" + context.getPackageName() + "/databases"));
	}

	public static void cleanSharedPreference(Context context) {
		deleteFilesByDirectory(new File("/data/data/" + context.getPackageName() + "/shared_prefs"));
	}

	/** * 删除方法 这里只会删除某个文件夹下的文件,如果传入的directory是个文件,将不做处理 * * @param directory */
	private static void deleteFilesByDirectory(File directory) {
		File[] files = directory.listFiles();

		if (files != null) {
			for (int i = 0; i < files.length; i++) {
				if (files[i].isFile()) {
					files[i].delete();
				} else if (files[i].isDirectory()) {
					deleteFilesByDirectory(files[i]);
				}
				files[i].delete();
			}
		}
	}

	/**
	 * 重启整个APP
	 * @param context
	 * @param Delayed 延迟多少毫秒
	 */
	public static void restartAPP(Context context, long Delayed) {
		/**开启一个新的服务,用来重启本APP*/
		Intent intent1 = new Intent(context, killSelfService.class);
		intent1.putExtra("PackageName", context.getPackageName());
		intent1.putExtra("Delayed", Delayed);
		context.startService(intent1);

		/**杀死整个进程**/
		android.os.Process.killProcess(android.os.Process.myPid());
	}
}

Manifest.xml:

<service
            android:name=".service.killSelfService"
            android:process=":restart" />
killSelfService:
public class killSelfService extends Service {

    /**
     * 关闭应用后多久重新启动
     */
    private static long stopDelayed = 2000;
    private Handler handler;
    private String PackageName;

    public killSelfService() {
        handler = new Handler();
    }

    @Override
    public int onStartCommand(final Intent intent, int flags, int startId) {
        stopDelayed = intent.getLongExtra("Delayed", 2000);
        PackageName = intent.getStringExtra("PackageName");
        Log.d("wujiang", "onStartCommand: PackageName = " + PackageName);
        handler.postDelayed(() -> {
            Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage(PackageName);
            startActivity(LaunchIntent);
            killSelfService.this.stopSelf();
        }, stopDelayed);
        return super.onStartCommand(intent, flags, startId);
    }


    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
}

使用:

Utils.clearAppUserData(getActivity());

mHandler.postDelayed(new Runnable() {
    @Override
    public void run() {
         Utils.restartAPP(getContext(), 1000);
    }
}, 200);

                                                          The     End

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值