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