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();
}
});