Android四大组件之Service之IntentService

一、IntentService的含义

        异步的,会自动停止的服务。

二、IntentService和service的区别

        service服务默认是运行在主线程中的,如果直接在服务中处理一些耗时的逻辑,就可能会出现ANR,所以我们一般都在服务的具体方法里开启一个新的线程去处理具体的逻辑,然后,这种类型的服务一旦启动后,就会一直运行,要想停止服务就得调用stopSeft()

然后Android专门提供了IntentService来简单的创建异步,自动停止的服务。

三、IntentService的使用

public class MyIntentService extends IntentService {

    public MyIntentService() {
        super("name");
        Log.d("Kathy", "Constructor");
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d("Kathy", "onCreate()" + " ,Thread Name = " + Thread.currentThread().getName());
    }

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        Log.d("Kathy", intent.getStringExtra("data") + " ,Thread Name = " + Thread.currentThread().getName());

        try {
            Thread.sleep(30000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d("Kathy", "onDestroy()");
    }
}

public class IntentServiceDemoActivity extends AppCompatActivity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_intent_service_demo);

        Intent intent = new Intent(this,MyIntentService.class);
        intent.putExtra("data","Kathy");
        startService(intent);
    }
}

结果:

 结果分析:可以看到在onHandleIntent执行了异步耗时操作,而且自动停止了服务。

四、原理分析

 进来一个任务就会走onStartCommand()-->onStart(),就会往handler发一个消息,把任务信息带过去,在handler的handleMessage中走我们复写的onHandleIntent()处理任务。执行完onHandleIntent(),就会stopSelf(msg.arg1)。

猜你喜欢

转载自blog.csdn.net/sunbinkang/article/details/121282091