onPause() onStop() onResume() 之间的混淆

Confusion between onPause() onStop() onResume()

我正在开发一个 Android 应用程序,我想在其中检查用户是否已将应用程序最小化或只是来自另一个 activity。

详细来说,如果用户启动了另一个应用程序、转到主屏幕或锁定屏幕,我想显示 activity 用户将在其中输入密码以访问该应用程序。但是在哪里或如何准确检查呢?

https://developer.android.com/guide/components/activities/activity-lifecycle.html

我正在尝试 onResume() 但根据文档 onResume() 如果用户导航到另一个 activity 并返回,则可以触发 onResume()

一旦您的 activity 变得可见,它将调用 OnStart() 并且一旦准备好进行交互(例如触摸、点击等事件)。它调用 onResume,在这个阶段你的应用程序是 运行 并且它完全在前台。当您的 activity 启动另一个 activity 或对话框时,它会调用 onPause,这意味着 activity 可见但用户无法与 Activity UI 交互。如果我们启动另一个 Activity 完全隐藏之前的 activity 那么它的 onStop 方法被调用

onPause:当另一个 activity 进入前台时调用。

onStop:当另一个 activity 完全可见时调用。

onResume:当您的 activity 从 onPause 状态导航回时调用。

也许您的应用程序已经处于 onStop 状态,因此它会调用 onRestart

我不是很清楚你想达到什么目的。 如果您想知道发生某些事情时它会调用哪个生命周期方法,那么生命周期图非常清楚。 基本上,最小化应用程序并转到另一个activity是相同的。但是,如果您在自己的应用中指的是来自另一个 activity,则可以通过向您使用的意图添加额外信息来区分您自己的 activity。

基本上是这样的:

Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra(key,value);
startActivity(intent);

而在您的 SecondActivity 中,您始终可以像这样检索该数据:

Bundle bundle = getIntent().getExtras();
if ( bundle != null && bundle.containsKey(key) ) {
    value = bundle.getInt(key); // not nessecarily getInt(), you should use according to your value type
    // use the value to tell if it is from your own app
} else {
    // it is not from your own app
}

您可以将此机制与生命周期方法结合使用。例如,如果您在 onCreate() 方法中使用后面的代码,那么无论何时创建 Activity,if 都会检查创建它的人,这听起来像您想要的。