IntentService解析

       在说intentservice之前我们先来了解一下handlerthread,handlerthread其实我们平时很少见,但是安卓中应用的还挺多的,他其实也是一个线程,只不过普通的线程逻辑代码是在run方法中执行的,而他的run方法其实是初始化了一个消息队列,并开启消息循环,他的逻辑代码处理是通过handler发送消息来处理的,但是handlerthread的run方法无限循环的,因此当不使用的时候一定记得使用quit方法来终止它。

public void run(){
   public Looper mlooper;
   Looper.prepare();
   synchronized (this){
      mlooper = Looper.myLooper();
      notifyAll();
   }
   onLooperPrePared();
   Looper.loop();
这是其源代码的一部分,
 

IntentService是一种特殊的service,由于他是安卓中的服务,所以优先级高于线程,适合做一些后台的高优先级的耗时操作,


public void onCreate() {  

super.onCreate();  

HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");  

thread.start();  

mServiceLooper = thread.getLooper();  

mServiceHandler = new ServiceHandler(mServiceLooper); }

可见其在oncreat方法中创建了一个handlerthread,然后启动线程拿到了looper循环器,然后把循环器和handler关联起来,这样通过serviehandler发送过来的任务都会在handlerthread执行,每当我们启动service时他的onstartcommand()方法都会调用一次,


public int onStartCommand(Intent intent, int flags, int startId) 
{  
onStart(intent, startId);  
return mRedelivery ? START_REDELIVER_INTENT : START_NOT_STICKY;  
}
其调用了onstart()方法;
public void onStart(Intent intent, int startId)
{  
Message msg = mServiceHandler.obtainMessage();  
msg.arg1 = startId;  
msg.obj = intent;  
mServiceHandler.sendMessage(msg); }


onstart中拿到handler发送过来的任务,在handlermessage中执行,这样任务就是在handlerthread中执行的,而handlermessage()方法中又调用了onHnadlerIntent()方法,所以就保证了我们可以直接在这个方法中进行任务处理,不需要自己去new线程,而且每执行完成一个任务,会相应 的终止刚刚完成的任务,当service中没有任务时,service停止,
还有一点就是intentrservice中的任务时按顺序执行的,因为handler的消息机制是按顺序接受的,所以任务执行也是按顺序执行的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值