我正在尝试开发一个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以重新创建视图或存储以前的片段?
答案 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)
onCreate()
。在savedInstanceState
中,它可以找到活动在方向更改之前所处状态的一些信息。我与重新打开应用程序无关。
答案 2 :(得分:0)
正确,在处理应用程序中的方法时,请确保您了解每行的内容...例如:
super.onCreate(savedInstanceState);
这意味着您正在该方法中创建一个超类。了解你在呼唤什么。