雖然文檔裡沒有明確說明,但假如這是常用功能,應該有簡便的方法實現,而實際上要靠代碼"退出"一個應用並非易事。以下總結了能夠類比退出效果的兩個方案:
方案1:開啟系統主屏來類比應用退出的效果,這和使用者按Home鍵沒有什麼區別。
| 代碼如下 |
複製代碼 |
Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); |
方案2:直接殺掉當前應用進程。這個方法太暴力了,我找到一段iOS開發文檔,上面強烈不建議使用殺進程的方式來退出應用,原因也適用於Android系統:這樣退出的效果容易讓使用者以為應用崩潰了。
| 代碼如下 |
複製代碼 |
int pid=android.os.Process.myPid(); android.os.Process.killProcess(pid); |
此外,有人建議調用System.exit(0)退出應用,實際測試發現這個方法常常只能關閉當前Activity,或是根本不起作用。
由此可以看出,Android系統的設計裡本來就沒有"退出應用"的機制,當使用者按下Home鍵或在應用首頁裡按下Back鍵後,應用被置於後台,而何時要徹底殺掉應用進程則由系統決定。Android和iOS都已拋棄了"退出應用"這個概念,對手機使用者來講,他只需要知道"啟動應用"——概念越少越簡單。
但作為一個好的應用,應該有自己的退出功能。
"應用退出"一般有以下幾種方式:
一、退出起始的Activity,這樣後面的Activity系統會自己destory。(通常需要很長時間)
二、為每一個Activity覆寫OnKeyDown()方法,當每次按返回鍵的時候,finish掉當前的Activity。(通常所有的Activity都會繼承一個BaseActivity,這樣,只需要寫一遍就好)
三、利用List,每次調用新的Activity時,儲存當前的Activity,當應用退出時,一次性finish所有的Activity。(較為理想的解決方案)
今天,我們就利用第三種方式來為我們的應用添加"退出"功能。
1.編寫一個class繼承Application
| 代碼如下 |
複製代碼 |
public class AppClose extends Application { private List<Activity> mainActivity = new ArrayList<Activity>(); public List<Activity> MainActivity() { return mainActivity; } public void addActivity(Activity act) { mainActivity.add(act); } public void finishAll() { for (Activity act : mainActivity) { if (!act.isFinishing()) { act.finish(); } } mainActivity = null; } } |
2.在Activity 中的oncreate方法中添加
| 代碼如下 |
複製代碼 |
AppClose appState = (AppClose)this.getApplication(); appState.addActivity(this); // setContentView(R.layout.main); |
3.//設定點擊事件
| 代碼如下 |
複製代碼 |
button.setonclick….(){ AppClose appState = (AppClose)getApplicationContext(); appState.finishAll(); } |
4.在註冊資訊清單檔中
給application添加屬性 android:name=".AppClose"