最近在学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,下班了,明天补上!
共同学习,写下你的评论
评论加载中...
作者其他优质文章