2011年10月27日 星期四

Android程式結束後並結束該程式Process方法

在Android下,當程式結束進行finish()或進行onDestroy()時,通常該程式的process是不會結束掉的,
例如寫一個讀取GPS座標的程式,當離開程式後上方的GPS圖示還是會繼續讀取座標,這樣子情況往往會造成電力無謂的消耗。

為避免類似情況出現,建議在程式結束生命週期內採用:
android.os.Process.killProcess(android.os.Process.myPid());
或者
System.exit(0)
前者為Android Dalvik VM的使用方式;後者則是標準Java結束方式。既然使用的是Android當然建議使用前者囉。
下圖是參考,注意的部分如果程式是在Activity與Activity間切換時建議要多加判斷;以判斷是離開程式或切換程式,以免進行Activity切換時結束本身process導致程式強制結束。

2 則留言:

  1. 切換Activity不是最多跑到onStop?
    為何要在onDestroy多加判斷?

    回覆刪除
  2. 舉例....
    private void openOtherActivity() {
    /* new一個Intent物件,並指定要啟動的class */
    Intent intent = new Intent();
    intent.setClass(MainActivity.this, OtherActivity.class);

    /* 呼叫一個新的Activity */
    startActivity(intent);
    /* 關閉原本的Activity */
    MainActivity.this.finish();
    }

    如果切換時要結束掉原本Activity,通常我們會使用finish()來結束這個Activity,這時生命週期就會進入到onDestroy了.....
    至於為何進行切換時要結束掉原本的Activity就得 "視情況" 了,通常如果沒有進行關閉的話你按返回鍵就會回到原本的Activity,
    也就是說如果是MainActivity --> OtherActivity --> MainActivity 這時程式是會跑兩個MainActivity按返回鍵兩次才會離開程式的。
    如果是MainActivity --> OtherActivity --> 按返回鍵離開,這時在第一個MainActivity就要如同上述例子一樣下finish()了。

    回覆刪除