2017-09-13 9 views
0

在阅读关于这个话题的所有关于SO的问题之后,我对此非常恼火。有什么方法可以改变崩溃后Android重新开始活动的行为

崩溃会发生,没有人写完美的代码。有些应用程序需要特定的逻辑层次结构。最好的例子是登录屏幕的想法,你在某些活动中在服务器上做某些事情,现在应用程序崩溃。重新启动后,该应用程序会丢失其所有登录会话数据并将其保存起来可能不是最安全的想法。因此,在崩溃后向用户呈现登录屏幕将是最好也是最合乎逻辑的事情。最好的用户体验。

但是,Android决定记住活动堆栈,但只能在其下面的“空白”应用程序中重新启动上次工作活动。 我看到的唯一可行的选择是检查每个单个活动,如果某些登录状态可用或不可用,并且如果没有,则使用clear-top或clear-task启动登录(启动器)活动。但是这几乎迫使你编写一个基类extends Activity这个行为被实现,然后所有的活动必须扩展它。但是,如果由于某种原因,你不能扩展它,因为你需要扩展一些其他类型的活动?

android:clearTaskOnLaunch,但每当用户通过主页按钮退出时都会发生这种情况。每当用户按下主页按钮时,都会有一个对手finishOnTaskLaunch完成一项活动。所以Android开发者意识到,有时候人们会希望应用程序在退出后以某种状态出现,但崩溃似乎是所有这些特有的。

使用自定义UncaughtExceptionHandler为我提供了一些在崩溃后采取行动的机会,但由于应用程序状态是不可恢复的,我只能执行除了Android自己的行为之外还会发生的某些任务。

所以我的一个简单问题是,如果有任何方法,它是内置于Android中的,这使我可以以一种自然的方式更改Android的故障后行为,而不依赖于它运行的版本在一定程度上c),并且会导致用户体验稍微平滑。

回答

0

我会说,获得你想要的结果的正确方法是提供一个合适的父或导航堆栈。你可以在这里阅读更多https://developer.android.com/training/implementing-navigation/ancestral.html

但它的要点是使用家长活动的想法来提供适当的后退导航。如果活动已经存在,它就会回到它,如果它没有(例如在崩溃的情况下),它将在用户导航回来时启动正确的活动。

NavUtils是一个方便的类来帮助建立这种行为,并且是支持库的一部分,它可以处理一系列不同的API级别。

+0

这并没有改变用户登录空白应用程序的事实,因为这些活动从未执行(在这个新进程中),没有会话/登录等,所以某些事情从未发生过。 – NikkyD