• 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);
        }
  • 相关阅读:
    Redhat7.4Python安装配置cx_Oracle
    Kafka与Zookeeper关系
    Centos7Prometheus+Granfana安装配置
    1day漏洞反推技巧实战(3)
    redis攻击篇redis写文件
    资产收集对抗子域名爆破
    ssrf漏洞利用攻击redis篇
    Spring Cloud Gateway actuator组建对外暴露RCE问题漏洞分析
    PHP/ASP.NET/ASP网站定制开发
    PHP 程序员的调试技术
  • 原文地址:https://www.cnblogs.com/toolbear/p/8496255.html
Copyright © 2020-2023  润新知