
一般的服务都是运行在主线程中的,如果要想在服务中直接处理耗时任务,就容易出现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); //启动服务
- 上一篇 前台服务,让服务可见
- 下一篇 ContentProvider简单使用
查看评论