现象如下:我有两个Activity,A和B。A是入口Activity,进入A后,一个Handler延时10秒发送一个空的消息,Handler接收到消息后,进行Intent跳转到B。在10秒的时间内,我点击了Home键。10S延时消息处理是在后台处理的,到了10S后,Handler接收到了消息进行Intent跳转了,打印Activity声明周期,发现A走了暂停,停止和摧毁方法,B并没有进入OnCreate,而是再次在主页点击应用图标的时候才进入OnCreate方法,程序后台运行期间,B没有执行任何生命周期中的方法。有人能解释下么,多谢。

解决方案 »

  1.   

    类A
    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();
        }
        
    }
      

  2.   

    不是代码的问题,anroid系统的设计,就是这样的。如果你在切换程序5s内,在启动你的ActivityB,是可以的。其余的不允许
      

  3.   


    如果你在切换程序5s内,在启动你的ActivityB,是可以的。其余的不允许
    这个没太明白啥意思,能给解释下么?多谢  5S内启动B是可以的,可以走OnCreate么?
      

  4.   


    刚才测试了下,如果在跳转前5S内点击Home键,ActivityB会走正常生命周期方法,并且界面会自动弹出展示。如果跳转前5S之外点击Hone键,ActivityB只有在重新点击图标的时候才会走OnCreate方法,程序好像挂起在那了。