如何检测用户是否离开了我的应用程序?

2024-01-31

我正在开发一个 Android 应用程序,我想检测用户何时通过单击“后退”按钮或“主页”按钮退出我的应用程序。

另外,像这样的事件onInit()在我的场景中很有用,因为我只想拥有MyInıt行动首先开始。

onDestroy()直到其他应用程序需要更多内存时才会调用。


注意:这仅在您的目标 >= API14 时有效


您还可以使用Application.registerActivityLifecycleCallbacks()当任何活动暂停时发布延迟Runnable(当用户离开应用程序时将调用)Handler。当活动创建/开始/恢复时,您可以删除该活动Runnable from Handler。因此,当您在应用程序内部导航时,您总是会取消该操作Runnable,但是如果激活了不是来自您的应用程序的另一个活动 -Runnable将被调用。

当用户离开我的应用程序时,我用它来注销用户,这是回调代码:

public class MyApplication extends Application implements Application.ActivityLifecycleCallbacks {

    private Handler handler;
    private Runnable runLogout = new Runnable() {
        @Override
        public void run() {
            //logoutUser()
        }
    };

    @Override
    public void onCreate() {
        super.onCreate();

        registerActivityLifecycleCallbacks(this);
        handler = new Handler(getMainLooper());
    }

    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
        handler.removeCallbacks(runLogout);
    }

    @Override
    public void onActivityStarted(Activity activity) {
        handler.removeCallbacks(runLogout);
    }

    @Override
    public void onActivityResumed(Activity activity) {
        handler.removeCallbacks(runLogout);
    }

    @Override
    public void onActivityPaused(Activity activity) {
        handler.postDelayed(runLogout, 1000);
    }

    @Override
    public void onActivityStopped(Activity activity) {

    }

    @Override
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

    }

    @Override
    public void onActivityDestroyed(Activity activity) {

    }
}

然而,Runnable不会在活动生命周期的上下文中运行,因此要在活动中使用它,您需要设置和检查一些应用程序范围的标志或广播意图。

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

如何检测用户是否离开了我的应用程序? 的相关文章

