【发布时间】:2015-12-15 16:45:36
【问题描述】:
我有一个服务监听来自服务器的一些事件。 服务具有 START_STICKY 标志,使他在被操作系统杀死时重新启动。 当服务收到事件时,我有两种情况。 首先,如果活动没有被杀死,我需要将结果发送到本地广播接收器并更新 UI。 其次,如果它被操作系统杀死,我想重新创建它并捆绑发送数据。
但我不知道如何识别 android 杀死了我的活动。 在这种情况下不会出现 onDestroy 活动事件。
@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);
}
【问题讨论】:
-
知道它是否可见还不够吗?如果是这样,stackoverflow.com/a/5446680/3209739 还不够吗?
-
没有。这不够。我需要更新我的 UI,即使它在后台(停止和暂停)
-
那么您还应该检查它是否在其不可见的后堆栈中可用。如果它在堆栈中,它们会在那里更新。
-
我已经看到了那个解决方案。但是有人说它应该只用于调试目的。 developer.android.com/reference/android/app/…
-
我不确定它是在哪里被告知的,但是如果活动/片段已经可用,则后堆栈是我们寻找活动/片段并相应地执行操作的地方。您可能会考虑发布另一个问题,询问是否有替代方法来查找活动/片段对象是否可见但不可见。通过 PackageManager 可以知道设备中是否存在类本身。
标签: android service kill activity-lifecycle