0

我正在开发一个应用程序,它将在 JobIntentService 中执行一些后台功能。

用户从屏幕 A 启动操作。启动后台 Intent 服务。在 Intent 服务完成其工作后,它会向 Screen A 发送回调,然后向 Screen Sartes Screen B 发送一个回调,后者利用 Intent Service 的结果。

我的问题是,假设用户启动操作,然后最小化应用程序,然后 Android 操作系统由于在低内存上运行而清除屏幕 A,然后服务发回回调。

我的问题是,既然屏幕 A 不再存在,它会收到回调吗?是否可以确定必须由 Android OS 清除屏幕 A,以便我的服务可以直接启动屏幕 B?

另外,这种情况如何处理?

任何建议将不胜感激。

4

2 回答 2

2

更好的方法是创建一个独立的 BroadcastReceiver。这确保您的应用程序可以响应广播,无论服务是否正在运行。在这种情况下,您可以检查服务活动是否仍然存在。然后对此做出决定。

将以下方法与您的包名称一起使用。如果您的任何活动在前台,它将返回 true。

public boolean isForeground(String myPackage) {
    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> runningTaskInfo = manager.getRunningTasks(1); 
    ComponentName componentInfo = runningTaskInfo.get(0).topActivity;
    return componentInfo.getPackageName().equals(myPackage);
}
于 2019-04-22T17:27:10.440 回答
1

另外,这种情况如何处理?

你可以通过后台任务的重要性来解决这个问题。

如果您认为您的后台任务对于通知用户很重要,那么您可以在后台工作完成后创建一个通知。因此您的用户将获得您的任务的更新。您可以将结果数据设置为 Intent 并在单击通知后启动屏幕 B。

如果通知用户不重要,您可以保存后台任务结果,当用户返回您的应用程序时,您可以将用户发送到屏幕 B。

编辑:

我认为当您的 Activity 在后台并被系统杀死时,从后台服务启动 Activity 并不是很好的 UX。因为那时用户可能正在其他应用程序上执行一些重要任务(游戏、在线流媒体等)。这会给用户带来不好的用户体验。

于 2019-04-22T17:47:58.130 回答