检查app的activity是否在当前

APP开发中经常会遇到这种需求,需要检查当前的APP是不是可见的,比如,如果是可见的就维持一个socket长连接,如果切到后台不可见了,就断开这个连接。Android本来并不允许APP去监听home键事件,所以我们没发像iOS那样通过监听home键事件来做对应的处理。不过还好Android的Activity的生命周期给我们提供了一种解决这个问题的方法,我们只需要在每个Activity的onStart和onStop中去维持一个计数,如果这个数值大于0,就表示我们的APP还有Activity是在前台运行的,等于0,就表示APP已经被切换到后台。

说到这里你可能要想,是不是直接修改我的APP的BaseActivity,在基类里做计数的事情就好了。当然,这是最直接的一种方法。但是,这种方法需要你去修改自己的基类代码,侵入性太强,我不是很喜欢这种方法。更好的方式是使用sdk提供的Application.ActivityLifecycleCallbacks接口。下面的代码展示了如何实现这个接口:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

public class MyActivityLifecycleCallbacks implements Application.ActivityLifecycleCallbacks { 

    private int foregroundActivities;

    private boolean hasSeenFirstActivity;

    private boolean isChangingConfiguration;

    @Override 

public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

    }

  

    @Override

 public void onActivityStarted(Activity activity) {

        mForegroundActivities++;

        if (hasSeenFirstActivity && foregroundActivities == 1 && !isChangingConfiguration) {

            applicationDidEnterForeground(activity);

        }

        hasSeenFirstActivity = true;

        isChangingConfiguration = false;

    }

    @Override 

public void onActivityResumed(Activity activity) {

    }

  

    @Override

 public void onActivityPaused(Activity activity) {

    }

  

    @Override 

public void onActivityStopped(Activity activity) {

        foregroundActivities--;

        if (foregroundActivities == 0) {

            applicationDidEnterBackground(activity);

        }

        isChangingConfiguration = activity.isChangingConfigurations();

    }

  

    @Override

 public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

    }

  

    @Override

 public void onActivityDestroyed(Activity activity) {

    }

 }

实现了自己的类之后,就可以调用Application的registerActivityLifecycleCallback方法,将我们的类MyActivityLifecycleCallbacks注册进去,这样就可以实现对Activity生命周期的监听了。

时间: 2024-08-01 19:12:20

检查app的activity是否在当前的相关文章

android layout中能否嵌入跨App的activity

问题描述 android layout中能否嵌入跨App的activity android layout中能否嵌入跨APP的activity,activityGroup已经试验过不行,会报 java.lang.SecurityException: Requesting code from com.example.liteng2 (with uid 10066) to be run in process com.example.liteng (with uid 10065) 还有什么其他可以实现

Android组件系列----Activity组件详解

[正文] 注:四大组件指的是应用组件:Activity.Service.BroadcastReceiver.ContentProvider:之前的控件指的是UI组件. 博文目录: 一.Activity简介 二.Activity的状态和生命周期 三.Activity的基本用法 四.向下一个Activity传递数据 五.返回数据给上一个Activity 六.Activity运行时屏幕方向与显示方式 七.Activity的现场保存 八.Activity通过SharedPreferences保存数据 一

Android应用安全开发之浅谈网页打开APP

一.网页打开APP简介 Android有一个特性,可以通过点击网页内的某个链接打开APP,或者在其他APP中通过点击某个链接打开另外一个APP(AppLink),一些用户量比较大的APP,已经通过发布其AppLink SDK,开发者需要申请相应的资格,配置相关内容才能使用.这些都是通过用户自定义的URI scheme实现的,不过背后还是Android的Intent机制.Google的官方文档<Android Intents with Chrome>一文,介绍了在Android Chrome浏览

Android安全开发之浅谈网页打开APP

Android安全开发之浅谈网页打开APP 作者:伊樵,呆狐,舟海@阿里聚安全 一.网页打开APP简介 Android有一个特性,可以通过点击网页内的某个链接打开APP,或者在其他APP中通过点击某个链接打开另外一个APP(AppLink),一些用户量比较大的APP,已经通过发布其AppLink SDK,开发者需要申请相应的资格,配置相关内容才能使用.这些都是通过用户自定义的URI scheme实现的,不过背后还是Android的Intent机制.Google的官方文档<Android Inte

[Android]从Launcher开始启动App流程源码分析

以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5017056.html 从Launcher开始启动App流程源码分析 com.android.launcher.Launcher就是我们的Launcher页面了,可以看到Launcher其实也是一个Activity: public final class Launcher extends Activity implements View.OnClickListe

2017最新App Store 审核指南中文版

简介 App 正在改变世界,丰富人们的生活,并为像您一样的开发者提供前所未有的创新机会.因此,App Store 已成长为一个激动人心且充满活力的生态系统,正为数百万的开发者和超过十亿的用户提供服务.不管是开发新手,还是由经验丰富的程序员所组成的大型团队,我们都非常欢迎您为 App Store 创建 app,并希望能够帮助您了解我们的准则,以确保您的 app 能够快速通过审核流程. App Store 的指导原则非常简单:我们希望为用户获取 app 时提供更安全可靠的体验,并为所有开发者提供借助

Android如何实现APP自动更新_Android

先来看看要实现的效果图: 对于安卓用户来说,手机应用市场说满天飞可是一点都不夸张,比如小米,魅族,百度,360,机锋,应用宝等等,当我们想上线一款新版本APP时,先不说渠道打包的麻烦,单纯指上传APP到各大应用市场的工作量就已经很大了,好不容易我们把APP都上传完了,突然发现一个会导致应用闪退的小Bug,这时那个崩溃啊,明明不是很大的改动,难道我们还要再去重新去把各大应用市场的版本再上传更新一次?相信我,运营人员肯定会弄死你的!! 有问题,自然就会有解决问题的方案,因此我们就会想到如果在APP里

App开发架构指南(谷歌官方文档译文)

这篇文章面向的是已经掌握app开发基本知识,想知道如何开发健壮app的读者. 注:本指南假设读者对 Android Framework 已经很熟悉.如果你还是app开发的新手,请查看 Getting Started 系列教程,该教程涵盖了本指南的预备知识. app开发者面临的常见问题 跟传统的桌面应用开发不同,Android app的架构要复杂得多.一个典型的Android app是由多个app组件构成的,包括activity,Fragment,service,content provider以

《移动App测试实战》——2.2 App UI层面的自动化

2.2 App UI层面的自动化 除了上面介绍的基于接口的自动化,App UI层面的自动化也是一个重要的自动化技术.可以帮助快速地进行App功能的回归.考虑到功能的变动和维护的代价,实际中投入产出比较高的方式是针对相对稳定的功能进行快速的回归.也可以和后面讨论的持续集成结合,做新构建的验证.除了功能的自动化验证之外,UI自动化技术还有一些其他的价值,比如第4章专项测试中介绍了使用UI自动化技术和云测试平台来构造一套高效的兼容性测试方案,以及基于模糊测试思路和UI自动化建立的App稳定性测试平台.