【问题标题】:When I call startActivity() in onCreate(),did the other lifecycle method execute [closed]当我在 onCreate() 中调用 startActivity() 时,是否执行了其他生命周期方法[关闭]
【发布时间】:2014-05-29 13:37:00
【问题描述】:

当我在 onCreate() 方法上调用 startActivity() 方法启动其他活动时;

是否执行了其他 lifecircle 方法,例如 onStart() 或 onResume()

我有一个测试

    AppMain.java

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.app_main);

            Log.i(TAG, "onCreate");
            startActivity(new Intent(AppMain.this,AppOther.class));
        }


        @Override
        protected void onRestart() {
            Log.i(TAG, "onRestart");
            super.onRestart();
        }

        @Override
        protected void onStart() {
            Log.i(TAG, "onStart");
            super.onStart();
        }

        @Override
        protected void onRestoreInstanceState(Bundle savedInstanceState) {
            Log.i(TAG, "onRestoreInstanceState");
            super.onRestoreInstanceState(savedInstanceState);
        }

        @Override
        protected void onResume() {
            Log.i(TAG, "onResume");
            super.onResume();
        }


        @Override
        protected void onPause() {
            Log.i(TAG, "onPause");
            super.onPause();
        }

        @Override
        protected void onSaveInstanceState(Bundle outState) {
            Log.i(TAG, "onSaveInstanceState");
            super.onSaveInstanceState(outState);
        }

        @Override
        protected void onStop() {
            Log.i(TAG, "onStop");
            super.onStop();
        }



        @Override
        protected void onDestroy() {
            Log.i(TAG, "onDestroy");
            super.onDestroy();
        }


        @Override
        public void onConfigurationChanged(Configuration newConfig) {
            Log.i(TAG, "onConfigurationChanged");
            super.onConfigurationChanged(newConfig);
        }

    AppOther.java

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.app_other);

        Log.i(TAG, "onCreate");

    }

    @Override
    protected void onRestart() {
        Log.i(TAG, "onRestart");
        super.onRestart();
    }

    @Override
    protected void onStart() {
        Log.i(TAG, "onStart");
        super.onStart();
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        Log.i(TAG, "onRestoreInstanceState");
        super.onRestoreInstanceState(savedInstanceState);
    }

    @Override
    protected void onResume() {
        Log.i(TAG, "onResume");

        super.onResume();
    }


    @Override
    protected void onPause() {
        Log.i(TAG, "onPause");

        super.onPause();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        Log.i(TAG, "onSaveInstanceState");
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onStop() {
        Log.i(TAG, "onStop");
        super.onStop();
    }



    @Override
    protected void onDestroy() {
        Log.i(TAG, "onDestroy");
        super.onDestroy();
    }


    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        Log.i(TAG, "onConfigurationChanged");
        super.onConfigurationChanged(newConfig);
    }

Logcat:

05-29 05:28:11.583: I/AppMain(1257): onCreate
05-29 05:28:11.614: I/AppMain(1257): onStart
05-29 05:28:11.614: I/AppMain(1257): onResume
05-29 05:28:11.643: I/AppMain(1257): onSaveInstanceState
05-29 05:28:11.643: I/AppMain(1257): onPause
05-29 05:28:11.793: I/AppOther(1257): onCreate
05-29 05:28:11.793: I/AppOther(1257): onStart
05-29 05:28:11.793: I/AppOther(1257): onResume
05-29 05:28:12.383: I/AppMain(1257): onStop

不知道为什么onStart()和onResume()方法还能执行; 看来 startActivity() 并没有破坏 AppMain 的生命周期

【问题讨论】:

  • 1.在发布之前尝试阅读您的问题。 2. 听起来你想检查一些简单的东西 - 从这两种方法中向 logcat 添加一个调试打印,看看它们中的任何一个是否被调用。
  • 你的问题很模糊。

标签: android oncreate


【解决方案1】:

语言苍白​​,用代码说话。 测试一下。

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.v(this.getClass().toString(),"onCreate");
    //start other Activity
    this.startActivity(new Intent(this,OtherActivity.class));
}

@Override
protected void onDestroy() {
    super.onDestroy();
    Log.v(this.getClass().toString(),"onDestroy");
}

@Override
protected void onPause() {
    super.onPause();
    Log.v(this.getClass().toString(),"onPause");
}

@Override
protected void onResume() {
    super.onResume();
    Log.v(this.getClass().toString(),"onResume");
}

@Override
protected void onStart() {
    super.onStart();
    Log.v(this.getClass().toString(),"onStart");
}

}

logcat 显示:

【讨论】:

    【解决方案2】:

    问题的方式太窄,但是如果你开始另一个活动,当前活动将切换 onPause()。如果你完成了调用的活动,前一个活动将切换 onResume()。简而言之,如果您启动另一个活动,它不会调用当前活动的 onResume() 和 onStart()。

    【讨论】:

    • 这与上面@zhenghuiyan 的答案中显示的代码示例完全矛盾。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多