记一个感知生命周期后自动注册,并在点击push通知后通知各个界面的工具类

97 阅读1分钟

PushUtils.java

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;

import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;

import java.lang.ref.WeakReference;
import java.util.ArrayList;

/**
 * 作者: zhangchenzhou
 * 时间: 2020/10/13-14:45
 * 说明: 利用AndroidLifecycle自动监听生命周期,从而实现监听者的注册和反注册
 **/
public class PushUtils {
    //记录所有观察者们的list
    public static ArrayList<PushObserver> observerArrayList = new ArrayList();
    //把注册的观察者添加进List
    public static void addPushObserver(PushObserver pushObserver){
        observerArrayList.add(pushObserver);
    }
    //从list中删除注册进去的观察者
    public static void removeObserver(PushObserver pushObserver){
        observerArrayList.remove(pushObserver);
    }
    //推送通知被点击跳页后通知注册者们去执行其onPushClick
    private static void notifyObserver(){
        for(PushObserver observer:observerArrayList){
            if(observer!=null){
                observer.onPushClick();
            }
        }
    }
    //推送通知的处理代码。
    public static void handlePushMessage(Context context, PushModel pushModel) {
        try {
            if (pushModel == null) {
                return;
            }
            switch (pushModel.getImNoticeType()) {
                case 0:
                    //通用通知
                    TongYongNotification(context,pushModel.getImNoticeContent());
                    break;
            }
            //NotifyHelper.refreshNotifyData();//刷新消息列表中的通知
        } catch (Exception e) {
            Log.e("handlePush", e.toString());
        }
    }

    /**
     * 功能: 通用的通知跳转逻辑
     */
    public static void TongYongNotification(Context context,String jsonData) {
        if (TextUtils.isEmpty(jsonData)) {
            return;
        }
        if(msgObj != null){
            notifyObserver();
        }
        
    }
    
    //生命周期观察者,
    public abstract static class PushObserver implements LifecycleObserver {
        //检测到自己的OnCreate方法被调用后添加自身到观察者列表
        @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
        void onCreate(){
            addPushObserver(this);
        }
        //检测到自己的OnDestory方法被移除后,将自己从观察者列表移除
        @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
        void onDestory(){
            removeObserver(this);
        }
        //推送通知栏被点击后,各个注册者的回调操作。
        public abstract void onPushClick();
    }
}

使用方法:

//添加生命周期监听,让其自动控制推送点击监听的添加与移除
getLifecycle().addObserver(new PushUtils.PushObserver() {
    @Override
    public void onPushClick() {
        pauseTimeAndAudio();
    }
});