稍微翻译理一理,这里主要是说IntentService使用队列的方式将请求的Intent加入队列,然后开启一个worker thread(线程)来处理队列中的Intent,对于异步的startService请求,IntentService会处理完成一个之后再处理第二个,每一个请求都会在一个单独的worker thread中处理,不会阻塞应用程序的主线程,这里就给我们提供了一个思路,如果有耗时的操作与其在Service里面开启新线程还不如使用IntentService来处理耗时操作。下面给一个小例子:
1.Service:
- package com.zhf.service;
-
- import Android.app.Service;
- import Android.content.Intent;
- import Android.os.IBinder;
-
- public class MyService extends Service {
-
- @Override
- public void onCreate() {
- super.onCreate();
- }
-
- @Override
- public void onStart(Intent intent, int startId) {
- super.onStart(intent, startId);
-
- System.out.println("onStart");
- try {
- Thread.sleep(20000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- System.out.println("睡眠结束");
- }
-
- @Override
- public IBinder onBind(Intent intent) {
- return null;
- }
- }
|
2.IntentService:
- package com.zhf.service;
-
- import Android.app.IntentService;
- import Android.content.Intent;
-
- public class MyIntentService extends IntentService {
-
- public MyIntentService() {
- super("yyyyyyyyyyy");
- }
-
- @Override
- protected void onHandleIntent(Intent intent) {
-
-
-
- System.out.println("onStart");
- try {
- Thread.sleep(20000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- System.out.println("睡眠结束");
- }
- }
|
测试主程序:
- package com.zhf.service;
-
- import Android.app.Activity;
- import Android.content.Intent;
- import Android.os.Bundle;
-
- public class ServiceDemoActivity extends Activity {
-
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- startService(new Intent(this,MyService.class));
-
- startService(new Intent(this,MyIntentService.class));
- startService(new Intent(this,MyIntentService.class));
- }
- }
|