【发布时间】:2014-12-18 14:16:45
【问题描述】:
我遇到了一个奇怪的问题,涉及我在 Android 应用上的片段回调流。问题来了:
我收到一个消息列表,其中一些是已读的,而另一些是新的,我将它们分开,以便将未读消息放入未读消息列表中,其余的分别放在单独的选项卡中,所有选项卡都是由片段组成,未读的列表片段和每个已读消息的详细片段。
因此,当我完成接收列表并尝试重新安装标签时,应用程序在屏幕打开和关闭时的行为会有所不同。我在流程的每个重要调用中都添加了一个日志,以下是我描述的两个场景:
屏幕开启:
12-18 12:07:09.704: D/MainActivity(14178): oncreate
12-18 12:07:10.134: D/MainActivity(14178): refreshListAfterPush
12-18 12:07:10.395: D/MainActivity(14178): refresh
12-18 12:07:10.445: D/MainActivity(14178): onStart
12-18 12:07:10.445: D/MainActivity(14178): onResume
12-18 12:07:10.875: D/JOBLIST(14178): onAttach
12-18 12:07:10.875: D/JOBLIST(14178): onCreate: joblist created
12-18 12:07:10.885: D/JOBLIST(14178): FINISHED ON CREATE
12-18 12:07:10.905: D/JOBLIST(14178): onCreateView JobListFragment
12-18 12:07:10.915: D/JOBLIST(14178): FINISHED ON CREATE VIEW
12-18 12:07:10.915: D/JOBLIST(14178): ONRESUME
12-18 12:07:15.449: D/MainActivity(14178): adding new itens to list
所以我的所有片段都正确添加到列表中并且一切正常,这是所需的行为。
当屏幕关闭并且我的活动由于 GCM 推送而收到意图时:
12-18 12:11:26.504: D/MainActivity(14353): oncreate
12-18 12:11:26.865: D/MainActivity(14353): refreshListAfterPush
12-18 12:11:27.175: D/MainActivity(14353): refresh
12-18 12:11:27.255: D/MainActivity(14353): onStart
12-18 12:11:27.255: D/MainActivity(14353): onResume
12-18 12:11:27.315: D/MainActivity(14353): onPause
12-18 12:11:27.315: D/MainActivity(14353): elapsed between resume and pause: 0
12-18 12:11:32.190: D/MainActivity(14353): adding new itens to list
12-18 12:11:32.200: D/JOBLIST(14353): UPDATE LIST JOB
由于某些原因,当屏幕关闭时,Fragment 的 onCreate 和 onCreateView 没有被调用,所以当我尝试更新它时,一些对象没有初始化,导致崩溃。
Fragment 是在 MainActivity 的 onCreate 中创建和添加的,在这两种情况下都会调用,如日志中所示。
我错过了什么,屏幕可见和不可见时的活动初始化之间有什么区别吗?
编辑:
在旧版本的应用程序中,活动的 onCreate 会在活动调用其 onResume 回调之后调用,并且一切正常。在这个回调流程中是否存在任何异步性?
注意:
我正在使用 FragmentStatePagerAdapter 来提供一些 SherlockFragment。
提前致谢
【问题讨论】:
标签: android android-activity android-fragments