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() 创建,事件作为额外传递,如您发布的代码所示。