最近看的,记录下。

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发过来的,就调用之前注册的处理函数进行处理。

通过这种机制,能实现做完某些工作发通知,也能实现线程间的通信。