2012-09-27 40 views
1

我正在建立一个聊天客户端Android ICS。我有一个可以导致聊天活动的名单(联系人)活动(点击名单(联系人)列表中的一个条目后)。然后,人们可以聊天,并可以在点击聊天屏幕上的按钮后回到名单屏幕。荒诞行为的行为

用于创建意图的代码开始活动的标志是:Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

还有名册活动屏幕上的搜索按钮,这需要我们的搜索活动,这又允许我们去聊天活动。

这里使用的标志是相同的。所有三个都是singleTask。

现在的问题是,当我从名册活动到聊天活动,然后回到名册活动,那么一切都很好。但是当我从名册活动去搜索活动,然后去聊天活动,然后回到名册活动,然后名册活动得到重新创建,即oncreate()名册的功能被称为。这在其他流程中不会发生。

任何人都可以解释这一点。创建一个新的搜索活动可能不赞赏,但假设它的好,可以为什么会发生这种情况的原因?

另外ondestroy()名册活动没有被称为(因为它不是强制)。

+1

您确定要实际重新排列活动吗?这通常会造成非常尴尬的用户体验,因为它会扰乱访问屏幕的顺序。相反,看看ACTIVITY_CLEAR_TOP,通过维护一个有序的任务堆栈,可以达到类似的效果。 http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP – Matthias

+0

所以如果我使用Intent.FLAG_ACTIVITY_REORDER_TO_FRONT那么我的后退按钮不会像我以前想的那样行事?它是一个好点。 – singhsumit

+0

否 - 自从弹出活动A重新排序到活动堆栈的前端时,您将位于堆栈的顶部,此堆栈先前包含A在不同的位置,因此您的用户将遇到“间隙”在活动堆栈中更进一步。 – Matthias

回答

2

您必须始终期待onCreate在任何时间点在从其他屏幕恢复或以其他方式返回到您的活动之后被调用。 Android可能会选择终止任何已暂停的活动,即对用户隐藏的活动。当回到那个活动,如果遭到破坏,Android将通过调用的onCreate重新创建它(和onRestoreInstanceState,这就是为什么你要保存的应该活得比上下文onRetainInstanceState变化性数据。)

没有什么这种行为荒谬,它作为Android的activity life-cycle的一部分被充分记录。

+0

我认为这是荒谬的,因为oncreate()函数只能在其中一个流中调用,而不能在其他流中调用。 – singhsumit

+0

是在设备上还是在仿真器上?在内存很小的设备上,应用程序(尤其是图形较重的应用程序)在被其他屏幕(例如主屏幕或其他应用程序)留下时会非常频繁地被Android破坏。 – Matthias