项目开发过程中需要实现重启App的功能,常用的可行方案有:
1. 使用 FLAG_ACTIVITY_CLEAR_TOP :
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage(getApplication().getPackageName());
LaunchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(LaunchIntent);
}
}, 1000);// 1秒钟后重启应用
2. 使用 AlarmManager :
Intent intent = getPackageManager()
.getLaunchIntentForPackage(getApplication().getPackageName());
PendingIntent restartIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 1000, restartIntent); // 1秒钟后重启应用
System.exit(0);
经过测试发现两种都可以实现,但是当默认启动的activity的launchMode 设置为不是以”standard” 方式启动时,这个时候重启app不能清除activity中的内存数据。
也可以直接kill 掉当前进程,app 会重新启动,又创建一个新的进程:
/**结束当前正在运行中的Java虚拟机**/
/**System.exit(0)是正常退出程序,而System.exit(1)或者说非0表示非正常退出程序**/
System.exit(0);
/**杀死整个进程**/
android.os.Process.killProcess(android.os.Process.myPid());
其实 Process.killProcess 或 System.exit(0) 都不应该直接调用, 进程是由 os 底层进行管理的,android 系统会自己进行处理回收进程。
退出应用你就直接 finish 掉 activity 就行了。
附上使用自杀式服务重启app完整代码:
/**
* 自杀式服务--重启app
*/
public class KillSelfService extends Service {
private Handler handler;
public KillSelfService() {
handler = new Handler();
}
@Override
public int onStartCommand(final Intent intent, int flags, int startId) {
long stopDelayed = intent.getLongExtra("Delayed", 2000);
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage(getApplication().getPackageName());
LaunchIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(LaunchIntent);
KillSelfService.this.stopSelf();
}
}, stopDelayed);
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
补充:清理数据或注销后回到登录界面:
Intent outIntent = new Intent(HomeActivity.this,
LoginActivity.class);
outIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK
| Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(outIntent);
参考:
android比较便捷的重启APP的方法
android Process.killProcess 和 System.exit(0) 区别