| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Service -> 正文阅读 |
|
[移动开发]Service |
目录 4.2Service通过BroadCast广播与Activity通信 1.service两种启动方式
startService
onCreate() -> onStartCommand() -> onDestroy()
bindService
onCreate() -> onbind() -> onUnbind()-> onDestroy()
应用场景:
2.区别2.1启动
startService:如果服务已经开启,多次执行startService
不会重复的执行
onCreate()
, 而是会调用
onStart()
和 onStartCommand()。
bindService:如果服务已经开启,多次执行bindService时
,onCreate
和
onBind
方法并不会被多次调用
2.2销毁
startService:当执行stopService
时,直接调用
onDestroy
方法
bindService:调用者调用unbindService
方法或者调用者
Context
不存在了(如
Activity
被
fifinish
了),
Service
就会调用
onUnbind- >onDestroy
2.3生命周期
使用
startService()
方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。
使用
bindService()
方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止。
3.Service生命周期方法
1
、单独使用
startService & stopService
(1)第一次调用
startService
会执行
onCreate
、
onStartCommand
。
(2)之后再多次调用
startService
只执行
onStartCommand
,不再执行
onCreate
。
(3)调用
stopService
会执行
onDestroy
。
2
、单独使用
bindService & unbindService
(1)第一次调用
bindService
会执行
onCreate
、
onBind
。
(2)之后再多次调用
bindService
不会再执行
onCreate
和
onBind
。
(3)调用
unbindService
会执行
onUnbind
、
onDestroy
。
4.Service与Activity怎么实现通信4.1通过Binder对象
1.Service
中添加一个继承
Binder
的内部类,并添加相应的逻辑方法
2.Service
中重写
Service
的
onBind
方法,返回我们刚刚定义的那个内部类实例
3.Activity
中绑定服务
,
重写
ServiceConnection
,
onServiceConnected
时返回的
IBinder
(
Service
中的
binder
)调用逻辑方法
MyService:
在activity中绑定Service:
4.2Service通过BroadCast广播与Activity通信5.IntentService5.1是什么?
IntentService
是
Service
的子类,默认开启了一个工作线程
HandlerThread
,使用这个工作线程逐一处理所有启动请求,在任务执行完毕后会自动停止服务。只要实现一个方法 onHandleIntent
,该方法会接收每个启动请求的Intent,能够执行后台工作和耗时操作。
可以启动
IntentService
多次,而每一个耗时操作会以队列的方式在
IntentService
onHandlerIntent
回调方法中 执行,并且,每一次只会执行一个工作线程,执行完第一个再执行第二个。并且等待所有消息都执行完后才终止服务。
5.2怎么用?
1.
创建一个名叫
ServiceHandler
的内部
Handler
2.
把内部
Handler
与
HandlerThread
所对应的子线程进行绑定
3.HandlerThread
开启线程 创建自己的
looper
4.
通过
onStartCommand() intent
,依次插入到工作队列中,并发送给
onHandleIntent()
逐个处理
5.3应用场景
可以用作后台下载任务 静默上传
5.4为什么用?与Service区别
IntentService
会创建独立的
worker
线程来处理所有的
Intent
请求
Service
主线程不能处理耗时操作,
IntentService
不会阻塞
UI
线程,而普通
Serveice
会导致
ANR
异常。
为
Service
的
onBind()
提供默认实现,返回
null
;
onStartCommand
提供默认实现,将请求
Intent
添加到队列中。
所有请求处理完成后,
IntentService
会自动停止,无需调用
stopSelf()
方法停止
Service
。
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 4:38:57- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |