确定应用程序是否在前台 - 这是否令人皱眉?

2023-12-13

检测应用程序是否位于前台有很多原因。 例如 - 作为 GCM/C2DM 推送通知的触发器 - 许多应用程序有充分的理由在应用程序处于前台和后台时实现不同的行为。 其他原因可能是 - 关闭消耗宝贵资源的服务,例如在后台任务中查询服务器。

需要明确的是:后台应用程序的定义(据我所知)是:
没有任何活动被调用的应用程序onStart()方法,并且还没有调用onStop()方法。 这是因为活动仅在此时对其生命周期中的用户可见。

从另一方面 -

  • 似乎 Google 不希望应用程序对主页按钮做出反应(它不是 API 的一部分)

  • 做出反应onBackPressed()将“根/主要”活动作为离开的指标Activity当然不是好主意(因为很多用户使用主页按钮,而不是后退按钮)

  • API 中没有方法允许确定应用程序是否为前台(根据我的定义..)

如果我没有错过 API 中的某些内容,情况确实如此 -为什么没有为什么可以轻松确定应用程序是否为前台???!!!!!!

我知道我能做什么此线程中描述了确定应用程序是否为前台的方法 -如何检测 Android 应用程序何时进入后台并返回前台

但正如@Emil所说 - 它需要特殊许可,或者需要一些棘手的逻辑,这很快就会成为维护问题,而且闻起来像是糟糕的方法(尽管这就是我现在正在做的事情,因为我没有更好的主意。 ..)

我的问题基本上是:

  • 难道没有这样的 API 方法是有充分理由的吗?

  • 考虑应用程序是否是前台是一个坏方法吗?

  • 还有其他方法可以知道应用程序是否在前台吗?


考虑应用程序是否是前台是一个坏方法吗?

考虑前景与背景是合理的。

还有其他方法可以知道应用程序是否在前台吗?

您可以粗略地将这种情况分为两组:

  1. 您希望在前台/后台状态发生变化时立即采取行动的情况

  2. 发生其他事件的情况(AlarmManager警报、传入系统广播等),此时您希望根据您是否在前台采取不同的操作

在前一种情况下,onUserLeaveHint()是您最可靠的简单选择。我不能保证它涵盖所有情况,但它应该处理家庭场景,例如。还欢迎您在静态数据成员中维护已启动活动的引用计数,并尝试使用它。

在后一种情况下,有序广播可能有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

确定应用程序是否在前台 - 这是否令人皱眉? 的相关文章

  • 数据未正确加载到 Firebase 应用程序中

    我在 android studio 上使用 firebase 创建了一个应用程序 使用移动 otp 进行身份验证后会出现一个搜索视图 当用户在搜索视图上搜索时 它将过滤结果并转到回收器视图等 第一次启动活动 即身份验证后的家庭活动 应用程序
  • 应用示例,使用Android备份服务

    您知道任何 Android 应用程序 开源 如果可能的话 它使用安卓备份服务 http developer android com guide topics data backup html 我需要有关如何在实际应用程序中使用备份服务的示例
  • 设备管理员禁用

    如果不是 则无法卸载设备管理应用程序 禁用 用户可以从设置中禁用 设备管理员 当公司向员工提供 Android 设备时 公司希望 可以控制设备及其状态和策略 但用户可以 轻松摆脱这种控制 有谁知道这怎么可能 防止用户禁用设备管理员 谢谢 无
  • 使用自定义 cordova 插件未找到类异常

    我正在开发一个打印应用程序 它使用自定义 API 通过 USB 访问打印机 因此我需要一个自定义 Cordova 插件 我开始开发它 这是一个非常好的挑战 但目前也非常令人沮丧 因为我不明白为什么我的插件不能正确使用 事情是 1 插件安装正
  • 两个外部第三方混淆库中存在重复的类名

    我有一个项目 其中包含两个外部第三方库 当尝试构建项目时 这两个库的类文件名都被混淆了 并且 gradle barfs 了 Duplicate class a a a a a b found in modules 我无法排除任何类 因为它们
  • Android蓝牙权限问题

    首先 抱歉我的英语不好 我是西班牙人 并且是 Android 开发的新手 我正在开发一个简单的蓝牙文件发送器 我基于BluetoothChat android示例一步一步 现在我向用户发出蓝牙激活请求 并选择是或否选项应用程序崩溃 我拥有清
  • Android - 检测电容式触摸屏上的触摸压力?

    我听说过 MotionEvent e float press e getPressure 但这只会在没有触摸时返回 0 当我的手指触摸屏幕时返回 1 是否可以找到手指在触摸电容屏上施加的压力值 或者我的预感是否正确 即这只适用于电阻屏幕 M
  • Android 上下文不在活动中?还有其他无活动编程吗?

    我会非常努力地将其变成一个综合问题 我正在编写一个方法来获取一个包含 Android 设备城市名称的字符串 该名称由LocationManager and getLastKnownLocation 等等 然后我意识到我需要在另一个活动中再次
  • 如何在状态栏显示通知?

    所以我在我的活动中创建了此通知 Notification n new Notification Builder getApplicationContext setContentTitle New mail from sender setCo
  • 在 Facebook 上分享时如何更改 Play 商店应用程序的预览?

    我已在 Google Play 开发者控制台中更改了游戏的图标和屏幕截图 并且它在 Play 商店中正确显示 但当我尝试在 Facebook 上分享 Play 商店链接时 预览会带有旧图标和屏幕截图 如何将此预览更新到应用程序的最新版本 你
  • Android 7 GraphicBuffer 替代方案,用于直接访问 OpenGL 纹理内存

    从移动设备具有 CPU 和 GPU 共享内存这一事实中获利的唯一方法是使用GrphicBuffer 但由于 Android 7 限制对私有本机库 包括 gralloc 的访问 因此无法再使用它 问题 是否有其他方法可以直接内存访问纹理的像素
  • 使用 Gradle 在多个 Android 应用程序之间共享 Android 库

    我有 Android 应用程序 A 和 B 我想将每个应用程序中的重复代码提取到共享库 L 中 如何使用 Gradle 执行此操作 我之前见过这个问题的一些排列 但答案很少 最接近 最好的已问问题是这个 多个 Android 应用程序依赖于
  • 如何在连接到远程系统的设备上部署和执行应用程序?

    我需要部署测试应用程序并在连接到同一网络中另一台计算机的设备上发出命令 我通读了http developer android com tools help adb html directingcommands http developer
  • 如何确定 Android UI 元素的 XPATH。硒 + Appium

    我目前正在使用 Appium 和 Selenium 自动化 Android 应用程序 并且在通过 ID 定位元素时遇到了一些问题 我想使用 XPATH 但不知道如何获取 android UI 元素的 XPATH 有谁知道如何确定元素的 XP
  • Eclipse java 断点 - 目的是什么?

    我正在学习 Android 教程 刚刚进入调试部分 我想知道断点的用途是什么 我还不能告诉 它实际上停止了应用程序 以便我可以确定它运行到该点 或者我可以设置多个断点并将它们用作标记来从断点到断点检查 停止和运行 我的代码 断点是执行停止的
  • onLocationChanged 回调是在哪个线程上进行的?主 UI 线程?

    当在我的应用程序中进行此回调时 我有相当多的工作要做 通过 ORM 库和一些基于距离的计算读取和写入 SQL 数据库 当然 我担心不会阻塞主 UI 线程 因此我一直在尝试 未成功 找出这是否是进行回调的线程 如果是 我打算在回调发生时触发的
  • 如何创建带有两个日期选择器的自定义对话框?

    我刚刚开始学习 Android 作为一种爱好 我想创建一个带有两个日期选择器的对话框 final Dialog dialog new Dialog this dialog setContentView R layout data picke
  • 如何禁用 Google 请求许可定期检查手机上已安装的应用程序?

    我正在开发一个 Android 应用程序 因此我不断地在我的测试设备上构建和安装该应用程序 几天以来 我在每次构建 安装时都会提出一个问题 Google 可能会定期检查已安装的应用程序是否存在潜在危害 行为 在 Google 设置 gt 验
  • 在 Android 版 ORMLite 中加入类会引发 SQL 异常:找不到外部类,反之亦然

    我正在尝试使用 QueryBuilder 为两个不同的类创建一个联接查询 一个Product类和一个Coupon类 引用 Product 属性 storeId public class Coupon DatabaseField column
  • 解析 onPushOpen 从未被调用

    我已经使用解析实现了推送 将参数添加到清单文件中

随机推荐