Android中 實現隊列方式處理優先級信息
阿新 • • 發佈:2018-03-03
div fragment als eth lean @override 需要 一個 原理
需求:當界面在處理消息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); }
Android中 實現隊列方式處理優先級信息