Dilemna:防止StackOverflowException或改善用户体验?

时间:2010-01-08 12:28:18

标签: android workflow-activity

在我的应用程序中,我有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,它会显示与特定名称相关联的天数列表。

当用户点击NameListActivity的项目(名称)时,DateListActivity会以链接到所点击名称的天数列表开始。
同样,当用户点击DateListActivity的项目()时,NameListActivity将以链接到所点击日期的列表名称开始。

7 个答案:

答案 0 :(得分:6)

  

因此,如果用户点击太多,他就可以   填写所有堆栈,系统将   抛出一个StackOverFlowException不是   它?

不,它不会。

答案 1 :(得分:1)

我不明白为什么从Activity2中移除Activity1的能力会降低用户体验。我相信当你导航这种类型的菜单时,你会在心里创建一个层次上的列表,所以当点击item22时,如果我被送回Activity1,我会感到困惑。

我需要有关菜单内容的更多详细信息以建议其他设计,但您可能最好重新考虑菜单系统。

答案 2 :(得分:1)

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

我想说最糟糕的事情就是你失去了一段古老的历史。

如果要测试它,请在每个活动中分配大量内存,以便5或6将填充可用内存,然后尝试。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

尝试删除此noHistory =“true”,而是将android:launchMode =“singleTask” http://developer.android.com/guide/topics/manifest/activity-element.html#lmode 但Mark @commonsware你会很好。

答案 6 :(得分:0)

我的申请遇到了类似的问题。 似乎问题在于每个活动的嵌套视图的数量。所以,如果你有,例如:

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

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