如何区分onPause()由于onNewIntent vs android中的用户操作

San*_*awy 5 android

如果你在android中设置了一个活动,当它处于停止或暂停状态时接收到意图时触发onNewIntent().如果在运行时收到意图,则会执行以下序列:

onPause() - > onNewIntent() - > onResume()

但如果由于用户操作而暂停,则只需使用onPause().

现在,如果您想要在用户隐藏您的应用程序的情况下执行某些操作,但不是在您获得新的背景意图的情况下.做一些事情,例如只有当你的应用程序被隐藏时取消录制,似乎你被搞砸了.

直到将来某个时候你才知道是否因为用户隐藏了你的应用程序或者因为传入的背景意图而得到了onPause.

我错过了什么或者这完全被打破了吗?

如果在运行时获得意图,为什么他们不发送onNewIntent回调.而不是暂停,onNewIntent,恢复序列?

Ash*_*Ash 1

如果有人再次偶然发现这一点 - 将无法检测 onPause() 是否由于新意图而被调用,但可以检测到 onResume() 。只需在 onNewIntent() 调用时添加 BUNDLE_KEY_NEW_INTENT_CALLED ,然后检查 onResume() 中的标志并采取所需的操作。

  @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        intent.putExtra(BUNDLE_KEY_NEW_INTENT_CALLED, true);
        setIntent(intent);
    }

    @Override
    protected void onResume() {
        super.onResume();
        Intent intent = getIntent();
        boolean isResumedDueToNewIntent = (intent != null && intent.getBooleanExtra(BUNDLE_KEY_NEW_INTENT_CALLED, false));
        if (isResumedDueToNewIntent) {
            actOnNewIntent();
        }
    }
Run Code Online (Sandbox Code Playgroud)