2

在我的应用程序中,我有 2 个列表活动,可以通过单击它们的项目来启动一个或另一个。

|--Activity1--|           |--Activity2--|           |--Activity1--|
|   item11    | ->click-> |   item21    |           |   item21    | ->click-> ...
|   item12    |           |   item22    | ->click-> |   item12    | 
|   item13    |           |   item23    |           |   item13    |
|-------------|           |-------------|           |-------------|

所以如果用户点击太多,他可以填满所有的堆栈,系统会抛出一个StackOverFlowException不是吗?

我当时选择的解决方案是用 标记这两个活动noHistory="true",但现在我很遗憾用户无法使用后退按钮在这两个活动之间导航。

有人可以帮我找到更好的选择吗?

提前致谢

编辑:为了更全面,让我们解释一下这个活动工作流的目标是什么:

我有一个数据库,其中存储了一个名称列表,该列表链接到一年中的天数列表。一个名字可以关联多天,同一天可以关联多个名字。

the database schema 

|  names  |---< n, m >---|  days  |

所以这个活动工作流是一种数据库导航器:

  • Activity1NameListActivity,它显示链接到特定日期的名称列表。
  • Activity2DateListActivity,它显示链接到特定名称的日期列表。

当用户单击 的项目(名称)时NameListActivityDateListActivity会从链接到单击名称的日期列表开始。
同样的事情,当用户点击 的一个项目(一天)时DateListActivityNameListActivity会以链接到点击的日期的名称列表开始。

4

7 回答 7

6

所以如果用户点击太多,他可以填满所有的堆栈,系统会抛出一个 StackOverFlowException 不是吗?

不,不会的。

于 2010-01-08T14:52:27.330 回答
1

我不明白为什么从 Activity2 中删除 Activity1 的能力会降低用户体验。我相信当您浏览此类菜单时,您会在脑海中创建一个分层列表,因此当单击 item22 时,如果我被送回 Activity1,我会感到困惑。

我需要有关菜单内容的更多详细信息来建议另一种设计,但您最好重新考虑菜单系统。

于 2010-01-08T12:34:11.083 回答
1

据我了解,Android 的活动“栈”并不是传统意义上的“栈”,内存的管理方式更加智能。活动堆栈实际上在堆上,如果需要,操作系统将杀死堆栈中较低的活动。

我想说最坏的情况是你失去了一些古老的历史。

如果你想测试它,在每个活动中分配大量的内存,这样 5 或 6 会填满可用内存,然后尝试一下。

于 2010-01-08T18:09:33.487 回答
1

通用软件是正确的。您不必担心堆栈溢出。:) 但是,您可以设计应用程序来清除堆栈以避免您描述的情况。查看Clearing the Stack,具体使用clear top

于 2010-01-08T22:08:36.187 回答
0

您需要做的是将历史记录存储在某种结构中,而不是依靠堆栈为您维护它。然后,您可以保持良好的用户体验,而不会破坏堆栈。

于 2010-01-08T12:46:41.187 回答
0

尝试删除这个 noHistory="true" 而不是把 android:launchMode="singleTask" http://developer.android.com/guide/topics/manifest/activity-element.html#lmode 但是马克@commonsware你会很好。

于 2010-01-08T15:13:58.427 回答
0

我的应用程序也有类似的问题。似乎问题在于每个活动的嵌套视图数量。所以,如果你有,例如:

tab->
    linear layout->
        text,
        linear layout->
             text,
             scroll->
                  text,
                  linear layout->
                       image, 
                       text

也许还有更多的嵌套,从这样的视图到类似的视图并返回几次(根据我的经验)后,你会得到堆栈溢出的可能性很高。使用 hierarchyviewer (android-sdk/tools) 检查嵌套。也告诉我你是否解决了这个问题,因为我仍然不知道如何解决它......

于 2010-01-08T15:56:54.887 回答