Android Service知识梳理

网友投稿 870 2022-05-29

startService第一次启动会调用onCreate,onCreate只会在创建的时候调用一次,之后多次启动会多次调用onStartCommand。stopService会停止Service,多次调用stopService不会报错。

Android Service知识梳理

bindService第一次启动会依次调用onCreate->onBind->onServiceConnected。多次调用bindService, onBind和onServiceConnected都不会多次回调。多次调用unBindService会报错。

START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。

START_NOT_STICKY:“非粘性的”。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统不会自动重启该服务。

START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。

START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,但不保证服务被kill后一定能重启。

服务在其托管进程的主线程中运行的

开启服务的组件退出之后,服务还是可以在后台长期运行的。其他组件可以调用stopService(Intent)或者自身调用stopSelf停止

组件不能调用服务里面的方法

组件销毁后服务自动被销毁,如果一个Service被多个组件绑定,只有所有的组件被销毁这个服务才会销毁

组件可以调用服务里面的方法

同时调用stopService和unbindService才可以回调onDestory

都运行在主线程

使用Intent,onStartCommand时候传入的Intent

BroadcastReceiver,Service发送,Activity接收

接口回调

共享硬盘存储,共享内存

ServiceConnection

获取系统Service一般用getSystemService方法。常见的Service有

LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);

ActivityManagerService

PackageManagerService

WindowManagerService

不能。因为服务在其托管进程的主线程中运行,它既不创建自己的线程,也不在单独的进程中运行(除非另行指定)。它不可以做密集耗时的操作。如果非要做的话,可以启动一个新的线程来工作。

前台服务被认为是用户主动意识到的一种服务,因此在内存不足时,系统也不会考虑将其终止。 前台服务必须为状态栏提供通知,放在“正在进行”标题下方,这意味着除非服务停止或从前台移除,否则不能清除通知。

要请求让服务运行于前台,请调用 startForeground()。此方法采用两个参数:唯一标识通知的整型数和状态栏的 Notification

相互唤起,需要借助其他APP

service 相互使用广播唤起 (鸡肋)

和手机商合作 (最高效)

设置 service 等级,priority (鸡肋)

onStartCommand方法,返回 START_STICKY,内存充足的时候会重启 (鸡肋)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:请收!“互联网+”大学生创新创业大赛攻略宝典派送中
下一篇:jQuery二!!!
相关文章