android GUI线程安全
16lz
2021-01-23
阅读更多
Activity:运行于主线程。因Android的GUI是非线程安全的,所有界面相关操作必须在主线程中完成,又因为即时响应的需要,主线程中不能进行耗时长的操作,如果有些操作既耗时又需要操作界面,就用消息机制吧。开子线程处理耗时操作,需要操作界面时给主线程发消息,把界面操作限制在主线程中。好在Android的消息机制还是相当方便的。
Service:服务本体运行于主线程,但响应函数(就是onBind返回的对象的接口啦)就复杂了。如果跟客户在同一个进程的话,就直接在客户的线程中运行,否则就从服务所在进程维护的线程池里取出一个线程来运行,如果同时有多个进程请求服务的话,就同时产生多个线程来响应。所以,想要提供给别人使用的服务必须做成线程安全的,否则就不要提供第三方使用的接口好啦,免得别人自做多情。
Content provider:跟服务相似。不过数据提供者的响应函数是固定的:
, query()
, insert()
, delete()
, and update()
。数据库应该是安全的,自己做的就要加倍小心啦。getType()
Broadcast receiver:运行于主线程。它就一个方法,运行时跟当前Activity一样,优先级超高,是不能被杀死的,但方法一返回,就打入冷宫,随时可能被害,即便它运行时派生了子线程也不能母凭子贵,母子双双被害,更是人间惨剧。所以receiver中通常启动服务来做耗时的后台操作,启动Activity或任务栏通知来做界面响应。
更多相关文章
- Android:Thread & Handler 线程 消息循环
- 阿里Android开发规范:进程、线程与消息通信
- Android中的线程池与任务队列
- Android下的多线程
- Android数据库事务操作
- Android 是Google开发的基于Linux平台的开源手机操作系统
- Android Training - 网络操作(3) - 解析XML数据
- Handler解析(一):是如何实现线程之间的切换