2013年1月10日 星期四

【Android】Stopping and Restarting an Activity停止和重新啟動一個活動


正確地停止或重新執行Activity非常重要,否則可能導致程式執行不順暢,有幾個關鍵時刻必須注意:

  1. 使用者開啟其他app後,再重新執行你的app時。
  2. 當使用者從你的app執行一個需要開啟另一個Activity後,再重回你的app時。
  3. 當使用者正在使用你的app中,突然接到其他電話時。

【Stop Your Activity】

  • 在某些情況,系統不會透過onDestroy()就會直接關掉你的app,必須適時使用onStop來避免內容流失。

以一個儲存草稿的例子當作範例,如下:
protected void onStop() {
    super.onStop();

    ContentValues values = new ContentValues();
    values.put(NotePad.Notes.COLUMN_NAME_NOTE, getCurrentNoteText());
    values.put(NotePad.Notes.COLUMN_NAME_TITLE, getCurrentNoteTitle());
//儲存當前的草稿內容和標題
    getContentResolver().update(mUri, values, null, null);
//修改筆記本的內容
}

【Start/Restart Your Activity】

  • 一般會使用onRestart()的情況是之前的activity是使用onStop(),而onStart()則是使用onRestart()後再使用。
  • 一般onStart()所重建的資源就是之前使用onStop()所關掉的資源。

以一個使用者已經離開app一段時間後重返的情況當做例子,如下:
protected void onStart() {
    super.onStart();
 
    LocationManager locationManager =
            (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
    //因為重新啟動app,所以要先確認GPS是否還可以正常運作
    if (!gpsEnabled) {
        //如果GPS不能使用,必須執行哪些程序
    }
}
protected void onRestart() {
    super.onRestart();
    //app已經從stop轉換成restart的狀況   
}

  • 一般的app在使用onStop()之後已經大部份的資源釋放,只有少數的app需要使用onDestory()做最後的釋放資源。

參考來源:Stopping and Restarting an Activity

0 意見:

張貼留言