【Android】 Service 知识点总结和运用

Service知识点总结

链接分享:https://www.open-open.com/lib/view/open1364094651062.html

Service:Android四大组件之一,通常不具有界面,用于运行后台程序

service不会自动创建线程,如果处理耗时的后台任务,需要创建线程使用,否则运行在主线程可能会出现ANR

创建service必须实现继承于service,并重载一些生命周期回调

Service启动方式

startService

一旦启动除非主动杀死service,否则会一直在后台运行,及时启动service的组件应用程序已经退出销毁。

通常通过此方法启动的service运行不会给启动的组件返回结果

只有调用自身的stopSelf()或者其他组件调用stopService()才会销毁,否则会一直运行

bindService

绑定的service可以进行和其他应用进行通讯,可以返回请求结果;或者进行IPC进程间通讯

绑定的service可以绑定多个组件,也可以同时启动、绑定service

绑定的service依赖绑定的组件应用程序,绑定的组件或应用程序全部退出后service会销毁

生命周期和绑定其组件的生命周期相同,只有绑定其组件销毁,service才会销毁

Service的生命周期

onCreate

创建Service实例时调用

在这里可以进行初始化一些参数

onDestroy

在service销毁之前调用

在这里可以释放一些资源

onStartCommand

采用startService()方法启动service会调用该回调,只调用一次

如果需要绑定service可以选择不重写该方法

有返回值,返回值决定了当系统杀死service的时候,service的启动方式:

1. START_STICKY :会使用空的intent重新创建service,并调用onStartCommand()方法,除非intent是一个pendingIntent。

适用于媒体播放器服务。

2. START_NOT_STICKY:不会重新创建service,除非传入的intent是一个pendingIntent。

3. START_REDELIVER_INTENT:会使用传入的intent重新创建service,并调用onStartCommand()方法。适用于一些活跃的工作服务,如下载文件等服务。

onBind

需要返回一个IBinder对象来支持客户端和服务端之间的通讯

Service必须重写的方法,如果采用startService()方式启动,则返回null即可

Service的使用方法

和其他四大组件相同,首先必须在AndroidManifest中定义声明Service

声明Service必须给出name属性即service的名称

可以声明IntentFilter供其他组件或者应用调用

如果希望service是私有的即只在本应用中使用将exported定义为false,并不声明任何IntentFilter即可。

startService

 

bindService

IntentService

由于Service默认在启动它的线程中启动,如果需要执行耗时操作需要自己创建线程来实现,此时可以选择IntentService来实现。

IntentService特点

使用IntentService时应该注意,只需要实现一个传入一个name的构造方法和onHandleIntent()即可,如果重写回调方法需要实现super来执行默认的逻辑

内部会创建一个工作线程来逐个处理耗时操作,无需关心多线程并发问题

在处理完所有的请求后,会自己调用stopSelf销毁自己,无需手动销毁

内部已经实现了Service的默认回调,如果不需要,无需重写onCreate()、onStartCommand()、onBind()、onDestroy()方法

onStartCommand()有默认实现,会处理传入的请求后传入onHandleIntent()

 

 

 

 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值