• Android中 实现队列方式处理优先级信息


    需求:当界面在处理消息A时,突然接收到消息B,需要立马显示B的信息,然后再继续显示消息A,或者接收到消息C,再显示完消息A后再显示消息C;

    原理很简单 在一个轮询中,查询消息列表中的元素,先处理优先级最高的那一个,之后再处理优先级次高的那一个;

    先做一个对象类

        private class Obj{
            int val; 
            int times;
            public Obj(int val, int times){
                this.val = val;
                this.times = times;
            }
        }

    再做一个保存消息的列表

    List<Obj> mList = new ArrayList<fragment_1.Obj>();

    再做一个轮询的机制

    private Runnable handlermsg_run = new Runnable() {
            @Override
            public void run() {
                if (mList.size() != 0) {
                    Obj val = mList.get(0);
                    int tt = doSomething(val);
                    state.setText(val.val+" + " + tt);
                    if (tt == 0) {
                        mList.remove(0);
                        tv.setText(getList(mList));
                        System.out.println("- remove - " + val.val + ">> " + getList(mList)); 
                    }
                } 
                han.postDelayed(this, 500);
            }
        }; 
    
      han = new Handler(Looper.getMainLooper());
      han.post(handlermsg_run);

    处理插入列表信息

        private void insert(int random) {
            int times = 5;  
                int newValue = random;
                synchronized (mList) {
                    if (mList.size() == 0)
                        mList.add(new Obj(random, times));
                    else if (mList.get(0).val != newValue) {
                        boolean sHas = false;
                        for (Obj obj : mList) {
                            if (obj.val == newValue) {
                                sHas = true;
                                break;
                            }
                        }
                        if (!sHas) {
                            mList.add(0, new Obj(newValue, times));
                            sort(mList);
                        }
    
                    }
                }
      }

    对插入的消息进行排序

        private static Comparator<? super Obj> comparator = new Comparator<Obj>() {
    
            @Override
            public int compare(Obj arg0, Obj arg1) {
                return arg0.val - arg1.val;
            }
        };
    
        private static void sort(List<Obj> mList) {
            Collections.sort(mList, comparator);
        }
  • 相关阅读:
    PHP 设计模式系列 —— 资源库模式(Repository)
    在 Laravel 5 中使用 Repository 模式实现业务逻辑和数据访问的分离
    laravel集合
    2013项目总结
    项目总结
    到底创建了几个String对象?
    String s=new String("abc")创建了几个对象?
    局部刷新
    robot framework 在pycharm中语法无法高亮显示的,显示绿色解决办法(Robot Framework with PyCharm)
    UNIX环境高级编程——进程管理和通信(总结)
  • 原文地址:https://www.cnblogs.com/toolbear/p/8496255.html
Copyright © 2020-2023  润新知