处理 Activity 和服务生命周期

Handling the Activity and Service Lifecycle

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

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

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

我的问题是,既然Screen A不存在了,它会收到回调吗?是否可以弄清楚屏幕A必须被AndroidOS清除,这样我的服务才能直接启动屏幕B?

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

如有任何建议,将不胜感激。

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

使用以下方法和您的包名称。如果您的任何活动在前台,它将 return 为真。

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);
}

Also, how can such a scenario be handled?

可以通过后台任务的重要性来解决

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

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

编辑:

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