为了账号安全,请及时绑定邮箱和手机立即绑定

IntentService 使用及原理

标签:
Android

最近在学service,学了一个他的子类IntentService的使用,及其源码。
IntentService适用于在后台执行的任务,如多个下载任务,这几个下载任务之间是有步骤的,必须A下载完成后下载B.或者某个单独的下载任务,执行完后就不再需要。
IntentService的好处,一使用简单,只要实现onHandleIntent方法就可以了;二 无需自己开线程处理任务;三无需关闭服务
IntentService的原理,继承自Service,在onCreate的时候开启了一个线程
@Override
public void onCreate() {
super.onCreate();
HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
thread.start();
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper);
}

然后在onStart的时候发送要执行任务的消息给内部mServiceHandler (onStartd 在onStartCommand中调用)

@Override
public void onStart(Intent intent, int startId) {
Message msg = mServiceHandler.obtainMessage();
msg.arg1 = startId;
msg.obj = intent;
mServiceHandler.sendMessage(msg);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    onStart(intent, startId);
    return mRedelivery ? START_REDELIVER_INTENT : START_NOT_STICKY;
}

最后用户只需实现onHandleIntent方法即可,执行完onHandleIntent后,handleMessage调用stopSelf将服务关闭。
private final class ServiceHandler extends Handler {
public ServiceHandler(Looper looper) {
super(looper);
}

    @Override
    public void handleMessage(Message msg) {
        onHandleIntent((Intent)msg.obj);
        stopSelf(msg.arg1);
    }
}

onHandleIntent为抽象方法,用户在定义service的时候实现该方法
@WorkerThread
protected abstract void onHandleIntent(Intent intent);

使用Demo,下班了,明天补上!

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消