当一项活动带有;“单一任务”;启动模式进入前台-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"));
}
}
}