2011-08-11 58 views
5

我正在建设一个Android应用程序与两个活动利用行动酒吧(https://github.com/johannilsson/android-actionbar,因为我的目标是Android 2.2)。机器人当返回到活动它被销毁,不恢复

它有许多活动。有一个称为Feed的“主页”活动,另一个称为“设置”的活动。

我遇到的问题是使用示例中给出的操作栏的示例中给出的createIntent函数,当用户点击主页按钮以返回Feed活动时,活动仍然会被销毁而不是恢复。

随着一些调试,我发现它被破坏,而不是当活动第一次暂停和停止,但当它的要求恢复发生。

public static Intent createIntent(Context context) 
{   
    Intent i = new Intent(context, Feed.class);   
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);   
    return i;  
} 

这是一个重大的烦恼,并大大减慢应用程序,因为它有重新加载其对饲料的数据(这是缓存,但其没有即时得到重新载入数据)。

那么我该如何避免这种行为?为什么会发生这种情况,因为我认为那里的额外标志应该阻止这种行为。

回答

4

你想使用:

FLAG_ACTIVITY_REORDER_TO_FRONT 

报价在Android docs

如果传递给Context.startActivity()的意图设置,这个标志将 导致启动的活动是如果它已经在运行,则将它带到其历史堆栈的前面 。

例如,考虑由四个活动组成的任务:A,B,C, D.如果D调用startActivity()并将Intent解析为活动B的 组件,那么B将被带到 历史堆栈的前端,结果为:A,C,D,B。此标志将为 如果FLAG_ACTIVITY_CLEAR_TOP也被指定,则被忽略。

public static Intent createIntent(Context context) 
{   
    Intent i = new Intent(context, Feed.class);   
    i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);   
    return i;  
} 
1

根据哪个类正在启动什么,您可能会遇到活动的新实例正在启动并且旧活动正在被销毁的问题。这是该文件说,怎么样FLAG_ACTIVITY_CLEAR_TOP

如果设置,以及正在启动的活动已经在当前任务之上运行,则代替开展该活动的一个新实例,所有其他活动的它将被关闭,并且这个意图将作为新的意图被传递给(现在在顶部)旧的活动。

注意,它说:“如果活动正在展开在当前任务已经运行......”所以我不知道,但是这将使意义,如果你的调试已经显示出你的活动也正在被摧毁。

调试时,你在看类对象的“id”数字吗?在您的课程的onCreate()onDestroy()方法中设置一个断点,并查看每个类中的类的ID。如果它们不同,那么你知道你有两个不同的活动实例。

作为一个附注/问题,你如何“定位”2.2如果ActionBar直到3.0才可用?

+1

我认为他是使用动作条是国产版本,以模拟3.0 :)外观。我自己使用它,它工作得很好。 – Jack

+0

我设置了断点并监视了id和它的相同id,直到我试图返回到活动时它被销毁然后重新创建(因此id的更改),但是当意图被调用时它被销毁。 我有一种感觉,这个问题与被停止的活动有关,所以它没有运行,这就是为什么它被破坏和重新创建。 – lloydsparkes

相关问题