【问题标题】:Android: Check if activity is destroyed by a system from serviceAndroid:检查活动是否被系统从服务中销毁
【发布时间】: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


【解决方案1】:

听起来您正在使用LocalBroadcastManager。那挺好的。它的sendBroadcast() 方法返回一个布尔值,指示是否找到了注册的接收器。您可以使用该结果来确定您的接收活动 (MainActivity) 是否存在并已注册接收广播。

当您的服务有事件要发送到 MainActivity 时,首先尝试使用 sendBroadcast() 发送事件。如果它返回true,你就完成了。如果它返回 false,则该活动未注册,必须使用 startActivity() 创建,该事件作为额外传递,如您发布的代码所示。

【讨论】:

  • 天啊!谢谢你。你说得对!即使在 android javadocs 中,sendBroadcast() 的返回值也没有任何意义。没想到这么简单的解决方案!
  • 有一个开放的AOSP Issue 用于解决文档问题。我查看了源代码以了解 sendBroadcast() 的返回值是什么意思。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多