美文网首页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