我有" singleTask"模式。当此活动通过主页键或其他应用程序转到后台时,如果它返回到前台将调用哪些方法?
onCreate(Bundle savedInstanceState) with savedInstanceState != null
onRestoreInstanceState(Bundle savedInstanceState)
我认为因为这个活动有一个实例,它不需要保存和恢复它的状态,它总是保留自己的状态。我是对的吗?
答案 0 :(得分:2)
当调用具有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)
在活动被杀之前被调用,以便在将来的某个时间返回时,它可以使用onRestoreInstanceState(Bundle savedInstanceState)
恢复其状态。
正如David在另一个答案中提到的,如果Android没有杀死托管Activity的进程,那么将任务从后台运行到前台不会导致调用onCreate()和onRestoreInstanceState()。
答案 1 :(得分:1)
如果Android尚未终止托管Activity
的进程,则将任务从后台运行到前台不会导致调用onCreate()
和onRestoreInstanceState()
。 Activity
不需要创建(它已经存在),并且该阶段不需要恢复,因为它尚未被更改。
但是,如果Android在应用程序处于后台时杀死了托管Activity
的进程,则当用户返回应用程序时,Android将为应用程序创建一个新进程,创建一个新的实例Activity
,调用onCreate()
将已保存的实例Bundle
作为参数传递。它还会调用onRestoreInstanceState()
将保存的实例Bundle
作为参数传递。