如何确定Android应用程序是不是被强制关闭?

Posted

技术标签:

【中文标题】如何确定Android应用程序是不是被强制关闭?【英文标题】:How to determine if the Android Application was force closed?如何确定Android应用程序是否被强制关闭? 【发布时间】:2013-07-16 01:12:52 【问题描述】:

我需要确定我的应用程序是被强制关闭、崩溃还是正常终止。我的问题是:你会如何在 android 环境中做这样的事情。 处理异常很简单,我只需要替换 Thread.setDefaultExceptionHandler。 困难的部分是:我如何区分强制关闭和“正常”(如后按,或主页按钮 + 大量时间等)?

原因是:我们可以将本地数据库的内容同步到服务器上。我们有充分的理由允许这个操作,只允许在状态 1,在 Main 活动,而不是在状态 2。但是,如果用户在程序中发现一些 db 相关的语义错误,在 Main 活动的状态 2,然后他或她可以卡在那里。

我们已经为来电中断和其他配置更改做好了准备,因此,如果应用程序卡在状态 2,然后强制关闭应用程序,然后重新打开它,仍然会让用户处于第 2 阶段,而不是第 2 阶段1.

所以我们想给用户留一条路,让用户在强制关闭卡住后回到第一阶段,并且能够同步数据库,这样他或她的大部分工作就可以被保存。

【问题讨论】:

【参考方案1】:

不幸的是,没有办法。当用户或系统强制停止应用程序时,整个进程就会被简单地杀死。没有回调通知您这已经发生。即使onDestroy() 也不能保证被调用。这记录在文档中:"There are situations where the system will simply kill the activity's hosting process without calling this method (or any others) in it ..."

【讨论】:

那么getRuntime().addShutdownHook 或类似的东西呢。我知道on Android, the application lifecycle does not include VM termination, so calling this method will not ensure that your code is run,但没有人告诉我它什么时候被调用...有没有我可以使用的方法? @Hegi 正如我所说,没有保证的方法,也没有为此目的的方法。【参考方案2】:

也许您可以在启动时编写一个文件,然后在关闭时将其删除。如果应用启动并且该文件存在,您可以断定它已被强制关闭。

【讨论】:

为了使这个答案有效,您应该在 Android 操作系统上定义“关机” 这是我最初的想法,但是,如上所述,唯一有保证的方法是 onPause,不幸的是,当用户按下主页键时,也会调用此方法

以上是关于如何确定Android应用程序是不是被强制关闭?的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何在“强制关闭”后自动重启应用程序?

当我使用 WebView loadUrl 函数时,Android Studio 应用程序被强制关闭

android 怎么调用强制关闭

应用程序强制关闭时如何重新启动应用程序

android系统下, 如何确定一个切换到后台的应用是被系统杀死的

如何从对话中最小化或关闭应用程序?