点击主页按钮后立即调用Android onStop

Posted

技术标签:

【中文标题】点击主页按钮后立即调用Android onStop【英文标题】:Android onStop gets called right after tap home button 【发布时间】:2022-01-20 20:32:53 【问题描述】:

我有一个关于 android 基本功能的快速问题。很明显,当屏幕部分可见时会调用 onPause。进一步的 onStop 据说仅在屏幕不再处于前景或背景时才被调用。

然而,奇怪的是,当我按下手机上的方形主页按钮时,每次在我的活动中都会调用 onStop。即使活动屏幕部分可见,我在后台显示 0.5 - 1 秒后仍会看到一条日志。这会导致在从简单暂停返回时调用 onRestart。因为我试图在这里展示广告,所以这有点问题。我在三星 Galaxy A51 和 Pixel 3 XL API 30 模拟器上进行了测试,结果相同。

目前我想知道为什么在此处调用此方法并想修正我的理解。如果是这样,我很可能会遗漏一些明显的东西并道歉(内存不足?)。以下是系统日志和活动生命周期图的屏幕截图。我在任何点击之前显示,在点击 1 次后显示日志窗口,然后在返回并点击第二次后显示日志窗口。

【问题讨论】:

【参考方案1】:

这个暂停按钮是什么?如果你的意思是电源键或者home键,那么永远不应该有硬件键直接连接Activity的生命周期onPause

当您按下电源按钮或主页按钮时,它会进入锁定屏幕或Recents screen,在这两种情况下,您的应用肯定会停止(onPause 然后onStop)而不是只是暂停(仅onPause )。

似乎从onPause 直接转到onResume 可能是相当罕见的情况。

onPause()

在 Android 7.0(API 级别 24)或更高版本中,多个应用程序以多窗口模式运行。由于任何时候只有一个应用程序(窗口)具有焦点,因此系统会暂停所有其他应用程序。 一个新的半透明活动(例如对话框)打开。只要 Activity 仍然部分可见但不在焦点上,它就会保持暂停状态。

关于后一种情况,你可以在 *** 上找到answer。

因此,如果您的应用程序没有被编码为直接导致 onPauseonResume 生命周期,那么您的应用程序应该在 onPause 之后立即进入 onStop 作为正常行为。

【讨论】:

我在这里指的是主页按钮。经过更多搜索后,我在 StackExchange 上找到了另一个答案,这也很有意义,并增加了低系统资源方面。因此,总而言之,我需要将 onPause -> onResume 显式编码到应用程序中,否则行为将取决于具体情况。 android.stackexchange.com/questions/15701/….

以上是关于点击主页按钮后立即调用Android onStop的主要内容,如果未能解决你的问题,请参考以下文章

在android的主页按钮中需要帮助

回家后重新进入应用程序时如何运行代码(Android)

点击按钮后立即禁用与不同 ui 元素的用户交互

在 onStop() 之后,带有线程的 Android 活动被破坏

按下按钮后和触发 AJAX 调用之前立即显示加载屏幕

主页启动器强制停止后未收到Android AppWidget的按钮单击事件