当一项活动带有;“单一任务”;启动模式进入前台-Android

当一项活动带有;“单一任务”;启动模式进入前台-Android,android,android-intent,android-activity,Android,Android Intent,Android Activity,我有一个“单任务”模式的活动。当此活动通过点击主键或其他应用程序转到后台时,如果它返回前台,将调用哪些方法 onCreate(Bundle savedInstanceState) with savedInstanceState != null onRestoreInstanceState(Bundle savedInstanceState) 我认为,因为这个活动只有一个实例,所以它不需要保存和恢复它的状态,并且始终保持它自己的状态。我说的对吗?当具有单任务模式的活动出现在前台时,将调用的方法顺

我有一个“单任务”模式的活动。当此活动通过点击主键或其他应用程序转到后台时,如果它返回前台,将调用哪些方法

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

我认为,因为这个活动只有一个实例,所以它不需要保存和恢复它的状态,并且始终保持它自己的状态。我说的对吗?

当具有单任务模式的活动出现在前台时,将调用的方法顺序如下(如果Android在后台关闭了承载活动的进程:

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

下面是示例代码,用于演示概念:AndroidManifest.xml中的活动声明:

为了便于说明,我只使用编辑文本,Android在配置更改期间或用户按HOME键时保存其状态

请注意,
onSaveInstanceState(Bundle outState)
是在活动可能被终止之前调用的,因此当它在将来某个时间返回时,可以使用
onRestoreInstanceState(Bundle savedInstanceState)
恢复其状态


正如David在另一个回答中提到的,如果Android没有终止承载活动的进程,那么将任务从后台带到前台将不会导致调用onCreate()或onRestoreInstanceState()

如果Android没有终止承载
活动的进程,那么将任务从后台带到前台将不会导致调用
onCreate()
onRestoreInstanceState()
。不需要创建
活动
(它已经存在),也不需要恢复该阶段,因为它尚未更改


但是,如果Android在应用程序处于后台时终止了承载
活动的进程,则当用户返回应用程序时,Android将为应用程序创建一个新进程,创建
活动的新实例,调用
onCreate()
将保存的实例
包作为参数传递。它还将调用
onRestoreInstanceState()
将保存的实例
捆绑包作为参数传递。

这是不正确的。如果任务只是从后台移动到前台,则不会调用
onCreate()
onRestoreInstanceState()
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"));
        }
    }


}