IntentService

一般的服务都是运行在主线程中的,如果要想在服务中直接处理耗时任务,就容易出现ANR

所以一般都是开启一个线程处理:(部分代码如下)

@Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                //处理耗时
                
                stopSelf(); //服务一旦运行起来,必须调用stop方法才能停下来,如果想让服务自动处理完停止,就在这加上stop
            }
        }).start();

        Log.i("mydate" , "onstartcommand");
        return super.onStartCommand(intent, flags, startId);
    }

但是我们经常会忘记开启线程,和自动调用stop方法停止线程

这个时候有一个IntentService类可以同时解决这两个问题(自动创建的有多余代码,要手动创建)

onHandleIntent()该方法处于线程,所以可以直接在方法中处理耗时逻辑

重写onDestroy()方法,可以自动停止服务,  部分代码如下:

public class MyIntentService extends IntentService {
    public MyIntentService() {
        super("MyIntentService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        Log.i("mydate" , "可以在这里直接处理耗时任务,不用开启主线程");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.i("mydate" , "服务自动停止了");
    }
}
Intent intent = new Intent(MainActivity.this , MyIntentService.class);
        startService(intent); //启动服务




阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页