2017-02-14 44 views
1

我想开发一个android应用程序。我已经使用this教程。 MainActivity代码如下onCreate()工作流混淆

@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线为空或不是,我们正试图保存用户当前的屏幕。我想,它涵盖了按Home按钮并重新打开应用程序并旋转屏幕的可能性。但在目前情况下,应用程序重新打开时不会调用onCreate。但是我通过了以下link的android工作流程,它不接受再次调用onCreate()。但是我们使用savedInstanceState作为参数,用于检查它是否具有以前的状态或不理解。总之,我很困惑savedInstanceState的用法。如果它用于检查以前的状态,那么为什么onCreate不被调用?

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

+1

onRestoreInstanceState是解决你困惑的神奇功能 – FlanschiFox

+1

我知道有这样的功能,但我不会使用任何存储的参数。我只是对解释和引用的用法感到困惑。 – starrystar

+4

当新创建活动时,会调用onCreate。当应用程序重新打开时,它会重新启动,而不是重新创建,这意味着您的活动仍然存在。当您旋转手机时,活动将被销毁并在新配置中重新创建,因此onCreate被称为 –

回答

0

与它们对应的回调,则不同的状态:

onCreate - >created活动被创建,但还没有运行或者不再可见。

onStart - >started该活动已启动,但尚未运行或失焦。

onResume - >resumed活动正在运行。

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

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

onDestroy - >destroyed活动已完成,例如,因为存在方向改变,或者系统正在为记忆而毁掉它。

在你的例子中,当进入主屏幕时,活动正在停止,但没有被销毁,所以当返回到应用程序时,onCreate未被调用。

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

对于这个很好的图表,请参阅Android开发人员documentation的活动生命周期。

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

一些更详细的信息可以找到here

0

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

0

正确的,与应用程序中的方法打交道时,一定要了解每一行做什么...例如:

super.onCreate(savedInstanceState); 

这意味着你正在创建的方法中的一个超类。了解你打来的电话。