android关闭指定的activity

来源:互联网 发布:淘宝网店好经营吗 编辑:程序博客网 时间:2024/06/08 11:21

我的应用场景是:

收到一条“抢单”的推送消息,就打开一个“待抢订单”的activity。当收到多条时,就开启了多个。这时,有的订单已经被别人抢了,就又收到一条推送,将已经被别人抢走的订单的activity关闭。

我的想法是:

在开启的activity的onCreate用HashMap来保存activity。当收到要关闭某个activity的时候,按照保存的key去找对应的activity。如果activity存在且activity没有被销毁,就将其关闭(activity.finish()),再移除HashMap的对应的值(remove(key))。如果activity已经被销毁,就直接移除remove(key) 。

用法:

activity的onCreate()调用:

//我是用订单id做的keyActivityUtils.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);        }    }}