【发布时间】:2017-09-01 13:53:10
【问题描述】:
让我直奔问题。
有一个类似的老问题: Continue Service even if application is cleared from Recent app。请在继续之前通过link。
我必须在应用程序完全销毁之前将一些数据保存到本地数据库。
我对服务的 onTaskRemoved() 方法有以下问题:
- onTaskRemoved() 方法不会在每次应用程序(以及服务)从最近的应用程序屏幕停止时触发。
- 即使每次调用onTaskRemoved(),该方法也没有完全执行。我的意思是,如果方法中有 20 条语句,则只执行 5 或 10 条语句,然后方法中断。就像我有 20 个 System.out.println() 语句,而不是只有 5 个或 10 个或 12 个(任何随机数)语句打印,然后方法中断。
所以我可以依靠 onTaskRemoved() 方法来清理应用程序获取的资源。
这是我的应用程序发布的阻塞问题。我已经尝试了每一个技巧。就像在堆栈中至少有一个活动(我称之为 GhostActivity),这样如果应用程序从最近的应用程序屏幕中被杀死,我们可以在 onDestroyed() 方法中清理活动。 onDestroyed() 被调用,但它具有与 onTaskRemoved() 方法完全相同的问题。
几周以来我一直被这个问题困扰,这很烦人。如果有人有任何解决方案,请告诉我。
【问题讨论】:
-
“在应用程序完全销毁之前,我必须将一些数据保存到本地数据库中”——当数据更改时,您需要保存数据。不要等到您的进程被终止再尝试保存它。
-
@CommonsWare 实际上,当应用程序被杀死时,我需要做更多的事情。我提到数据库任务只是为了让问题变得简单。当我们以编程方式更改 WifiConfiguration 时,我需要禁用热点并恢复用户的 WifiConfiguration。还有一些事情要做。因此,如果我能够将数据保存到数据库中,我将能够执行其他任务。
-
“当我们以编程方式更改 WifiConfiguration 时,我需要禁用热点并恢复用户的 WifiConfiguration”——那么也许您一开始就不应该更改这些内容。有很多方法可以终止您的进程,其中许多方法不会对您的应用产生任何形式的回调。
-
其实,这是应用程序的核心功能之一。我知道可能还有更多的案例。我已经处理了应用程序在这种极端情况下的行为方式,但是从最近的应用程序中终止应用程序是用户有意识的决定,因此这是一种特殊情况。如果我们能处理这种情况,那将非常有帮助。我还尝试了启动清理服务的警报管理器,但由于不能保证 onDestroyed 方法将被完全执行,这也不起作用。
标签: android service android-service background-service