美文网首页
android 中System.exit(0)的体验

android 中System.exit(0)的体验

作者: 有点健忘 | 来源:发表于2019-05-14 09:40 被阅读0次

需求是点击某个按钮,重启app

比如,已经打开页面A,B,C,D,然后D页面有个按钮,点击一下,重启app,完全重启,也就是从application开始。

首先System.exit(0)这一句,只能关闭页面D,不能关闭A,B,C,
如果要把页面A,B,C一起关闭,需要加一句finishAffinity(),这个方法是Activity有的。

调用System.exit(0)以后,需要注意的事情。
如果你已经启动了某些Service,而onStartCommand方法又返回了START_STICKY,那么,app会立马执行application,完事重新start这些Service。
所以,如果我们的Service不是随着app启动而立马就启动的情况下,需要在exit之前把这些服务手动stop掉,免得app重启以后这些服务就自动启动了。

假设我们延迟启动app,如下,延迟10秒

    Intent mStartActivity = new Intent(activity, XXXActivity.class);
    int mPendingIntentId = 123;
    PendingIntent mPendingIntent = PendingIntent.getActivity(activity, mPendingIntentId,    mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager mgr = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
    mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 10000, mPendingIntent);

如果没有START_STICKY的Service,那么application也是在10秒后启动的,如果有START_STICKY的Service,那么application是立马启动,并且把Service也重启,之后才是等待10秒加载XXXActivity的。

另一种杀死进程的方法

android.os.Process.killProcess(android.os.Process.myPid());

等同于

finishAffinity();
System.exit(0);

相关文章

网友评论

      本文标题:android 中System.exit(0)的体验

      本文链接:https://www.haomeiwen.com/subject/qdyjaqtx.html