gpt4 book ai didi

android - 当 App 崩溃时会发生什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:15 28 4
gpt4 key购买 nike

我正在开发一个 Android 应用程序,正如预期的那样,在某些情况下我的代码会崩溃(错误、空指针等)。

当应用程序崩溃时,它会自行重启,即使我没有编写任何代码来执行此操作(我想这是默认行为?!)但问题是,应用程序以不正确的状态打开。

以下是应用启动时通常会发生的情况:

  • 最初,应用打开时会出现“启动画面”。此屏幕尝试使用共享首选项中的持久 token 对用户进行身份验证,并从服务器加载一些默认值并将它们持久保存在某些服务中。
  • 根据登录成功,它会转到主屏幕或登录屏幕。

当应用程序正常启动时,一切正常,初始化序列按预期执行,但当它因崩溃而重新启动时,本应在启动画面 fragment 中填充的值(例如登录用户或从服务器加载默认值)都是无效的,这意味着它们永远不会被执行。

这让我相信应用重启时的事件顺序是完全错误的,即不是使用正确的 Activity 重启应用,在 list 中指定为 Launcher,它似乎错误地重启了事情并从错误的 Activity 。

那么问题来了:是什么决定了我的应用程序应该在发生崩溃时自行重启,又是什么决定了它应该如何启动?当应用程序从崩溃中启动时,我是否可以捕获任何事件,以便我可以覆盖初始化序列?有没有办法强制应用始终从启动器 Activity 启动?

非常感谢,

最佳答案

当一个 Activity 由于崩溃而重新启动时,如果运行前台 Activity 的进程消失了,如果它没有有效的保存状态(通常意味着它已暂停并且有),系统将丢弃该 Activity 给出系统暂停前的 onSaveInstanceState 结果)。一旦系统决定是否丢弃该 Activity ,它将恢复现在位于堆栈顶部的任何 Activity 。如果这是您的一项 Activity ,要么是因为您在崩溃的 Activity 之后还有另一个 Activity ,要么是崩溃的 Activity 不知何故处于稳定的暂停状态,那么系统将再次启动您的流程以显示该顶级 Activity 。您可以尝试在 AndroidManifest 主要 Activity (启动器 Activity )声明中设置 clearTaskOnLaunch="true" 并为除主要 Activity 之外的其他 Activity 设置 android:finishOnTaskLaunch ="true" 看看是否如此防止应用程序在崩溃后以其他状态重新启动。另一种方法是检查您的 Activity 在哪里重新开始,然后在起点检查此 Activity 是否具有所有必需的数据。如果它没有所有必需的数据,则重定向到启动器 Activity 。希望这会有所帮助。

关于android - 当 App 崩溃时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26742747/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com