检查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-12-17 23:18:12

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

灵异事件之:Android Studio 3.4提示:Error running app: Default Activity Not Found

本次事件尚未解决,如果有手法独特的大神,请在评论区开车. 问题症状:之前在AS上能好好运行的项目,楼主一不小心,把AS的版本更新到3.4之后,所有项目都是能通过编译,但是运行处依然提示红叉.Event log显示:Error running 'app': Default Activity not found. 网上大部分解决方法: AndroidManifest.xml里的activity name包名没有完善 原本是默认为android:name=".MainActivity" 网友

如何使用viewpager与fragment写一个app导航activity

今天我们来看一下如何使用viewpager和fragment组合来写一个app导航activity,这里使用到了android开源控件viewpagerindicator,有兴趣的同学可以去它网站上看看它的介绍. 附上效果截图一张: demo中只有一个activity,是用activity_main.xml来布局,其内容如下: <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:and

如何获取android app的Activity

如何获取android app的Activity? 我觉得有2中方法比较好用. 第一种 a.启动待测apk b.开启日志输出:adb logcat>D:/log.txt c.关闭日志输出:ctrl+c d.查看日志 找寻: Displayed com.mm.android.hsy/.ui.LoginActivity: +3s859ms appPackage = com.mm.android.hsy appActivity = .ui.LoginActivity

appium简明教程(9)——如何获取android app的Activity

有时候在appium的Desired Capabilities中需要指定被测app的appActivity,下面的方法可能会对你有所帮助. 方法一 如有你有待测项目的源码,那么直接查看源码就好.如果没有,那么请联系有源码的同学,这是推荐方法. 本文版权归乙醇所有,欢迎转载,但请注明作者与出处,严禁用于任何商业用途 方法二 如果你没有代码,那么可以反编译该app. 这里将用到2个工具,分别是dex2jar和jd-gui.你可以在这里下载目前为止的最新版本以及示例apk. 我们以工具包里的Conta

Android app启动activity并调用onCreate()方法时都默默地干了什么?

Android app启动activity并调用onCreate() 方法时都默默地干了什么? 在AndroidManifest.xml文件中的<intent-filter>元素中有这么两句: <intent-filter>     <action android:name="android.intent.action.MAIN"/>     <category android:name="android.intent.categor

如何找到Android app启动activity和页面元素信息

在实施app自动化的时候,我们需要知道app 的启动activity和页面元素信息,以此启动app和定位页面元素,那么如何在没有源码的情况下找打他们呢?当然是有好的工具啦,有Android sdk自带的工具可以很好的帮助我们解决这个问题. 1.获取启动类 aapt命令(该工具位置:C:\Users\...\AppData\Local\android\Sdk\build-tools\24.0.1),配置环境变量后可以在cmd命令行打开. cd进入apk的下载目录 使用命令:aapt dump ba

通过app的Activity名字启动他人app

使用app名字开打程序(activity),然后用Intent Action去打开某个app. 思路:首相获取手机上安装的app应用列表,然后选中其中一个app,用Intent去打开. 源代码如下: PackageManager packageManager = STBNetServerActivity.this.getPackageManager(); // 获取手机里的应用列表 List<PackageInfo> pInfo = packageManager.getInstalledPac

monkey测试===如何获取android app的Activity

本文转自:http://www.cnblogs.com/nbkhic/p/3806951.html 有时候在appium的Desired Capabilities中需要指定被测app的appActivity,下面的方法可能会对你有所帮助. 方法一 如有你有待测项目的源码,那么直接查看源码就好.如果没有,那么请联系有源码的同学,这是推荐方法. 方法二 如果你没有代码,那么可以反编译该app. 这里将用到2个工具,分别是dex2jar和jd-gui.你可以在这里下载目前为止的最新版本以及示例apk.

Error running app: Default Activity Not Found

最近在调试安装Android Widget程序时,碰到Error running app: Default ActivityNot Found. 因为简单的Widget程序,如果不和应用程序关联,就不需要在Android工程中创建MainActivity,Build Project之后,调试安装时会提示Error:Default Activity Not Found,那是因为AndroidStudio在你创建工程时,默认设置Lunche工程时是需要Activity的. 解决方案: 1.打开配置