我正在开发一个应用程序,它将在JobIntentService中执行某些后台功能。
用户从屏幕A启动操作。启动后台意图服务。 Intent服务完成其工作后,它将向屏幕A发送一个回调,然后向屏幕Sartes屏幕B发送一个使用Intent服务的结果的回调。
我的问题是,假设用户启动操作,然后最小化应用程序,然后Android OS由于内存不足而清除了屏幕A,然后服务发回了回调。
我的问题是,因为屏幕A不再存在,它将收到回叫吗?是否有可能发现必须通过Android OS清除屏幕A,以便我的服务可以直接启动屏幕B?
此外,如何处理这种情况?
任何建议将不胜感激。
答案 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。因为这段时间,用户可能正在其他应用上执行一些重要的任务(游戏,在线流媒体等)。这会给用户带来不良的用户体验。