【问题标题】:Confusion between onPause() onStop() onResume()onPause() onStop() onResume() 之间的混淆
【发布时间】:2017-01-21 01:24:35
【问题描述】:

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

具体来说,如果用户启动了另一个应用程序,进入主屏幕或锁定屏幕,我想显示用户将输入密码以访问应用程序的活动。但是在哪里或如何准确地检查呢?

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

我正在尝试onResume(),但根据文档,如果用户导航到另一个活动并返回,onResume() 可以被解雇。

【问题讨论】:

标签: java android activity-lifecycle


【解决方案1】:

我不太清楚您要达到的目标。 如果您想知道发生某事时会触发哪个生命周期方法,生命周期图非常清晰。 基本上,最小化应用程序并转到另一个活动是相同的。但是,如果您指的是来自您自己应用中的另一个活动,您可以通过向您使用的意图添加额外信息来区分您自己的活动。

基本上是这样的:

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 都会检查谁创建了它,这听起来像是您想要的。

【讨论】:

  • 我想为我的应用创建一个 Pin Lock ...用户启动应用程序和主页活动现在打开用户单击设置以打开设置活动。现在,如果用户按返回按钮返回,设置活动将完成,主页活动将恢复。在这个阶段我不想锁定应用程序,因为用户还没有离开应用程序,他只是打开和关闭活动。
  • 只有当用户最小化应用程序并重新启动时,应用程序才应锁定
  • 我一开始也是这么想的。因此,当您在自己的活动之间导航时,请使用我提到的方法来创建意图,并在 onResume() 方法中,使用我给您的第二个代码块来判断它是否来自您自己的活动。如果不是,它必须来自其他活动,或者来自最小化的应用程序或重新打开的锁定屏幕。在这种情况下,您需要再次将用户导航到 PIN 页面。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    onStop:当其他活动完全可见时调用。

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

    也许您的应用已经处于onStop 状态,所以它会调用onRestart

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      • 2012-05-08
      相关资源
      最近更新 更多