Android-App前台进程监听ActivityLifecycleCallbacks

在开发中会遇到判断 App是否是前台进程,其实方法挺多,比如RunningTask(5.0之前 )、UsageStatsManager(5.0之后适用)、RunningProcess(不能有效识别,比如三星手机)、ActivityLifecycleCallbacks,其中最有效的方法是通过ActivityLifecycleCallbacks进行监听 ,本文只介绍这种。
先了解下ActivityLifecycleCallbacks,当Activity处于各生命周期中时会走如下各方法回调

    public interface ActivityLifecycleCallbacks {
        void onActivityCreated(Activity activity, Bundle savedInstanceState);
        void onActivityStarted(Activity activity);
        void onActivityResumed(Activity activity);
        void onActivityPaused(Activity activity);
        void onActivityStopped(Activity activity);
        void onActivitySaveInstanceState(Activity activity, Bundle outState);
        void onActivityDestroyed(Activity activity);
    }

当然首先得在Application注册监听(无需做反注册操作)

      registerActivityLifecycleCallbacks(ActivityLifecycleCallbacks);

因为比较简单所以不做过多说明了,直接上使用方法
首先创建Listener实现该接口

public class AppStatusTracker implements Application.ActivityLifecycleCallbacks {
    private static AppStatusTracker tracker;
    private Application application;
    private boolean isForground;
    private int activeCount;
    private long timestamp;


    private AppStatusTracker(Application application) {
        this.application = application;
        this.application.registerActivityLifecycleCallbacks(this);
    }

    public static void init(Application application) {
        tracker = new AppStatusTracker(application);
    }

    public static AppStatusTracker getInstance() {

        if (null == tracker) {
            tracker = new AppStatusTracker(new AppContext());
        }
        return tracker;
    }

    public boolean isForground() {
        return isForground;
    }


    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

    }

    @Override
    public void onActivityStarted(Activity activity) {

        if (activeCount == 0){
            timestamp = System.currentTimeMillis();
        }
        activeCount++;
    }

    @Override
    public void onActivityResumed(Activity activity) {
        isForground = true;
    }

    @Override
    public void onActivityPaused(Activity activity) {

    }

    @Override
    public void onActivityStopped(Activity activity) {

        activeCount--;
        if (activeCount == 0) {
            isForground = false;
            timestamp = System.currentTimeMillis() - timestamp;
        }
    }

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

    }

    @Override
    public void onActivityDestroyed(Activity activity) {

    }
}

然后只需在 Application 的 onCreate 中进行注册

        AppStatusTracker.init(this);

OK了,知识点不多,要了解更多可围绕 Android5.0 前台进程去搜索


参考
初识 ActivityLifecycleCallbacks

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,094评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,073评论 19 139
  • 如何进行进程保活,首先我们应该先分析一下进程被杀死的原因开始 Android进程被杀死的场景分析: 从 Andro...
    编程小猪阅读 8,997评论 1 14
  • 走过一个城市繁华的街道,就能感受到这个城市的苏醒,这个城市的脉动,这个城市承载了多少人的希望和梦想。努力生活在这个城市
    桂梢月阅读 1,283评论 0 0
  • 每个人在不同主题、历程所面对的阴影与问题都不相同。抽到这张卡,说明自己目前面临着一些困境与问题。但问题从来不是问...
    幸福年阅读 1,625评论 0 0

友情链接更多精彩内容