消息处理机制(线程)

为什么要使用线程?
(1). 当主线程执行的操作时间过长,就无法执行其他操作. 消息队列中的消息无法处理,UI界面就不会更新,用户时间也不会处理.
(2). 如果主线程执行一个操作超过5秒, Android可能会弹出一个应用程序没有响应的对话框, 你的Activity就可能被杀掉

为什么要使用线程?
(1). UI线程中的操作要尽量短小,费时的操作(如网络连接,数据库访问)等要在单独的线程中完成.
(2). 如果UI线程超过5s没有响应用户请求,会弹出ANR的对话框.
(3). 常见的耗时操作如下:
网络连接和网络数据的获取
对存储器的读写
大量数据的计算

消息队列(MessageQueue)
Android采用一种复杂的Message Queue机制保证线程间通信.
Message Queue是一个消息队列, 用来存放通过Handler发布的消息.
Android在第一次启动程序时会默认为UI线程创建一个关联的消息队列,用来管理程序的组件,
如Activity,Service, Broatcast Receiver等.
可以在工作线程中创建Handler与UI线程通信.

Handler的消息传递机制
(1). 工作线程可以通过Handler对象和主线程通讯
(2).Handler对象的所有工作将在主线程中执行
(3).Handler类需要实现handlerMessage()方法,来处理消息队列中取出的Message对象
(4).HandlerMessage()方法由主线程调用,可以在需要的时候更新UI界面.但是,必须确保此方法快速完成,因为其他UI操作会等待它完成才能执行.
(5).可以在Message中附加不同的参数

public void onClick(View v){
//使用线程完成
//工作线程是一个匿名类
new Thread(){
@Override
public void run(){
for (int i=0; i<100; i++){
Message msg = new Message(); //创建Message发送给handler
msg.what = 0x0001; //what是消息的唯一标识,必须有
msg.arg1 = i;
handler.sendMessage(msg);

try{
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}

// handler创建
Private Handler = new Handler(){
@Override
public void handleMessage(Message msg){
super.handleMessage(msg){
if (msg.what == 0x0001){
int index = msg.arg1;
tvTest.setText(index+"");
}
}
}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android消息处理机是指Android系统中用于处理异步任务的一种机。它基于事件驱动的方式,通过消息队列和线程来实现异步任务的处理。 在Android中,消息处理机主要包括Handler、Message和Looper三个核心组件: 1. Handler:Handler是消息处理的核心,它用于发送和处理消息。每个Handler对象都关联一个特定的线程,并且在该线程中处理消息。通过Handler,我们可以发送消息消息队列,或者处理消息队列中的消息。 2. Message:Message是消息的载体,用于在不同线程之间传递信息。每个Message对象包含了一个标识符(what)、一个可选的整数参数(arg1和arg2)、一个可选的对象参数(obj)以及一个可选的Handler对象(target)。通过这些属性,我们可以传递需要处理的信息和相关的数据。 3. Looper:Looper是一个消息循环器,它用于不断地从消息队列中取出消息,并将其分发给对应的Handler进行处理。每个线程只能有一个Looper对象,它通过轮询机实现不断地从消息队列中取出消息。 当我们需要在某个线程中处理异步任务时,可以创建一个Handler对象,并将其关联到该线程的Looper。然后,我们可以通过Handler发送消息消息队列,并在对应的Handler中处理这些消息。这样就可以实现在不同线程之间进行通信和任务处理。 总的来说,Android消息处理机提供了一种简单而有效的方式来处理异步任务,使得我们能够更好地进行多线程编程和实现UI更新等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值