android之IntentService

为什么使用IntentService

我们知道Service的代码默认是运行在主线程之中的,如果在service中处理一些比较耗时的操作,就很容易出现ANR的情况,所以这时候就需要让这些耗时的工作放在子线程中。而我们往往又希望服务执行完后可以自动停下来,那么我们创建的服务就会像这样:

public class MyService extends Service{
    @Override
    public IBinder onBind(Intent intent){
        return null;
    }

    @Override
    public void onStartCommand(Intent intent,int flags,int startId){
        new Thread(new Runnable{
            @Override
            public void run(){
                //这里处理耗时逻辑
                stopself();  //执行后停下来
            }
        }).start();
        return super.onStartCommand(intent,flags,startId);
    }
}

那么有没有更简单的更方便的方法让创建一个异步,会自动停止的服务呢? 答案是IntentService。


使用IntentService

IntentService需要调用其父类的构造函数,然后在其子类中实现onHandleIntent()这个抽象方法,该方法运行在子线程中。最后还需要在AndroidmMainfest.xml中注册IntentService。

public class MyIntentService extends IntentService{

    public MyIntentService(){
        super("MyIntentService");
    }

    @Override
    protected void onHandleIntent(Intent intent){
        //该函数的逻辑已经在子线程中运行了,可以处理一些耗时逻辑,而不用担心ANR
    }

    @Override
    public void onDestroy(){
        super.onDestroy();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值