Android 之IntentService学习
2013-05-13 18:06
204 查看
public abstract class IntentService extends Service
1.IntentService的启动与结束
既然它继承自Service,那么先来考虑Service的启动和结束。启动Service有两种方式:startService()和bindService()。
对于IntentService应该采用startService方法来启动,理论上也可以用bindService启动,实际是否可行还需要验证。
我们知道startService方法启动的Service,必须调用stopService才能结束,或者Service自己自杀(stopSelf()),当通过startService方法启动IntentService后,我们不需要再通过stopService结束它,它工作结束后就会自杀,这可以在代码中看到:
2.继承自IntentService
作为一个抽象类,它只有一个抽象方法需要我们实现:protected abstract void onHandleIntent(Intent intent);
不同于Service,我们不需要实现onBind方法,因为IntentService已经实现了:
public IBinder onBind(Intent intent) {
return null;
}
3.开启新线程异步处理问题
public void onCreate() {
// TODO: It would be nice to have an option to hold a partial wakelock
// during processing, and to have a static startService(Context, Intent)
// method that would launch the service & hand off a wakelock.
super.onCreate();
HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
thread.start();
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper);
}
这是个典型的利用Handler机制实现异步处理问题的方式:新建一个ServiceHandler继承自Handler,为了能够实现异步处理,需要借助于HandlerThread来另起一个线程来获得那个线程的Looper传递给ServiceHandler。
4.IntentService的作用
我们使用IntentService,就是要它在后台并异步地来处理我们的问题,我们的问题信息都在Intent中,而IntentService会把这个Intent封装成一个消息,并发送到ServiceHandler对应的Looper的消息队列中,然后通过handleMessage把这个任务交给onHandleIntent来处理,处理完后就结束IntentService。
小结:IntentService能够在后台异步地来处理我们的问题,而Service并不能异步处理问题(除非自己创建另一个线程来处理),它的使用非常方便:把要做的任务信息放在Intent中,然后startService启动就ok了,至于如何完成这个任务,当然要写个类继承IntentService,最关键的是复写onHandleIntent方法。
疑问:http://blog.csdn.net/zhf198909/article/details/6906786
startService(new Intent(this,MyIntentService.class));
startService(new Intent(this,MyIntentService.class));
//连续两次启动IntentService,会发现应用程序不会阻塞,而且最重的是第二次的请求会再第一个请求结束之后运行(这个证实了IntentService采用单独的线程每次只从队列中拿出一个请求进行处理)
对这个还不懂,慢慢研究。
1.IntentService的启动与结束
既然它继承自Service,那么先来考虑Service的启动和结束。启动Service有两种方式:startService()和bindService()。
对于IntentService应该采用startService方法来启动,理论上也可以用bindService启动,实际是否可行还需要验证。
我们知道startService方法启动的Service,必须调用stopService才能结束,或者Service自己自杀(stopSelf()),当通过startService方法启动IntentService后,我们不需要再通过stopService结束它,它工作结束后就会自杀,这可以在代码中看到:
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); //处理完消息后,此Service就会结束自己的生命 } }
2.继承自IntentService
作为一个抽象类,它只有一个抽象方法需要我们实现:protected abstract void onHandleIntent(Intent intent);
不同于Service,我们不需要实现onBind方法,因为IntentService已经实现了:
public IBinder onBind(Intent intent) {
return null;
}
3.开启新线程异步处理问题
public void onCreate() {
// TODO: It would be nice to have an option to hold a partial wakelock
// during processing, and to have a static startService(Context, Intent)
// method that would launch the service & hand off a wakelock.
super.onCreate();
HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
thread.start();
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper);
}
这是个典型的利用Handler机制实现异步处理问题的方式:新建一个ServiceHandler继承自Handler,为了能够实现异步处理,需要借助于HandlerThread来另起一个线程来获得那个线程的Looper传递给ServiceHandler。
4.IntentService的作用
public void onStart(Intent intent, int startId) { Message msg = mServiceHandler.obtainMessage(); msg.arg1 = startId; msg.obj = intent; mServiceHandler.sendMessage(msg); }
我们使用IntentService,就是要它在后台并异步地来处理我们的问题,我们的问题信息都在Intent中,而IntentService会把这个Intent封装成一个消息,并发送到ServiceHandler对应的Looper的消息队列中,然后通过handleMessage把这个任务交给onHandleIntent来处理,处理完后就结束IntentService。
小结:IntentService能够在后台异步地来处理我们的问题,而Service并不能异步处理问题(除非自己创建另一个线程来处理),它的使用非常方便:把要做的任务信息放在Intent中,然后startService启动就ok了,至于如何完成这个任务,当然要写个类继承IntentService,最关键的是复写onHandleIntent方法。
疑问:http://blog.csdn.net/zhf198909/article/details/6906786
startService(new Intent(this,MyIntentService.class));
startService(new Intent(this,MyIntentService.class));
//连续两次启动IntentService,会发现应用程序不会阻塞,而且最重的是第二次的请求会再第一个请求结束之后运行(这个证实了IntentService采用单独的线程每次只从队列中拿出一个请求进行处理)
对这个还不懂,慢慢研究。
相关文章推荐
- Android Service学习之IntentService 深入分析
- Android Service学习之IntentService 深入分析
- Android Service学习之IntentService 深入分析
- Android Service学习之IntentService 深入分析
- Android Service学习之IntentService 深入分析
- Android学习之IntentService
- Android Service学习之IntentService 深入分析
- Android Service学习之IntentService 深入分析(附码源分析)
- Android Service学习之IntentService 深入分析
- Android Service学习之IntentService 深入分析
- Android Service学习之IntentService 深入分析
- Intent启动系统组件(activity,service,BroadReceiver)-android学习之旅(四十九)
- Android Service学习之IntentService 深入分析
- Android(java)学习笔记210:Android线程形态之 IntentService
- Android Service学习之IntentService 深入分析
- Android Service学习之IntentServi…
- Android Service学习之IntentService 深入分析
- Android学习总结(三)——IntentService的用法
- Android Service学习之IntentService 深入分析
- Android Service学习之IntentService 深入分析