Android四大组件之服务(Service)

基本定义:是Android中实现程序后台运行的解决方案,服务不是运行在一个独立的进程中,而是依赖创建服务的应用程序进程。当应用程序被干掉的时候,服务也会随之停止。

1.本地服务:服务和启动服务的activity在同一个进程中,该服务依附主进程而不是独立的进程

2.远程服务:对应进程名格式为所在包名加上你指定的android:process字符串,一般的定义方式为android:process=".service",一般用于系统的service,这种服务是常驻的,指的是服务和启动服务的activityv不在同一进程中。

注意:启动本地服务用的是显式启动,远程服务为隐式启动

服务的俩种状态:

一、非绑定模式:

public class MyService extends Service {
    private String TAG = "测试Service";
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.e(TAG, "onBind: " );
        return null;
    }
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.e(TAG, "onStartCommand: " );
        return super.onStartCommand(intent, flags, startId);
    }
    @Override
    public void onCreate() {
        Log.e(TAG, "onCreate: " );
        super.onCreate();
    }

    @Override
    public boolean onUnbind(Intent intent) {
        Log.e(TAG, "onUnbind: " );
        return super.onUnbind(intent);
    }

    @Override
    public void onDestroy() {
        Log.e(TAG, "onDestroy: " );
        super.onDestroy();
    }
}

(1)正常启动关闭(2)正常启动并重复点击启动再关闭 

  1. 新建类并继承Service且必须重写onBind()方法,有选择的重写onCreate()、onStartCommand()及onDestroy()方法。
  2. 在配置文件中进行注册。学到现在会发现,四大组件除了广播接收器可用动态注册,其他需要定义好组件之后都要完成在配置文件注册的这一步。

二、绑定模式

当我们第一次点击绑定服务时,LocalService服务端的onCreate()、onBind方法会依次被调用,此时客户端的ServiceConnection#onServiceConnected()被调用并返回 LocalBinder 对象,接着调用LocalBinder#getService方法返回myservice 实例对象,此时客户端便持有了myservice 的实例对象,也就可以任意调用myservice类中的声明公共方法了。更值得注意的是,我们多次调用bindService方法绑定LocalService服务端,而LocalService得onBind方法只调用了一次,那就是在第一次调用bindService时才会回调onBind方法。

关键点记录:

如何保证Service不被杀死

1.在Service的onStartCommand()中设置flages的值为START_STICKY,使服务被杀死后再次启动

2.提升服务的优先级,比如设置一个前台服务

3.在Activity销毁的时候发送广播,在广播接收器中再次启动服务。

前台服务和普通服务最大的区别是,前者会一直有一个正在运行的图标在系统的状态栏显示,下拉状态栏后可以看到更加详细的信息,非常类似于通知的效果。使用前台服务或者为了防止服务被回收掉,比如听歌,或者由于特殊的需求,比如实时天气状况。

详细理解如下地址:
关于Android Service真正的完全详解,你需要知道的一切_zejian的博客-CSDN博客_service

Android 面试题之Service(不断更新) - 简书

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值