美文网首页Android开发札记
Android-App前台进程监听ActivityLifecyc

Android-App前台进程监听ActivityLifecyc

作者: _SHYII | 来源:发表于2017-03-10 18:35 被阅读70次

在开发中会遇到判断 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

相关文章

  • Android-App前台进程监听ActivityLifecyc

    在开发中会遇到判断 App是否是前台进程,其实方法挺多,比如RunningTask(5.0之前 )、UsageSt...

  • 工具

    切换指定进程到前台 2.监听应用是否处于后台

  • android 生命周期监听(可以监听子进程)

    需求描述 1、主进程监听子进程2、主进程需要知道当前整个APP(如果有一个子在,那么就是在)是否在前台3、子进程只...

  • 下面哪种进程最重要,最后被销毁?

    下面哪种进程最重要,最后被销毁? A 服务进程 B 后台进程 C 可见进程 D 前台进程 解析: 前台进程(for...

  • Android 五种进程的管理

    安卓有几种进程? 前台进程 可见进程 服务进程 后台进程 空进程 前台进程 用户当前操作所必需的进程。如果一个进程...

  • 进程状态

    一般来说,进程状态有五种形式: 前台进程 可见进程 服务进程 后台进程 空进程 前台进程用户当前操作所必需的进程。...

  • Android进程

    优先级从高到低分为四种:前台进程,可视进程,服务进程,缓存进程。 前台进程:用户当前正在操作的。 1.屏幕顶层运行...

  • Linux的前后台进程 2020-01-26(未经允许,禁止转载

    Linux中,进程可分为前后台进程 1前台进程 前台进程可以理解为绑定了shell的进程举个例子,在kali中打开...

  • Android进程优先级

    按优先级分为: 前台进程 当前用户可操作可交互的进程,或者绑定前台的服务(startForground) 可见进程...

  • 进程和应用生命周期

    进程和应用生命周期 Note : 前台进程 --> 可见进程 --> 服务进程 --> 缓存进程(原来...

网友评论

    本文标题:Android-App前台进程监听ActivityLifecyc

    本文链接:https://www.haomeiwen.com/subject/vplogttx.html