有没有办法对历史堆栈进行读访问?

时间:2011-05-10 04:45:03

标签: android android-activity

这实际上是一件非常简单的事情:我需要知道历史堆栈中是否有任何我的活动?我不是在谈论其他应用程序,只是我自己的应用程序。我甚至不需要知道它们是什么或它们有多少,我只需要知道它是否有任何东西?有没有办法实现这个目标? (ActivityManager.getRunningTasks()。topActivity()不是为此目的。)

(我正在实现一个向后/向前功能,如许多浏览器中所见。起初我试图管理我自己的历史堆栈而根本不使用Android。所以我对清单中的所有活动使用了noHistory = true。这导致了应用程序在与其他应用程序或启动器进行交互时的行为很奇怪的问题。现在我尝试使用Android的历史堆栈进行向后操作,但是我自己的堆栈用于Foreward。但是它遇到了一个未解决的问题....不仅如此,应用程序中存在这种安全性考虑因素,如果文件已被锁定,我不能让用户返回任何活动。我必须完全控制堆栈。< / p>

已经被Android的活动生命周期模型和历史堆栈困扰了好几天。非常不灵活。他们如何假设所有应用程序在世界上的所有活动都以他们在实验室中想象的方式行事!!!在这个领域看到很多人在互联网上提问,而且在我看来,每个人都走到了死胡同,然后试图找到一些解决办法,或妥协,或者可能改变规范。 Android已经存在了3年了,但他们仍然没有做任何事情来使它更灵活。我想从第一天开始就一直是设计中一个非常基本的东西,所以他们知道这个问题,但他们无法做任何事情。称之为错误的设计。)

(这个非阻塞,非同步的对话框/消息框。我不知道他们是如何设计这个设计的。每当你想让用户确认某些东西时,你必须将程序流程分解成几个部分这无疑使得程序难以编写并且难以维护!如果你有一系列依赖于另一个的问题,你也可以实现一个状态机。)

2 个答案:

答案 0 :(得分:2)

如果您在SDK级别11及更高版本(使用Honeycomb和某些Gingerbread级别)中使用Fragments,则可以显式管理堆栈。对于常规活动,您实际上无法访问堆栈,因此您在那里运气不佳。您可以使用应用程序级堆栈实现个人堆栈:存储您用于启动活动的Intent以便您可以继续前进,然后返回另一个Intent以及每个Activity的配置数据(当每个Activity时) finish()您在onActivityResult回拨中传递此状态。

但这会非常混乱。

答案 1 :(得分:0)

由于您创建并完成了活动,因此您应该了解运行时堆栈上的内容。通常,您可以很好地控制堆栈。看看围绕操纵堆栈的ApiDemo。