IntentService 测试

本文通过对比Service与IntentService,详细解释了如何使用IntentService处理耗时操作,避免阻塞主线程,并展示了IntentService的异步处理机制。通过实验证明,IntentService更适合处理耗时任务,而Service则不适合直接处理此类任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);  
        //经测试,Service里面是不能进行耗时的操作的,必须要手动开启一个工作线程来处理耗时操作   
        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) {  
        // 经测试,IntentService里面是可以进行耗时的操作的   
        //IntentService使用队列的方式将请求的Intent加入队列,然后开启一个worker thread(线程)来处理队列中的Intent   
        //对于异步的startService请求,IntentService会处理完成一个之后再处理第二个   
        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 {  
    /** Called when the activity is first created. */  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        startService(new Intent(this,MyService.class));//主界面阻塞,最终会出现Application not responding   
        //连续两次启动IntentService,会发现应用程序不会阻塞,而且最重的是第二次的请求会再第一个请求结束之后运行(这个证实了IntentService采用单独的线程每次只从队列中拿出一个请求进行处理)   
        startService(new Intent(this,MyIntentService.class));  
        startService(new Intent(this,MyIntentService.class));  
    }  

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值