本方法是基于Activity的singleTask启动模式实现的。
singleTask的简介
-
singleTask是Activity启动模式中的一种,当startActivity时,它先会在当前栈中查询是否存在Activity的实例,如果存在,则将其置于栈顶,并将其之上的所有Activity移出栈。
image.png
如上图,(由MainActivity跳转到SecondActivity,再跳转到ThirdActivity,然后由ThirdActivity退出App)如果在MainActivity的启动模式为singleTask的情况下,从ThirdActivity跳转到MainActivity,在当前栈中查询到存在MainActivity的实例,所以会将MainActivity置于栈顶,而位于其之上的所有Activity(SecondActivity、ThirdActivity)都会因溢出而被移出栈。
- 跳转回去的同时调用Activity的onNewIntent方法。
如果在onNewIntent方法里写入finish();方法,即把除MainActivity之外的所有Activity移出栈后再把MainActivity销毁掉,实现App安全退出。
代码实现
- 将MainActivity的launchMode改为singleTask。
<activity
android:name=".MainActivity"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
- 在MainActivity中实现onNewIntent方法,实现App安全退出的逻辑。
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
String tag = intent.getStringExtra("EXIT_TAG");
if (tag != null&& !TextUtils.isEmpty(tag)) {
if ("SINGLETASK".equals(tag)) {//退出程序
finish();
}
}
}
- 在ThirdActivity中实现传入tag和调用startActivity方法。
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("EXIT_TAG", "SINGLETASK");
startActivity(intent);
网友评论