簡體   English   中英

當具有“singleTask”launchMode的活動來到Foreground - Android時

[英]When an activity with “singleTask” launchMode comes to Foreground - Android

我有一個“singleTask”模式的活動。 當此活動通過錄制主鍵或其他應用程序進入后台時,如果它返回前台將調用哪些方法?

onCreate(Bundle savedInstanceState) with savedInstanceState != null
onRestoreInstanceState(Bundle savedInstanceState)

我認為因為這個活動有一個實例,它不需要保存和恢復它的狀態,它總是保留自己的狀態。 我對嗎?

當具有singleTask模式的Activity進入前台時,將調用的方法序列如下( 當Android在應用程序處於后台殺死托管Activity的進程時)。

1.onCreate
2.onStart
3.onRestoreInstanceState和
4.onResume

下面是演示概念的示例代碼:AndroidManifest.xml中的活動聲明: <activity android:name="Second" android:launchMode="singleTask"></activity>

public class Second extends Activity {

    EditText mEdit;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.imageview_not);     
        if (savedInstanceState!=null){
            Log.e("onCreate of Actiity", savedInstanceState.getString("editval"));      }
        mEdit=(EditText) findViewById(R.id.editText1);

    }

    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        Log.e("Second", "onResume");
    }

    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        Log.e("Second", "onStart");
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);        
        outState.putString("editval", mEdit.getText().toString());
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onRestoreInstanceState(savedInstanceState);
        Log.e("Second", "onRestoreInstanceState");
        if (savedInstanceState!=null){
            Log.e("onRestoreInstanceState", savedInstanceState.getString("editval"));
        }
    }


}

為了便於說明,我只是使用編輯文本,Android在配置更改期間或用戶按HOME等時保存其狀態。

請注意,在活動可能被onSaveInstanceState(Bundle outState)之前調用onSaveInstanceState(Bundle outState)以便在將來某個時間返回時,可以使用onRestoreInstanceState(Bundle savedInstanceState)恢復其狀態。

另外正如David在另一個答案中所提到的,如果Android沒有殺死托管Activity的進程,那么將任務從后台運行到前台不會導致調用onCreate()和onRestoreInstanceState()。

如果Android沒有殺死托管Activity的進程,那么將任務從后台帶到前台將不會導致調用onCreate()onRestoreInstanceState() Activity不需要創建(它已經存在)和階段並不需要恢復,因為它並沒有被改變。

但是,如果Android在應用程序處於后台時殺死了托管Activity的進程,當用戶返回應用程序時,Android將為應用程序創建一個新進程,創建一個新的Activity實例,調用onCreate()傳遞保存的實例Bundle作為參數。 它還將調用onRestoreInstanceState() ,將保存的實例Bundle作為參數傳遞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM