Android线程和线程池(2)——IntentService

一.IntentService的介绍

很多时候我们创建Service就是希望Service能在后台进行一些耗时操作,但是又由于Service默认是运行在主线程的,我们不太方便直接进行耗时操作,然后每次进行耗时操作我们都得手动创建新的线程,显得很麻烦。
所以就会有IntentService,它内部是帮我们创建了一个HandleThread,以及对应的Handler,并通过onStart方法把intent封装成message再send给了Handler,Handler就在他的handleMessage中会将Intent从Message中取出来,然后直接调用我们重写的onHandlerIntent去处理这个intent。
我们只需要在 onHandleIntent() 方法中去实现我们的业务代码即可。调用就是通过简单的startService去调用。

  • 它本质是一种特殊的Service,继承自Service并且本身就是一个抽象类
  • 它可以用于在后台执行耗时的异步任务,当任务完成后会自动停止
  • 它拥有较高的优先级,不易被系统杀死(继承自Service的缘故),因此比较适合执行一些高优先级的异步任务
  • 它内部通过HandlerThread和Handler实现异步操作
  • 创建IntentService时,只需实现onHandleIntent和构造方法,onHandleIntent为异步方法,可以执行耗时操作

二.IntentService的使用姿势

  • 通过借助Intent调用startService方法启动 IntentServcie并传递传递数据到IntentService
  • startService(context, intentServcie.class)方法调用后,会把任务通过Intent传递到onHandleIntent() ,这个方法就是在子线程中运行的,进行一些网络请求等的耗时操作。
  • 最后通过接口+Handler转换到主线程更新UI(也可通过Broadcast等方法传递消息到Activity)

看下面的demo:
通过IntentService从网上获取图片并显示

public class MyIntentService extends IntentService {
   


    private static final String ACTION_FOO = "com.example.a11_text1.action.FOO";

    private static final String EXTRA_PARAM1 = "com.example.a11_text1.extra.PARAM1";
    private static final String EXTRA_PARAM2 = "com.example.a11_text1.extra.PARAM2";
	//接口,用于更新ui时传递数据到Activity
    public static UpdateUI updateUI;
    private static int index;

    public MyIntentService() {
   
        super("MyIntentService");
    }
	
    public static void setUpdateUI(UpdateUI updateUIInterface){
   
        updateUI=updateUIInterface;
    }
    public static void startActionFoo(Context context, String param1,int i) {
   
        Intent intent = new Intent(context, MyIntentService.class);
        intent.setAction(ACTION_FOO);
        intent.putExtra(EXTRA_PARAM1, param1);
        intent.putExtra(EXTRA_PARAM2,i);
        index = i;
        context.startService(intent);
    }
	
    @Override
    protected 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值