Android IntentService的简单使用

IntentService简介

IntentService是Service的子类,比普通的Service增加了额外的功能。先看Service本身存在两个问题:

  • Service不会专门启动一条单独的进程,Service与它所在应用位于同一个进程中;
  • Service也不是专门一条新线程,因此不应该在Service中直接处理耗时的任务;

IntentService特征

  • 会创建独立的worker线程来处理所有的Intent请求;
  • 会创建独立的worker线程来处理onHandleIntent()方法实现的代码,无需处理多线程问题;
  • 所有请求处理完成后,IntentService会自动停止,无需调用stopSelf()方法停止Service;
  • 为Service的onBind()提供默认实现,返回null;
  • 为Service的onStartCommand提供默认实现,将请求Intent添加到队列中;

以上内容引用自Android:IntentService的使用

常用场景

Application中异步初始化第三方Library。

使用步骤:

1、继承IntentService类,并重写onHandleIntent方法;

package com.fqxyi.intentservice;

import android.app.IntentService;
import android.content.Context;
import android.content.Intent;

/**
 * @author ShenBF
 * @描述: 应用启动时需要执行的异步初始化操作
 * @date 2018/3/15
 */
public class InitializeService extends IntentService {

    private static final String ACTION_APP_CREATE = "com.fqxyi.intentservice.action.app.create";

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

    public static void start(Context context) {
        Intent intent = new Intent(context, InitializeService.class);
        intent.setAction(ACTION_APP_CREATE);
        context.startService(intent);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        if (intent == null) {
            return;
        }
        if (ACTION_APP_CREATE.equals(intent.getAction())) {
            performInit();
        }
    }

    private void performInit() {
        // todo deal third library init
    }
}

2、在AndroidManifest.xml文件中注册该Service;

<service
    android:name="com.fqxyi.intentservice.InitializeService"
    android:enabled="true"
    android:exported="false" />

3、在Application的onCreate方法中启动该Service。

InitializeService.start(applicationContext);

添加新评论