最近看的,记录下。
1.service
服务,后台运行,无界面。因为对linux进程/线程机制比较熟悉,以前一直以为是起了一个类似后台进程/线程的东东在那跑,其实不是。
local service,也就是一个app内的service是运行在activty主线程,因此,如果它要做比较耗时的或者会导致阻塞的任务,要在service起一个线程来做。
remote service,也就是不同app的service,是运行在独立的进程。
service内部的实现机制不是很理解,待研究。
2.asyntask
异步任务。相对于起一个子线程的方法,asyntask类已经封装了基本的实现,只需要创建对象就行,相当于系统已经为你做好了准备工作。
3.handler
Handler 是用来干什么的?
1)执行计划任务,可以在预定的时间执行某些任务,可以模拟定时器
2)线程间通信。在Android的应用启动时,会创建一个主线程,主线程会创建一个
消息队列来处理各种消息。当你创建子线程时,你可以在你的子线程中拿到父线程中
创建的Handler 对象,就可以通过该对象向父线程的消息队列发送消息了。由于Android
要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面。
大概的实现原理:
一个acticty对应一个消息队列,对应有一个looper来管理这个消息队列。创建handler的时候,会指定关联到哪个looper,并且注册looper处理handler发过来的消息的回调函数。
Handler handler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
。。。。。。
}
};
注意,如果new Handler()
无参,则默认传入的是调用者activity的looper。
这样就把handler跟looper关联起来,当通过handler发消息:
handler.sendEmptyMessage(CLOSE_LIGHT);
就会发到looper所管理的消息队列。looper会循环从消息队列取消息出来处理,当要处理的消息是handler发过来的,就调用之前注册的处理函数进行处理。
通过这种机制,能实现做完某些工作发通知,也能实现线程间的通信。