在onStart()之后

时间:2019-07-22 23:16:15

标签: java android kotlin android-lifecycle

我正在对Activity进行一些回调,这些回调的功能取决于Application和Activity的状态,并在应用程序处于前台和后台时被调用。我还记录了我的活动生命周期方法调用。根据{{​​3}},一旦调用onStart()getCurrentState()应该是STARTED,但是我看到它始终是CREATED,我不知道为什么

@Override
protected void onCreate(@Nullable Bundle bundle) {
    super.onCreate(bundle);
    Log.d(TAG, String.format("%s onCreate()", getClass().getName()));

    //... more code
}

@Override
protected void onStart() {
    super.onStart();
    Log.d(TAG, String.format("%s onStart()", getClass().getName()));

    //... more code
}

@Override
protected void onSaveInstanceState(Bundle bundle) {
    super.onSaveInstanceState(bundle);
    Log.d(TAG, String.format("%s onSaveInstanceState()", getClass().getName()));

    //... more code
}

@Override
protected void onResume() {
    super.onResume();
    Log.d(TAG, String.format("%s onResume()", getClass().getName()));

    //... more code
}

@Override
public onAppBackgrounded() {
    String class = getClass().getName();
    Lifecycle.State state = getLifecycle().getCurrentState();
    Log.d(TAG, String.format("%s onAppBackgrounded() - %s", class, state);

    //... more code
}

@Override
public onAppForegrounded() {
    String class = getClass().getName();
    Lifecycle.State state = getLifecycle().getCurrentState();
    Log.d(TAG, String.format("%s onAppForegrounded() - %s", class, state);

    //... more code
}

onAppBackgrounded()onAppForegrounded()只是向LifecycleObserver注册的回调方法,用于观察应用程序生命周期。

@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onLifecycleEventStart() {
    callbackRegistrar.onApplicationForegrounded()
}

@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onLifecycleEventStop() {
    callbackRegistrar.onApplicationBackgrounded()
}

这是我前台显示应用程序时看到的内容:

2019-07-22 17:51:

19.070 4754-4754/com.myapp D/TAG: com.myapp.MyActivity onCreate()
2019-07-22 17:51:19.989 4754-4754/com.myapp D/TAG: com.myapp.MyActivity onStart()
2019-07-22 17:51:19.990 4754-4754/com.myapp D/TAG: com.myapp.MyActivity onApplicationForegrounded() - CREATED
2019-07-22 17:51:20.013 4754-4754/com.myapp D/TAG: com.myapp.MyActivity onResume()

这是我后台运行应用程序时看到的内容:

2019-07-22 1

8:05:02.527 4754-4754/com.myapp D/TAG: com.myapp.MyActivity onPause()
2019-07-22 18:05:02.664 4754-4754/com.myapp D/TAG: com.myapp.MyActivity onStop()
2019-07-22 18:05:02.703 4754-4754/com.myapp D/TAG: com.myapp.MyActivity onSavedInstanceState()
2019-07-22 18:05:03.229 4754-4754/com.myapp D/TAG: com.myapp.MyActivity onApplicationBackgrounded() - CREATED

而且,当我在状态更改侦听器中注册了多个活动时,它们都处于CREATED状态。不太确定我缺少什么。文档说,这样做是在onStop()之前调用onSavedInstanceState()的,但这显然不会在这里发生。

理想情况下,我想使用getLifecycle()。getState()告诉应用程序在后台运行时哪些活动在前台。

1 个答案:

答案 0 :(得分:0)

它的发生是由于活动的生命周期。在活动生命周期中,对于以下情况, onStop()应该转到 onCreate()

  

一旦您的活动停止,系统可能会破坏该过程   如果系统需要恢复内存,则包含活动。   即使系统在活动停止时销毁了进程,系统仍将视图对象(例如EditText小部件中的文本)的状态保留在Bundle(键-值对的blob)中,如果用户将其恢复,导航回到活动。

有关更多详细信息,请参见Activity Life Cycle

请参阅同一页面上的生命周期图