原文链接: https://blog.csdn.net/zheng_jiao/article/details/94357414

项目开发中需要在App按home键后再返回前台就要刷新相应界面接口

实现起来非常简单,自定义Application,在onCreate中添加监听即可

   private fun initAppStatusListener() {         ForegroundCallbacks.init(this).addListener(object : ForegroundCallbacks.Listener {            override fun onBecameForeground() {                Toast.makeText(context, "++++App进入前台++++", Toast.LENGTH_SHORT).show()            }             override fun onBecameBackground() {                Toast.makeText(context, "----App退至后台----", Toast.LENGTH_SHORT).show()            }        })     }

onCreate有时候会执行多次,比如集成部分三方库以后,app启动时自身和三方库都会调用

    override fun onCreate() {        super.onCreate()                val curProcess = getProcessName(this, android.os.Process.myPid())        if (packageName != curProcess) return                mApplication = this        initAppStatusListener()    }     // 进程名    private String getProcessName(Context cxt, int pid) {        ActivityManager am = (ActivityManager) cxt.getSystemService(Context.ACTIVITY_SERVICE);        List runningApps = am.getRunningAppProcesses();        if (runningApps == null) {            return null;        }        for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {            if (procInfo.pid == pid) {                return procInfo.processName;            }        }        return null;    }

ForegroundCallbacks代码

/** * Created by roy on 2018/11/15 0015. * 前台后台切换监听 */public class ForegroundCallbacks implements Application.ActivityLifecycleCallbacks {     private static final long CHECK_DELAY = 600;    private static ForegroundCallbacks instance;    private boolean foreground = false, paused = true;    private Handler handler = new Handler();    private List listeners = new CopyOnWriteArrayList<>();    private Runnable check;     public static ForegroundCallbacks init(Application application) {        if (instance == null) {            instance = new ForegroundCallbacks();            application.registerActivityLifecycleCallbacks(instance);        }        return instance;    }     public static ForegroundCallbacks get(Application application) {        if (instance == null) {            init(application);        }        return instance;    }     public static ForegroundCallbacks get(Context ctx) {        if (instance == null) {            Context appCtx = ctx.getApplicationContext();            if (appCtx instanceof Application) {                init((Application) appCtx);            }            throw new IllegalStateException("Foreground is not initialised and " + "cannot obtain the Application object");        }        return instance;    }     public static ForegroundCallbacks get() {        return instance;    }     public boolean isForeground() {        return foreground;    }     public boolean isBackground() {        return !foreground;    }     public void addListener(Listener listener) {        listeners.add(listener);    }     public void removeListener(Listener listener) {        listeners.remove(listener);    }     @Override    public void onActivityResumed(Activity activity) {        paused = false;        boolean wasBackground = !foreground;        foreground = true;        if (check != null)            handler.removeCallbacks(check);        if (wasBackground) {            for (Listener l : listeners) {                try {                    l.onBecameForeground();                } catch (Exception exc) {                    Log.i("ForegroundCallbacks",exc.getMessage());                }            }        }     }     @Override    public void onActivityPaused(Activity activity) {        paused = true;        if (check != null) handler.removeCallbacks(check);        handler.postDelayed(check = new Runnable() {            @Override            public void run() {                if (foreground && paused) {                    foreground = false;                    for (Listener l : listeners) {                        try {                            l.onBecameBackground();                        } catch (Exception exc) {                            Log.i("ForegroundCallbacks",exc.getMessage());                        }                    }                }             }        }, CHECK_DELAY);    }     @Override    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {    }     @Override    public void onActivityStarted(Activity activity) {    }     @Override    public void onActivityStopped(Activity activity) {    }     @Override    public void onActivitySaveInstanceState(Activity activity, Bundle outState) {    }     @Override    public void onActivityDestroyed(Activity activity) {    }     public interface Listener {        public void onBecameForeground();         public void onBecameBackground();    }    }

非常感谢:火炎焱燚-

更多相关文章

  1. 如何在后台运行Linux命令?
  2. android 8.1 Not allowed to start service Intent 无法后台开启
  3. 判断当前应用程序处于前台还是后台 ANDROID
  4. Android“再按一次退出程序”实现
  5. Android(安卓)进入后台触发的事件,一般用于APP屏幕解锁
  6. Activity 的Managing Tasks属性
  7. Android(安卓)后台线程弹对话框导致程序崩溃(is not valid; is y
  8. Android横竖屏切换Activity生命周期变化
  9. Android聊天软件开发(基于网易云IM即时通讯)——环境搭建(一)

随机推荐

  1. Google Android操作系统四大特点
  2. Android 接受短信和发送短信
  3. android中textview字数过长解决方法
  4. OpenCV4Android(安卓)环境配置(最新详细教
  5. android基础知识12:android自动化测试04—
  6. Ubuntu中useradd和adduser的区别
  7. 15、Android之Adapter用法总结
  8. Android知识体系总结之Android部分之通知
  9. Android(安卓)图片库Glide - Glide3.x 官
  10. Android安装器学习笔记(一)