Service与线程(基础篇)
来源:互联网 发布:人工智能与公共安全 编辑:程序博客网 时间:2024/06/08 04:36
1、尽管Message的构造器是公开的,但是获取Message对象的最好方法是调用Message.obtain()或者Handler.obtainMessage(), 这样是从一个可回收对象池中获取Message对象。
2、最近学习了一下Android里面的Service的应用,在BindService部分小卡了一下,主要是开始没有彻底理解为什么要这么实现。
BindService和Started Service都是Service,有什么地方不一样呢:
1. Started Service中使用StartService()方法来进行方法的调用,此时调用者和服务之间没有联系,即使调用者退出了,服务依然在进行,这样很不好【onCreate()- >onStartCommand()->startService()->onDestroy()】,注意其中没有onStart(),主要是被onStartCommand()方法给取代了,onStart方法不推荐使用了。
2. BindService中使用bindService()方法来绑定服务,调用者和绑定者绑在一起,调用者一旦退出服务也就终止了【onCreate()->onBind()->onUnbind()->onDestroy()】。
3、解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发, 比如说, 你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作。如果此时需要一个耗时的操作,例如: 联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,,会收到Android系统的一个错误提示 "强制关闭". 这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,,Android主线程是线程不安全的,也就是说,更新UI只能在主线程中更新,子线程中操作是危险的. 这个时候,Handler就出现了.,来解决这个复杂的问题 , 由于Handler运行在主线程中(UI线程中), 它与子线程可以通过Message对象来传递数据, 这个时候,Handler就承担着接受子线程传过来的(子线程用sendMessage()方法传递Message对象,(里面包含数据) , 把这些消息放入主线程队列中,配合主线程进行更新UI。——是Handler运行在主线程中,另一个子线程调用sendMessage传递Message对象给Handler
handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程)——是子线程分发Runnable对象到主线程(UI线程),然后UI线程执行Runnable对象(其实就是由UI线程执行里面的一个函数,抽象点说,就是子线程不仅可以分发数据给主线程的Handler,也可以分发动作给主线程的Handler并由主线程来执行这个动作)
4、
Messenger:信使官方文档解释:它引用了一个Handler对象,以便others能够向它发送消息(使用mMessenger.send(Message msg)方法)。该类允许跨进程间基于Message的通信(即两个进程间可以通过Message进行通信),在服务端使用Handler创建一个Messenger,客户端持有这个Messenger就可以与服务端通信了。
以前我们使用Handler+Message的方式进行通信,都是在同一个进程中,从线程持有一个主线程的Handler对象,并向主线程发送消息。
而Android既然可以使用bindler机制进行跨进程通信,所以我们当然可以将Handler与bindler结合起来进行跨进程发送消息。查看API就可以发现,Messenger就是这种方式的实现
- Service与线程(基础篇)
- 基础篇(十六) Service和子线程
- 基础篇(十三) Activity,Service,子线程 通信
- android中service与线程
- Android-Service通知与线程
- Service与线程的关系
- Service基础Activity与Service绑定
- 基础篇——网络与线程
- LoadRunner之基础-进程与线程篇
- Java基础之多线程与并发篇
- 基础篇-Service解析
- Service基础篇
- 关于android中service与线程
- Service与线程和进程的关系
- android service与子线程之浅谈
- Android Service介绍(Service与线程关系)
- 线程、多线程与线程池基础
- android基础--handler与线程
- 弹出框 weeboxs 使用教程
- java网络编程UDP
- 查询,删除表中重复的记录
- 1~n,1出现的次数
- 触发器、存储结构和索引知识
- Service与线程(基础篇)
- 安全测试工具
- 开源代码网站
- 架构师
- rhel6.0 配置本地yum源
- Eclipse完美汉化教程
- dedecms网页模板编写介绍
- 单片机流水灯的C原理
- 人力资源管理