稍微翻译理一理,这里主要是说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));
- }
- }
|
相关文章: