- 論壇徽章:
- 0
|
本帖最后由 nighteagle 于 2015-06-02 11:48 編輯
最近學(xué)習(xí)做android的游戲開發(fā)時(shí)候,發(fā)現(xiàn)一個(gè)關(guān)于android退出時(shí)不能徹底關(guān)閉的問題,比如:一個(gè)程序里new 出了N多個(gè)Thread,這樣在退出程序的可能不能完全關(guān)閉,最后發(fā)現(xiàn),只用finish()方法,有時(shí)候不能徹底退出,個(gè)人感覺還是要在適當(dāng)?shù)牡胤郊由希篠ystem.exit(0);
1. finish()方法
該方法可以結(jié)束當(dāng)前 Activity,但是如果你的App有很多 Activity 的話,使用該方法顯得有點(diǎn)捉襟見肘了。
另外,還有一個(gè)方法finishActivity (int requestCode) ,關(guān)于這個(gè)方法,先看看sdk的api說明吧!- public void finishActivity (int requestCode)
- Since: API Level 1
- Force finish another activity that you had previously started with startActivityForResult(Intent, int).
- Parameters requestCode The request code of the activity that you had given to startActivityForResult(). If there are multiple activities started with this request code, they will all be finished.
復(fù)制代碼 也許你會(huì)這樣理解 ,Activity1 通過方法 startActivityForResult (Intent, int) 啟動(dòng) Activity2,然后在 Activity2 中通過方法finishActivity (int requestCode)來結(jié)束 Activity1,但是很不幸運(yùn),不是這樣的。不信你可以Demo一把!
上面文檔說得很明白,該方法強(qiáng)制關(guān)閉通過方法 startActivityForResult (Intent, int) 啟動(dòng)的 Activity,也就是說在 Activity1 中的(重寫)方法onActivityResult(int requestCode, int resultCode, Intent data) 來接收 Activity2 返回的結(jié)果,必須在 Activity1 中調(diào)用finishActivity (int requestCode)來結(jié)束 Activity2。(一般在onActivityResult 方法調(diào)用該方法結(jié)束 Activity2)。- Force finish another activity that you had previously started with startActivityForResult(Intent, int).
- Parameters
復(fù)制代碼 還有,下面兩個(gè)方法,可以參閱文檔以及源碼研究一下。- finishActivityFromChild(Activity child, int requestCode)
- finishFromChild(Activity child)
復(fù)制代碼 2. killProcess
通過調(diào)用 android.os.Process 的相關(guān)方法,結(jié)束 App,示例如下:- btn_exit.setOnClickListener(new Button.OnClickListener() {
- @Override
- public void onClick(View v) {
- android.os.Process.killProcess(android.os.Process.myPid());
- }
- });
復(fù)制代碼 3. exit
我們知道,Java 的 exit(int code) 方法可以退出程序,通過查看該方法源碼,知道它實(shí)際上是調(diào)用下面的方法:- Runtime.getRuntime().exit(code);
復(fù)制代碼 示例代碼,如下所示:- btn_exit.setOnClickListener(new Button.OnClickListener() {
- @Override
- public void onClick(View v) {
- System.exit(0);//正常退出App
- }
- });
復(fù)制代碼 接下來,我們研究一下這個(gè)方法。java.lang.System這個(gè)類的該方法jdk說明:- exit
-
- public static void exit(int status)
- 終止當(dāng)前正在運(yùn)行的 Java 虛擬機(jī)。參數(shù)用作狀態(tài)碼;根據(jù)慣例,非 0 的狀態(tài)碼表示異常終止。
- 該方法調(diào)用 Runtime 類中的 exit 方法。該方法永遠(yuǎn)不會(huì)正常返回。
-
- 調(diào)用 System.exit(n) 實(shí)際上等效于調(diào)用:
-
- Runtime.getRuntime().exit(n)
-
- 參數(shù):
- status - 退出狀態(tài)。
- 拋出:
- SecurityException - 如果安全管理器存在并且其 checkExit 方法不允許以指定狀態(tài)退出。
- 另請參見:
- Runtime.exit(int)
復(fù)制代碼 也就是說,參數(shù)為非0值的話是異常退出程序。參數(shù)為0的話,就是正常退出。 |
|