一、容器式
建立一個全局容器,每開啓一個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);
}