版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28779083/article/details/72775766
我的应用场景是:
收到一条“抢单”的推送消息,就打开一个“待抢订单”的activity。当收到多条时,就开启了多个。这时,有的订单已经被别人抢了,就又收到一条推送,将已经被别人抢走的订单的activity关闭。
我的想法是:
在开启的activity的onCreate用HashMap来保存activity。当收到要关闭某个activity的时候,按照保存的key去找对应的activity。如果activity存在且activity没有被销毁,就将其关闭(activity.finish()),再移除HashMap的对应的值(remove(key))。如果activity已经被销毁,就直接移除remove(key) 。
用法:
activity的onCreate()调用:
//我是用订单id做的key
ActivityUtils.getInstance().addActivity(model.getOrder_id(), this);
收到关闭activity的推送时:
ActivityUtils.getInstance().delActivity(model.getOrder_id());
最好在activity的onDestroy()方法中也调用:
ActivityUtils.getInstance().delActivity(model.getOrder_id());
这样activity已销毁就会移除HashMap的对应的值
下面是源码:
import java.util.HashMap;
import java.util.Map;
import android.app.Activity;
/**
* 添加、关闭指定key的activity
*
* @author android.mtj
*
*/
public class ActivityUtils {
private static ActivityUtils activityUtils;
private Map<String, Activity> activityMap = new HashMap<String, Activity>();
public static ActivityUtils getInstance() {
if (activityUtils == null) {
activityUtils = new ActivityUtils();
}
return activityUtils;
}
/**
* 保存指定key值的activity(activity启动时调用)
*
* @param key
* @param activity
*/
public void addActivity(String key, Activity activity) {
if (activityMap.get(key) == null) {
activityMap.put(key, activity);
}
}
/**
* 移除指定key值的activity (activity关闭时调用)
*
* @param key
*/
public void delActivity(String key) {
Activity activity = activityMap.get(key);
if (activity != null) {
if (activity.isDestroyed() || activity.isFinishing()) {
activityMap.remove(key);
return;
}
activity.finish();
activityMap.remove(key);
}
}
}