服务是什么
服务是实现程序后台运行的解决方案
依赖于创建服务时所在的应用程序进程,当进程被杀掉时服务也会停止运行
Android多线程编程
如何定义一个线程?
方法一:
新建一个类继承Thread,然后重写父类的run()
方法
class MyThread extends Thread{
public void run () {
// 处理具体的逻辑
}
}
然后调用start()
方法来运行
new MyThread().start();
方法二:
class MyThread implements Runnable(){
public void run(){
// 处理具体逻辑
}
}
启动线程的方法
MyThread myThread = new MyThread();
new Thread(mThread).start;
方法三:
这种方法是使用匿名类
new Thread(new Runnable(){
public void run(){
// 处理具体的逻辑
}
}).start();
PS:子线程不能直接更新UI
异步消息处理机制
异步消息处理主要分为4个部分组成:Message ,Handler ,MessageQueue ,Looper
Message
- 在内部携带少量信息,用于不同线程之间交换数据
Handler
- 用于发送和处理信息
- 发送一般使用Handler的
sendMessage()
方法,而发送的消息经过一些列地辗转处理后,最终会传递到Handler的handleMessage()
方法
MessageQueue
- 用于存放通过Handler发送的消息的消息队列
- 每个线程只会有一个MessageQueue对象
Looper
- 每个线程中MessageQueue的管家
- 调用Looper的
loop()
方法后,就会进入到一个无线循环中,每当发现队列中存在一条消息,就会将它取出,并传递到Handler的handleMessage()
方法 - 每个线程只有一个Looper对象
使用AsyncTask
用于在子线程中对UI进行操作的工具
AsyncTask的基本用法
创建一个子类去继承它
继承时我们可以为AsyncTask指定三个泛型参数
Params
在执行AsyncTask时需要传入的参数,可用于在后台任务中使用