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);
}
Android中 实现队列方式处理优先级信息的更多相关文章
- Android中获取应用程序(包)的信息----PackageManager
本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下: 第一部分: 获取应用程序的packagena ...
- Android 中调试手段 打印函数调用栈信息
下面来简单介绍下 android 中的一种调试方法. 在 android 的 app 开发与调试中,经常需要用到打 Log 的方式来查看函数调用点. 这里介绍一种方法来打印当前栈中的函数调用关系 St ...
- Android中获取应用程序(包)的信息-----PackageManager的使用(一)
本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下: 第一部分: 获取应用程序的packagenam ...
- Android中获取应用程序(包)的信息-----PackageManager的使用
本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占用大小等.具体分为两个 部分,计划如下: 第一部分: 获取应用程序的packagename ...
- 【转】Android中获取应用程序(包)的信息-----PackageManager的使用(一)
转载请注明出处:http://blog.csdn.net/qinjuning 本节内容是如何获取Android系统中应用程序的信息,主要包括packagename.label.icon.占 ...
- Java中的队列Queue,优先级队列PriorityQueue
队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...
- Android中进程生命周期的优先级
“我们不是生产者,我只是大自然的搬运工.” 学习Android最好的途径当然是强大的官方文档了,其中在Processes and Threads一节中对于进程生命周期淘汰优先级,有着详细的介绍.原文如 ...
- Android中的适配方式
1,图片适配(在不同像素密度的手机上,加载不同文件夹下的图片) 一套图(800*480,将截取的图片放置在hdpi下,小图(变形不明显), 大图(根据适配的手机,做单独的截取,比如有两款手机适配(做两 ...
- android中两种方式打开网页
一.你要打开一个网页你可以自己写一个webview,在自己的程序中就可以打开. wv = (WebView) findViewById(R.id.webView1); wv.getSettings() ...
随机推荐
- 关于JVM加载内存图学习小密招
先看如下代码: Person.java public class Person { private String name; private int age; static int count = 0 ...
- Linux上安装jdk,mysql
1.准备工作 一台纯净的Linux系统需要先安装一些依赖才能安装jdk等 rpm: 本地添加安装程序:rpm -ivh 程序名 本地查看程序: rpm -qa 本地卸载程序: rpm -e --nod ...
- 容器——list(双向链表)
做了一道list可以解决的题,才发现list多么的好 转自https://www.cnblogs.com/BeyondAnyTime/archive/2012/08/10/2631191.html 1 ...
- leetcode答案 有效的括号(python)
def isValid(s): if s and len(s) % 2 is 0: a = {')': '(', ']': '[', '}': '{'} l = [None] for i in s: ...
- Jsp页面输入中文,MYSQL数据库乱码???问题
首先,先看一下自己mysql数据库的编码格式 其次,cmd模式下执行命令set names gbk 最后,更改my.ini文件文件参数为gbk 那为什么会产生乱码问题呢? 原因有以下几种: 一.项目编 ...
- StreamReader和StreamWriter说明
StreamReader/StreamWriter操作的是字符数据(char),而FileStream操作的是字节数据(byte) FileStream与StreamXXXX类的默认编码都是UTF8, ...
- Tomcat的三种安装方式:解压版、安装版、配置成Windows服务版
https://blog.csdn.net/Jessica_XLF/article/details/81711429
- hadoop学习路线
学习hadoop,首先我们要知道hadoop是什么? 说到底Hadoop只是一项分布式系统的工具,我们在学习的时候要理解分布式系统设计中的原则以及方法,只有这样才能以不变应万变.再一个就是一定要动手, ...
- windows yii2 配置redis
1 安装redis https://blog.csdn.net/gaotanpan3666/article/details/83047081 安装redis 2 yii安装redis扩展 compo ...
- 项目中PO、PM的职责区分
PO是product owner,是一个role,负责与stakeholders打交道,提炼stakeholders的需求,按照需求的价值以及紧急程度安排优先级.PO是一个角色,对product ba ...