我正在对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()告诉应用程序在后台运行时哪些活动在前台。
答案 0 :(得分:0)
它的发生是由于活动的生命周期。在活动生命周期中,对于以下情况, onStop()应该转到 onCreate()
一旦您的活动停止,系统可能会破坏该过程 如果系统需要恢复内存,则包含活动。 即使系统在活动停止时销毁了进程,系统仍将视图对象(例如EditText小部件中的文本)的状态保留在Bundle(键-值对的blob)中,如果用户将其恢复,导航回到活动。
有关更多详细信息,请参见Activity Life Cycle
请参阅同一页面上的生命周期图