安全退出Activity的六種方式

一、容器式

建立一個全局容器,每開啓一個Activity就在這個容器中添加一個,等到要退出應用的是否,遍歷這個容器,推出每個Activity

二、廣播式

每創建一個一個Activity就註冊一個廣播接收者,當需要退出的時候,就發送一個特定的廣播,讓所有的Activity結束掉

三、進程式

通過直接殺死進程來達到退出應用的目的,但是有些國產機可能失效,只能退出部分的Activity(如:小米note)

四、RS優雅式

通過使用Activity的singleTask單任務啓動模式來設置某一個Activity,通過廣播startActivity,然後結束掉這個Activity,來達到結束Activity的目的
具體使用的方法:
1、在HomeActivity註冊一個退出廣播,和第二個廣播式一樣,但是這裏只需要在HomeActivity一個頁面註冊即可。
2、設置HomeActivity的啓動模式爲singleTask。
當我們需要退出的時候只需要startActivity(this,HomeActivity,class), 再發送一個退出廣播。上面代碼首先會把棧中HomeActivity之上的所有Activity移除出棧,然後接到廣播finish自己。一切OK ! 沒有彈框,不用考慮機型Rom適配。不會有內存問題,就是那麼的優雅,簡單!

五、SingleTask改版式

1、設置MainActivity的加載模式爲singleTask
2、重寫MainActivity中的onNewIntent方法
3、需要退出時在Intent中添加退出的tag

代碼:
第一步設置MainActivity的加載模式爲singleTask

 android:launchMode="singleTask"

第二步重寫onNewIntent()方法

private static final String TAG_EXIT = "exit";

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    if (intent != null) {
        boolean isExit = intent.getBooleanExtra(TAG_EXIT, false);
        if (isExit) {
            this.finish();
        }
    }
}

第三步 退出

Intent intent = new Intent(this,MainActivity.class);
        intent.putExtra(MainActivity.TAG_EXIT, true);
        startActivity(intent);

六、懶人式

1、將MainActivity設置爲singleTask
2、將退出出口放置在MainActivity
我們可以看到很多應用都是雙擊兩次home鍵退出應用,就是基於這樣的方式來實現的,這裏在貼一下如何處理連續兩次點擊退出的源碼
代碼:

private boolean mIsExit;
@Override
    /**
     * 雙擊返回鍵退出
     */
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (mIsExit) {
                this.finish();

            } else {
                Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show();
                mIsExit = true;
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mIsExit = false;
                    }
                }, 2000);
            }
            return true;
        }

        return super.onKeyDown(keyCode, event);
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章