#Android异步消息处理
- 定义:service是android实现程序后台运行的解决方案,它适合执行 不需要和用户交互但又长期运行的任务。
注意:
(1) 服务依赖于创建它的应用程序进程,应用程序一旦被杀死,服务相应的也就终止执行。
(2) 服务并不会创建子线程,需要开发者自己设计实现子线程。 - android多线程
android多线程和java多线程一样,有三种实现方式:
- 继承父类Thread:
public void MyThread extends Thread{ @override public void run(){ //子线程任务代码 } }
- 实现接口Runable
public void MyThead implements Runable{ @override public void run(){ //子线程任务代码 } }
- 实现匿名类
```
new Thread(new Runable(){
@override
public void run(){
//子线程任务代码
}
}).start();
- android异步处理机制—Handler
和大多数GUI一样,android的UI也是线程不安全的,所以更新UI的操作只能放在主线程中。
- handle实例
public class MainActivity extends Activity impl...{ public static int UPDATE = 1; private TextView text; private Handler handler = new Handler(){ public void handleMessage(Message msg){ switch(msg.what){ case UPDATE: text.setText("Changed msg!"); break; default: ; }//switch }//handleMessage }//handler ...... @override public void onClick(View v){ switch(v.getId()){ case R.id.text: new Thread(new Runable(){ @override public void run(){ Message msg =new Message; msg.what=UPDATE; handler.sendMessage(); } }).start(); break; default: break; }//switch }//onClick ...... }//Activity
上面是一个用Handler类在主线程和子线程中传递消息修改TextView的实例,子线程只负责传递修改UI的信号,真正修改UI的动作在主线程中根据子线程传递的信号发生。
- handler机制
android异步消息处理机制由四个部分组成:
Message,Handler,MessageQueue和Looper,他们的关系如下面所示:
Message: 它是线程间传递消息的类,内部可以携带少量的信息,它的what可以携带信息,好友arg和obj字段可以携带整形和对象数据。
Handler: 它是消息处理类,主要负责消息的发送和处理,比如在主线程中创建handler对象时要实现起消息处理方法handleMessage(),在子线程中调用sendMessage()方法传递消息。
MessageQueue: 是message的管理者,每当handler发出一个消息,就进入消息队列进行等待。
Looper: 是message调度者,每次从MessageQueue中取出消息并传递给handler的handleMessage方法进行处理。
- android异步处理机制—AsyncTask
android对异步消息处理机制进行很好的封装,有了AsyncTask这个工具,我们可以很方便的根据自己的需求实现线程间的切换。
- 实例
public void class DownloadTask entends AsyncTask<Void,Integer,Boolean>{ }