IntentService可处理耗时操作

来源:互联网 发布:爱普生r390清零软件 编辑:程序博客网 时间:2024/06/01 08:55
     IntentService使用队列的方式将请求的Intent加入队列,然后开启一个worker thread(线程)来处理队列中的Intent,
对于异步的startService请求,IntentService会处理完成一个之后再处理第二个,每一个请求都会在一个单独的worker thread中处理,
不会阻塞应用程序的主线程,这里就给我们提供了一个思路,

如果有耗时的操作与其在Service里面开启新线程还不如使用IntentService来处理耗时操作。


         IntentService继承Service,使用工作队列来处理所有请求,一次处理一件。当有多个请求同时发出,可以保证线程的安全性。
你所要做的只需要实现onHandleIntent()方法在后台处理从不同的Intent发来的请求。


下面给一个小例子:

public class MyIntentService extends IntentService{public MyIntentService() {super("aaa");}@Overrideprotected void onHandleIntent(Intent intent) {//经测试,IntentService里面是可以进行耗时的操作的.//IntentService使用队列的方式将请求的Intent加入队列,//然后开启一个worker thread(线程)来处理队列中的Intent.//对于异步的startService请求,IntentService会处理完成一个之后再处理第二个.System.out.println("睡眠开始");try {Thread.sleep(10000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("睡眠结束");}}public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//连续两次启动IntentService,会发现应用程序不会阻塞,而且最重的是第二次的请求会在第一个请求结束之后运行//(这个证实了IntentService采用单独的线程每次只从队列中拿出一个请求进行处理)startService(new Intent(this,MyIntentService.class));startService(new Intent(this,MyIntentService.class));}}


0 0
原创粉丝点击