5

我正在使用操作栏构建一个包含两个活动的 android 应用程序(https://github.com/johannilsson/android-actionbar,因为我的目标是 Android 2.2)。

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

我遇到的问题是,使用示例中为我正在使用的操作栏提供的 createIntent 函数,当用户点击主页按钮返回到 Feed 活动时,活动仍然被破坏而不是恢复。

通过一些调试,我发现它正在被破坏,不是在第一次暂停和停止 Activity 时,而是在请求它恢复时发生。

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

这是一个主要的烦恼,并且大大减慢了应用程序的速度,因为它必须重新加载它的数据以供提要(它被缓存,但它不是立即重新加载数据)。

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

4

2 回答 2

4

你想使用:

FLAG_ACTIVITY_REORDER_TO_FRONT

来自 Android文档的引用:

如果在传递给 Context.startActivity() 的 Intent 中设置,则此标志将导致已启动的活动被带到其任务历史堆栈的前面(如果它已经在运行)。

例如,考虑一个由四个活动组成的任务: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;    
}
于 2011-08-11T16:03:28.647 回答
1

根据哪个类正在启动什么,您可能会遇到一个问题,即您的活动的新实例正在启动而旧的实例正在被销毁。这就是文档所说的FLAG_ACTIVITY_CLEAR_TOP

如果设置,并且正在启动的活动已经在当前任务中运行,那么不会启动该活动的新实例,而是关闭它上面的所有其他活动,并且此 Intent 将被传递到(现在顶部)作为新意图的旧活动。

请注意,它说“如果正在启动的活动已经在当前任务中运行......”所以我不确定,但如果您的调试显示活动也被破坏,这将是有意义的。

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

作为旁注/问题,如果ActionBar直到 3.0 才可用,您如何“定位” 2.2?

于 2011-08-11T15:52:21.170 回答