保活

作者: 读书人heart | 来源:发表于2023-11-14 11:02 被阅读0次

1、后台音乐保活
(1)、前后台管理

public class ForegroundCallbacks implements Application.ActivityLifecycleCallbacks {
    public static final long CHECK_DELAY = 500;
    public static final String TAG = ForegroundCallbacks.class.getName();
    public interface Listener {
        public void onBecameForeground(Activity activity);
        public void onBecameBackground(Activity activity);
    }
    private static ForegroundCallbacks instance;
    private boolean foreground = false, paused = true;
    private Handler handler = new Handler();
    private List<Listener> listeners = new CopyOnWriteArrayList<Listener>();
    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(){
        if (instance == null) {
            throw new IllegalStateException(
                    "Foreground is not initialised - invoke " +
                            "at least once with parameterised init/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(final Activity activity) {
        paused = false;
        boolean wasBackground = !foreground;
        foreground = true;
        if (check != null)
            handler.removeCallbacks(check);
        if (wasBackground){
            for (Listener l : listeners) {
                try {
                    l.onBecameForeground(activity);
                } catch (Exception exc) { }
            }
        } else {

        }
    }
    @Override
    public void onActivityPaused(final 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(activity);
                        } catch (Exception exc) {
                        }
                    }
                } else {
                }
            }
        }, 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) {}
}

在Application使用

 private MediaPlayer mediaPlayer = null;
 ForegroundCallbacks.init(this);
 ForegroundCallbacks.get().addListener(new ForegroundCallbacks.Listener() {
                @Override
                public void onBecameForeground(Activity activity) {
                    //在前台
                    //todo 保活1
                    if (null!=mediaPlayer) {
                        mediaPlayer.stop();
                        mediaPlayer.release();
                        mediaPlayer=null;
                    }
                }
                @Override
                public void onBecameBackground(Activity activity) {
                    //在后台
                    // todo 保活1 根据音乐资源文件创建MediaPlayer对象 设置循环播放属性 开始播放
                    if (null == mediaPlayer) {
                        mediaPlayer = MediaPlayer.create(activity, R.raw.no_notice);
                        mediaPlayer.setLooping(true);
                    }
                    if (!mediaPlayer.isPlaying()) {
                       mediaPlayer.start();
                    }
                }
            });

通知权限保活
...

相关文章

  • iOS后台保活

    iOS后台保活按时间可分为短时保活和长时间保活 短时保活的方式通过beginBackgroundTaskWithN...

  • iOS app进入后台后 应用保活 后台保活

    iOS app进入后台后 应用保活 后台保活

  • 安卓APP后台保活机制探索

    保活,分为两个部分:网络连接保活,进程保活。 网络保活,业界主要手段有: a. GCM b. 公共的第三方push...

  • 深度剖析APP保活案例

    这是作者在去年处理的一个关于进程保活的案例 一. 引言 1.1 保活概述 什么是保活?保活就是在用户主动杀进程,或...

  • 进程保活与拉活

    进程相关知识梳理 Activity 1像素保活 前台服务保活 账户同步拉活 JobScheduler 拉活 双进程...

  • 第十六周 进程保活

    话题:进程保活 这个问题时常在面试中被问到关键字:Android 进程保活招式大全 参考答案 1.进程保活方案 -...

  • Android保活/拉活(二)代码实现

    之前学习保活/拉活查资料写了一篇:Android保活/拉活(一)教程检索https://www.jianshu.c...

  • 进程保活

    保活手段 当前业界的Android进程保活手段主要分为 黑、白、灰 三种,其大致的实现思路如下: 黑色保活:不同的...

  • 山海堂参360海参原力片的核心技术?

    分别是,共振破膜保活崩解技术、蛋白酶切增效保活技术、抗酸保活靶向吸收技术、维稳阻降冻干保活技术,就是将鲜海参利用超...

  • android黑科技——保活(参考别人总结)

    保活手段 当前业界的Android进程保活手段主要分为黑、白、灰三种,其大致的实现思路如下: 黑色保活: 不同的a...

网友评论

      本文标题:保活

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