随机推荐

  • java.lang.NoSuchMethodError:没有为 HttpClientResponse 执行虚拟方法

    当我在启动后尝试运行该应用程序时 它在 logcat 中显示异常 如下所示 java lang NoSuchMethodError No virtual method execute Lorg apache http client meth
  • 显示和隐藏 Windows 10 屏幕键盘 (osk.exe) 时遇到问题

    我一直在尝试获取屏幕键盘 osk exe 在 Windows 10 上从我的应用程序中出现 和消失 我的应用程序在 Windows 7 中运行良好 ShellExecute on osk exe会在那里显示键盘 但尝试在 Windows 1
  • 确定字符串是否是有效的地理位置

    我有一堆 位置 有些是准确的 哈博罗内 博茨瓦纳 有些是地理编码 40 75 73 997 有些是完全无用的 siliconcape 我需要找到一种方法来运行列表并确定每个字符串和地理编码的城市和国家 地区 并为无效位置返回空值 是否有某种
  • RequireJS:多个 main.js?

    我一直在使用 requireJS 构建一个单页应用程序 到目前为止我很喜欢它 我已经到了在主应用程序之外开发网站其他部分的阶段 但我不太确定如何 或是否 为此使用 requireJS 在我的主应用程序中 一切都是由这个脚本标签触发的
  • python 字典理解如何与内部的 lambda 函数一起工作

    我的目标是使用以下方法聚合 pandas DataFrameGroupBy 对象agg https pandas pydata org pandas docs stable reference api pandas core groupby
  • 组合器可以处理多个映射器的结果吗?

    如果在同一个节点上执行多个映射器 combiner 会合并多个映射器的结果吗 我在文档或书籍中找不到这个问题的答案 我可以找到的组合器示例似乎都产生了影响 即使它只能聚合来自一个映射器的结果 来自雅虎的Hadoop教程 http devel
  • 实体框架 DataContext 问题 - 它是否在我的控制器中得到正确处理?

    我已经收到了一些代码 并且在控制器类中有一个属性保存初始化的数据库上下文 public class MyController Controller protected AssetManagerContext db new AssetMana
  • 传播不可迭代实例的无效尝试

    将不胜感激这里的任何帮助 我有这段代码 每当表单字段收到更改时都会尝试更新我的状态 这在以前版本的 React 中工作得很好 但升级到最新版本后 我收到错误 传播不可迭代实例的尝试无效 我知道我需要使我的国家正常化 我计划这样做 然而 这将
  • ubuntu下gcc 4.5安装问题

    我尝试在 ubuntu 10 04 上安装 gcc 4 5 但失败了 这是一个编译错误 我不知道如何解决 有没有人在ubuntu上成功安装最新的gcc 以下是我的步骤和错误信息 我想知道问题出在哪里 第一步 下载这些文件 gcc core
  • 将 kml 多边形转换为 svg 路径

    我有一个带有地标的 KML 文件 每个地标都有多边形坐标 我想根据我从 json 文件读取的值动态更改多边形的填充颜色 我的理解是谷歌缓存了kml文件 所以你不能轻易地动态改变多边形的填充颜色 所以我试图将我的 kml 多边形转换为 svg
  • 右单撇号与撇号?

    右单引号 U 2019 与 撇号 U 0027 这两个角色有什么区别 我遇到了这个问题 我使用 CAtlString 从资源文件加载字符串 在某些 Windows 安装上 当尝试加载包含 U 2019 的字符串时 LoadString 失败
  • 兼容类型与严格别名规则

    将一种类型转换为另一种类型是 C 中的常见策略 这依赖于 C 结构体的布局具有一定的保证这一事实 GLib等库依靠它来实现类似继承的面向对象 基本上 struct Base int x int y struct Derived struct
  • 在 WordPress 中使用 jQuery UI 对话框

    我知道至少还有另外一篇文章处理这个问题 但答案从未明确给出 我正在 head php 文档中的 WP 子主题中工作 我在头部添加了这个
  • mgm 包中的estimateNetwork 函数存在问题

    我正在尝试使用 mgm 包运行混合图形模型 到目前为止 这是我的代码 我在最后一个命令周围加了星号 这是我似乎无法运行的命令 有人可以建议吗 library haven gt flordiss lt read sav C Users sch
  • 将不应提交的 Gradle 配置(即凭据)放在哪里?

    我正在尝试将 Gradle 构建的工件部署到 Maven 存储库 并且我需要为此指定凭据 目前这工作正常 uploadArchives repositories mavenDeployer repository url http nexus
  • 如何中断 R 中的 RPostgresql 查询

    在 RPostgresql 中中断长时间运行的查询的最佳方法是什么 例如 我想查看表格的前 10 行 并打算输入 dbGetQuery con select from big table limit 10 但有时我会忽略 限制 10 然后我
  • Rails、Ruby 1.9.3p0 和 mysql gem

    我正在运行 CentOS6 并从源代码安装了 Ruby 以及 Rails 和其他一些人员 ruby v ruby 1 9 3p0 2011 10 30 revision 33570 x86 64 linux rails v Rails 3
  • 什么时候应该使用封装? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在完成 Sun Oracle 的踪迹 http docs oracle com javase tutorial java TOC html
  • 哈希映射内存开销

    我正在研究哈希图的内部结构 其中我遇到了以下详细信息 实现是一个 HashMap Entry 对象数组 每个 HashMap Entry 包含 int KeyHash 下一个对象 对象键 对象值 默认容量为 16 个条目 空大小为 128
  • 如何检测用户是否离开了我的应用程序?

    我正在开发一个 Android 应用程序 我想检测用户何时通过单击 后退 按钮或 主页 按钮退出我的应用程序 另外 像这样的事件onInit 在我的场景中很有用 因为我只想拥有MyIn t行动首先开始 onDestroy 直到其他应用程序需