美文网首页Android开发积累
Android之安全退出App

Android之安全退出App

作者: zheng_zq | 来源:发表于2019-06-07 22:09 被阅读9次

本方法是基于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);

相关文章

网友评论

    本文标题:Android之安全退出App

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