Android IntentService

  1. 创建服务
    新建一个继承IntentService的class,如下
public class SelfService extends IntentService {

    public static final String TAG="SelfService ";

    public static Intent newIntent(Context context){
        return new Intent(context,PollService.class);
    }

    public SelfService () {
        super(TAG);
    }

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        Log.i(TAG,"Received an intent: "+intent);
        //在这里做一些需要在后台干的事,比如检查网络连接,定义重新连接,或者别的什么事情
    }
}

首先创建构造方法。然后覆盖IntentService的onHandlerIntent()方法。
再创建静态内部类,用来创建intent对象。

  1. 启动服务
    可以在fragment的onCreate()方法中调用服务。通过创建intent对象,并调用context的startService()来完成。
    启用语句:
Intent intent=SelfService.newIntent(getActivity());
getActivity.startService(intent);
  1. 没有托管Fragment的Activity时,如何启动服务?
    可以使用AlarmManager,AlarmManager本身是一个系统服务,它本身可以发送Intent。
    我们可以通过PendingIntent打包一个要启动某个后台服务的Intent,然后将其发送给AlamManager。
    AlarmManager通过setRepeating()方法来启动定时的循环。
    代码:
//创建Intent
Intent intent=SelfService.newIntent(context);
//创建一个打包了Intent的PendingIntent,pendingIntent包含四个参数:
//一个用来发送intent的context,区分pendingIntent来源的请求代码,一个待发送的intent实体,以及
//一组用来决定如何创建PendingIntent的标识符。
PendingIntent pi=PendingIntent.getService(context,0,intent,0);
//获取系统服务
AlarmManager alarmManager=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
//设置重复时间
alarmManager.setRepeating(AlarmManager.ELAPSED_REATIME,SystemClock.elapsedRealtime(),POLL_INTERVAL, pi);

4.取消定时器
用alarmManager.cancel(PendingIntent pi)取消,通常需要同步取消PendingIntent。

程序首次运行后,后台就启动定时器,即使程序进程停止了,AlarmManager依然会不断的发送Intent,反复启动指定的服务 。

注意:如果不停止定时器,会一直在后台运行。

你可能感兴趣的:(Android IntentService)