android service

目录:

导图

 

android service

1作用: service 是服务(类似守护进程).它不需要界面,在后台执行耗时的操作.比如:download 文件,数据库操作.
Service的执行与后台线程方式极大不同,Service只是一种代码逻辑的抽象,实际上它还是运行在Activity同一线程上下文环境
activity and service 关系?
它们运行在同一个进程,如果结束当前activity所在进程,service也同样会结束,因此他们两个是运行在同一个进程中的.
activity是运行在主线程中的
service 在子线程中执行耗时操作。
service 在同一个进程,但是不同的线程.
service分类:前台和后台.就是后台无界面的进程,比如:download文件。
也有前台的,比如notify service 

2 使用 and 生命周期
第一次&其他次
Service的生命周期很简单,分别为onCreate、onStartCommand、onDestroy这三个。
第一次创建Service会回调onCreate()方法,然后回调onStartCommand()方法。
再次startService()的时候,就只会执行onStartCommand(),不会执行onCreate。

通过startService(Intent service)可以启动一个Service,
通过Context.bindService()可以绑定一个Service。
https://www.cnblogs.com/wxishang1991/p/5225219.html

bindService and startservice 区别?
start service and bind service 作用和关系?
http://bbs.raindi.net/thread-4447-1-1.html
startService 只能开启service,但却无法操作service.调用者退出后,service仍然存在。
bindService 除了bind service,还能操作service。调用者退出,service随着调用者退出而销毁.

addservice,getService()与startservice,bindService区别?
https://blog.****.net/weixin_38451161/article/details/88639014
SystemServer 进程启动系统服务有两种方式,分别是 SystemServiceManager 的startService 方式和 ServiceManager 的 addService 方式
getService 获取service,然后才能bindService
但与aidl不同之处在于,
aidl可以通过bindService()来启动一个Service并与之建立binder通信,
然后就可以在onServiceConnected()里取回这个Service的IBinder引用。
remote service 通信:指app和service manager中的service.
现的一个Remote Service,也就是SystemService,
在它启动时会调用add_service()函数将自己加入到servicemanager的svcinfo链表里,
然后进入休眠。虽然大部分情况下,我们都是使用Java来实现System Service,
但由于在实现上是Java端发送Binder命令,Native端实现的servicemanager进程来接收并处理Binder命令,于是本质上是一回事。

两种service实现:
android service

3 intent  Service and service 区别?
service在主线程,耗时的处理有两种方法:一个是service中建立线程一个是用intent service 
intentService的原理handle机制是onCreate 建立handlemessage 接收处理线程, onStart的时候sendmsg intent 
service是主线程,intentService是子线程,处理耗时操作。
通过service 获取 manager,通过manager做什么你呢??

5 通信:activity之间通信,碎片之间通信,activity和service通信,service之间通信,Intent是UI之间
Activity与Service之间交互(通过Binder对象和广播):底层是binder

activity本质是对象。intent在activity通信是对象通信。
进程通信activity和service 用binder。activity和service 分别是什么进程??
不同app通信是aidl

other:文件下载,读取诸如此类的耗时操作放到子线程中去进行,等到子线程耗时操作完成时通知UI界面做出响应.
不要在生命周期方法如onCreate()中进行下载这些大事件
不要在子线程中更新UI界面,这样会导致android系统报错、应用崩溃退出。

android service

addService-getService-bindService-aidl通信

android service

bindService 整体流程

android service

bindService流程