现象如下:我有两个Activity,A和B。A是入口Activity,进入A后,一个Handler延时10秒发送一个空的消息,Handler接收到消息后,进行Intent跳转到B。在10秒的时间内,我点击了Home键。10S延时消息处理是在后台处理的,到了10S后,Handler接收到了消息进行Intent跳转了,打印Activity声明周期,发现A走了暂停,停止和摧毁方法,B并没有进入OnCreate,而是再次在主页点击应用图标的时候才进入OnCreate方法,程序后台运行期间,B没有执行任何生命周期中的方法。有人能解释下么,多谢。
public class ActivityA extends Activity
{ private String TAG = "ActivityA"; private Handler mHandler = new Handler() { @Override
public void handleMessage(Message msg)
{
super.handleMessage(msg);
Log.e(TAG, "Intent");
Intent intent = new Intent();
intent.setClass(ActivityA.this, ActivityB.class);
startActivity(intent);
ActivityA.this.finish();
}
}; @Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main); mHandler.sendEmptyMessageDelayed(0, 10000);
Log.e(TAG, "onCreate");
}
@Override
protected void onDestroy()
{
super.onDestroy();
Log.e(TAG, "onDestroy");
} @Override
protected void onPause()
{
super.onPause();
Log.e(TAG, "onPause");
} @Override
protected void onResume()
{
super.onResume();
Log.e(TAG, "onResume");
} @Override
protected void onStop()
{
super.onStop();
Log.e(TAG, "onStop");
}
}类B
public class ActivityB extends ActivityGroup
{
private final static String TAG = "ActivityB";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.mainb);
Log.e(TAG, "onCreate");
} @Override
protected void onDestroy()
{
super.onDestroy();
Log.e(TAG, "onDestroy");
} @Override
protected void onPause()
{
super.onPause();
Log.e(TAG, "onPause");
} @Override
protected void onResume()
{
super.onResume();
Log.e(TAG, "onResume");
} @Override
protected void onStop()
{
super.onStop();
Log.e(TAG, "onStop");
}
@Override
protected void onStart()
{
Log.e(TAG, "onStart");
super.onStart();
}
@Override
protected void onRestart()
{
Log.e(TAG, "onRestart");
super.onRestart();
}
}
如果你在切换程序5s内,在启动你的ActivityB,是可以的。其余的不允许
这个没太明白啥意思,能给解释下么?多谢 5S内启动B是可以的,可以走OnCreate么?
刚才测试了下,如果在跳转前5S内点击Home键,ActivityB会走正常生命周期方法,并且界面会自动弹出展示。如果跳转前5S之外点击Hone键,ActivityB只有在重新点击图标的时候才会走OnCreate方法,程序好像挂起在那了。