То, что я делал раньше на Android (iOS не позволяет перезапустить приложение), использует PendingIntent
с кодом для очистки кэша приложения.Он по-прежнему выходит из приложения, но перезапускает его, как будто он только что из новой установки.
cleanCache();
PackageManager pm = context.getPackageManager();
if(pm != null){
Intent activity = pm.getLaunchIntentForPackage(getBaseContext().getPackageName());
if(activity != null){
activity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
int pendingIntentId = 223344;
PendingIntent pendingIntent = PendingIntent.getActivity(context, pendingIntentId, activity, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 5, pendingIntent);
System.exit(0);
}else{
Log.d(TAG, "was not able to restart, activity null");
}
}else{
Log.d(TAG, "was not able to restart, pm null");
}
public class ExitActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_exit);
android.os.Process.killProcess(android.os.Process.myPid());
}
}
Далее приведен код для cleanCache ().
private void cleanCache() {
clearApplicationData();
Intent intent = new Intent(context, ExitActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK |
Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS | Intent.FLAG_ACTIVITY_NO_ANIMATION);
context.startActivity(intent);
}
public void clearApplicationData(){
File cache = context.getCacheDir();
File appDir = new File(cache.getParent());
context.deleteDatabase("webview.db");
context.deleteDatabase("webviewCache.db");
webMain.clearCache(true);
if (appDir.exists()) {
String[] children = appDir.list();
for (String s : children) {
if (!s.equals("lib")) {
deleteDir(new File(appDir, s));Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************");
}
}
}
}
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();
}
Ниже приведен код дляExitActivity.
public class ExitActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_exit);
android.os.Process.killProcess(android.os.Process.myPid());
}
}