onCreate()工作流混乱

时间:2017-02-14 11:23:38

标签: android android-lifecycle

我正在尝试开发一个Android应用程序。我使用过this教程。 MainActivity代码如下

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

        ActionBar actionBar = getSupportActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeButtonEnabled(true);

        if (savedInstanceState == null) {

            // withholding the previously created fragment from being created again
            // On orientation change, it will prevent fragment recreation
            // its necessary to reserve the fragment stack inside each tab
            initScreen();

        } else {
            // restoring the previously created fragment
            // and getting the reference
            carouselFragment = (CarouselFragment) getSupportFragmentManager().getFragments().get(0);
        }
    }

据我所知,检查savedInstanceState的行是否为null,我们正在尝试保存用户当前屏幕。我认为,它涵盖了按下主页按钮并重新打开应用程序和旋转屏幕的可能性。但在当前情况下,重新打开appciation时不会调用onCreate。但是我在以下link中经历了android工作流程,它不再接受再次调用onCreate()。但我们使用savedInstanceState作为参数,用于检查它是否具有先前的状态或不理解。总而言之,我对savedInstanceState的使用感到困惑。如果它用于检查以前的状态,那么为什么不调用onCreate?

编辑:正如评论所解释的那样,重新打开应用程序并不会导致娱乐。据我所知onStart()被调用。如何在onStart中检查savedState以重新创建视图或存储以前的片段?

3 个答案:

答案 0 :(得分:0)

具有相应回调的不同状态是:

onCreate - > created活动已创建,但尚未运行或不再可见。

onStart - > started活动已启动,但尚未投放或失焦。

onResume - > resumed活动正在运行。

onPause - > paused活动已暂停,因为它失去焦点/不是前台活动。

onStop - > stopped活动已停止,因为它已不再可见。

onDestroy - > destroyed活动被销毁,因为它已完成,例如因为有一个方向改变,或者系统正在销毁它。

在您的示例中,当转到主屏幕时,活动正在停止,但未被销毁,因此在返回应用时,不会调用onCreate

旋转手机时,无法使用当前活动,因为它的方向错误,因此会被销毁并创建新活动。在这种情况下,会调用onCreate

有关此的精彩图表,请参阅活动生命周期中的Android开发人员documentation

通常,当您的活动刚刚停止时,您不需要savedInstanceState,因为您的活动将保留其状态。如果您确实希望在停止时使用savedInstanceState,请使用onRestoreInstanceState(Bundle)。它在onStart()之后调用。

可以找到更详细的信息here

答案 1 :(得分:0)

当您在openend应用程序中更改方向时,将调用

onCreate()。在savedInstanceState中,它可以找到活动在方向更改之前所处状态的一些信息。我与重新打开应用程序无关。

答案 2 :(得分:0)

正确,在处理应用程序中的方法时,请确保您了解每行的内容...例如:

super.onCreate(savedInstanceState);

这意味着您正在该方法中创建一个超类。了解你在呼唤什么。