Android:检查activity是否被系统从服务中销毁
Android: Check if activity is destroyed by a system from service
我有一个服务监听来自服务器的一些事件。
一个服务有 START_STICKY 标志,当它被 OS 杀死时,它会重新启动。
当服务收到一个事件时,我有两种情况。
首先,如果 activity 没有被杀死,我需要将结果发送到本地广播接收器并更新 UI。
其次,如果它被 OS 杀死,我想重新创建它并捆绑发送数据。
但我不知道如何识别 android 杀了我的 activity。
onDestroy activity 事件不会在这种情况下出现。
@Override
public void onComplete(CurrentOrdersResponse response) {
if (response == null) {
return;
}
boolean isActivityDestroyed = mPreferences.getBoolean(MainActivity.IS_MAIN_ACTIVITY_DESTROYED_PREF_KEY, false);
if (!isActivityDestroyed)
sendResult(response.getResJSONStr(), CURRENT_ORDERS_ACTION);
else {
Intent intent = new Intent(this, MainActivity.class);
intent.setAction(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtras(extras);
startActivity(intent);
}
int resCode = response.getResCode();
Log.i(LOG_TAG, "Service resCode" + " " + resCode);
}
听起来您正在使用 LocalBroadcastManager
。那挺好的。它的 sendBroadcast() 方法 returns 一个布尔值,指示是否找到了已注册的接收器。您可以使用该结果来确定您的接收 activity (MainActivity) 是否存在并已注册接收广播。
当您的服务有事件要发送到 MainActivity 时,首先尝试使用 sendBroadcast()
发送事件。如果它 returns 是真的,你就完成了。如果它 returns 为假,则 activity 未注册并且必须使用 startActivity()
创建,事件作为额外传递,如您发布的代码所示。
我有一个服务监听来自服务器的一些事件。 一个服务有 START_STICKY 标志,当它被 OS 杀死时,它会重新启动。 当服务收到一个事件时,我有两种情况。 首先,如果 activity 没有被杀死,我需要将结果发送到本地广播接收器并更新 UI。 其次,如果它被 OS 杀死,我想重新创建它并捆绑发送数据。
但我不知道如何识别 android 杀了我的 activity。 onDestroy activity 事件不会在这种情况下出现。
@Override
public void onComplete(CurrentOrdersResponse response) {
if (response == null) {
return;
}
boolean isActivityDestroyed = mPreferences.getBoolean(MainActivity.IS_MAIN_ACTIVITY_DESTROYED_PREF_KEY, false);
if (!isActivityDestroyed)
sendResult(response.getResJSONStr(), CURRENT_ORDERS_ACTION);
else {
Intent intent = new Intent(this, MainActivity.class);
intent.setAction(Intent.ACTION_VIEW);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtras(extras);
startActivity(intent);
}
int resCode = response.getResCode();
Log.i(LOG_TAG, "Service resCode" + " " + resCode);
}
听起来您正在使用 LocalBroadcastManager
。那挺好的。它的 sendBroadcast() 方法 returns 一个布尔值,指示是否找到了已注册的接收器。您可以使用该结果来确定您的接收 activity (MainActivity) 是否存在并已注册接收广播。
当您的服务有事件要发送到 MainActivity 时,首先尝试使用 sendBroadcast()
发送事件。如果它 returns 是真的,你就完成了。如果它 returns 为假,则 activity 未注册并且必须使用 startActivity()
创建,事件作为额外传递,如您发布的代码所示。