android FragmentActivity是不可见的,但onStop()不称为

时间:2017-03-29 09:41:54

标签: android android-fragments

有人遇到FragmentActivity的问题,在自己拨打finish()时,它只会调用onPause()而不会调用onStop()onDestroy() 。但该活动在设备上是不可见的?

我没有看到任何其他错误日志。

根据android活动生命周期,如果活动不可见,则应调用onstop()。但事实并非如此。它发生在Android 5.0上。

我找到了原因,但我不明白为什么会这样。

扩展FragmentActivity,它定义为launchmode:singleTask。

B扩展Activity,它在Manifest中定义了android:launchMode =“singleInstance”,android:theme =“@ android:style / Theme.NoDisplay”。

C扩展了FragmentActivity,在Manifest中定义了launchmode:singleTask,android:excludeFromRecents =“true”,android:taskAffinity =“com.xxx.xxxx.xxx”。

D是serviceConnector单例实例。什么处理来自绑定服务回调的事件。

场景是:

Step1 : A calls B with startActivity(intent). 
Step2 : B calls serviceConnector to send event to the service process and finish itself. It has no UI. It is set as Theme.NoDisplay.
Step3 : Service callbacks init C if not exist yet and C handle service responses event. 
Step4 : In one case, C calls B with startActivity(intent)
Step5 : B calls serviceConnection to send event. No UI. C will onPause and when B finsih itself, C onResume()
Step6: Service callbacks and found C already exist, no create new one. C handle service respsonses.
Step7: user click button on C Fragement activity, C calls finish itself, But only C got onPause(). C couldn't be finish, no onStop(), no onDestroy() is called. 

我不理解C调用B,B finsih本身,C简历和C完成后自己有问题。

2 个答案:

答案 0 :(得分:1)

如果您在finish()内的某个地方致电onCreate(),则会直接调用onDestroy(),而无需通过onPause()onStart()方法。

答案 1 :(得分:0)

  

它只会调用onPause()而不会调用onStop()onDestroy()

如果从Activity1开始Activity2背景具有透明度,则会调用onPause() Activity1,但onStop()即可。