处理活动和服务生命周期

时间:2019-04-22 17:15:40

标签: java android android-activity android-lifecycle jobintentservice

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

用户从屏幕A启动操作。启动后台意图服务。 Intent服务完成其工作后,它将向屏幕A发送一个回调,然后向屏幕Sartes屏幕B发送一个使用Intent服务的结果的回调。

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

我的问题是,因为屏幕A不再存在,它将收到回叫吗?是否有可能发现必须通过Android OS清除屏幕A,以便我的服务可以直接启动屏幕B?

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

任何建议将不胜感激。

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

  

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

您可以通过后台任务的重要性来解决此问题。

如果您认为后台任务对于通知用户很重要,则 后台工作完成后,您可以创建Notification。这样您的用户就可以更新您的任务。您可以将结果数据设置为Intent,并在单击通知后启动屏幕B。

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

修改:

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