处理 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 那个时候用户可能正在执行一些重要任务(游戏、在线流媒体等)在其他应用程序上。这会给用户带来糟糕的用户体验。
我正在开发一个应用程序,它将在 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 那个时候用户可能正在执行一些重要任务(游戏、在线流媒体等)在其他应用程序上。这会给用户带来糟糕的用户体验。