Android Service和IntentService区别以及开机启动

先来延伸一下知识面:

1.在Android四大组件中Service是唯一能够后台运行的服务(如果你想告诉我BroadcastReceiver也行,我保证不打死你),广播接收器是一个等待着的和观察者的角色,并不属于后台程序,此外,他的生命周期也非常端,在OnReceiver中不能超过有10秒的逻辑出现。


2.Service和IntentService

首先第一点,名字不相同;

第二点生命周期不同,IntentService的生命周期非常短暂,执行完onHandleIntent(Intent intent) 会自动结束;

第三点:Service允许绑定服务,IntentService不允许绑定服务

第四点:Service可在后台运行,IntentService默认不可以在后台运行,但是可以不去调用 super.onHandleIntent,这样就可以保持持久一些。

第五点:Service生命周期中,不可执行耗时任务,但IntentService可以,在IntentService中,onHandleIntent本身就是在异步环境中执行的方法。

onHandleIntent方法每次都会创建新的Work,并将新的work加入到WorkQueue中,也不会造成线程问题(例如可以和ListView 图片异步下载相关),因此非常适合后台下载等。

·················································

说正题,开机启动

package com.test.background;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
 
public class BackBroadcastReceiver extends BroadcastReceiver {
 
    @Override
    public void onReceive(Context context, Intent intent) {
       if("android.intent.action.BOOT_COMPLETED".equals(intent.getAction()))
       {
        Intent myIntent = new Intent();
        myIntent.setAction("com.test.background.Service.network.Action"); //service服务的Action
        context.startService(myIntent);
        }
    }
 
}

注册

    <receiver android:name="com.test.background.BackBroadcastReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"></action>
            </intent-filter>
        </receiver>

权限

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>


你可能感兴趣的:(service,IntentService,onHandleIntent)