位置: 编程技术 - 正文

Android 进程与线程(android 进程通信)

编辑:rootadmin

推荐整理分享Android 进程与线程(android 进程通信),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android 线程状态,android进程间传递数据,android 线程状态,android进程间传递数据,android进程管理机制,android进程管理机制,android进程和线程的区别,android进程和线程的区别,内容如对您有帮助,希望把文章链接给更多的朋友!

进程

在Android中,整体的<application>(将影响其中各个组件...)和底下各个组件,都可以设置<process>属性,相同<process>属性的组件将扔到同一个进程中运行。最常见的使用场景,是通过配置<application>的process属性,将不同的相关应用,塞进一个进程,使得它们可以同生共死。还有就是将经常和某个Service组件进行通信的组件,放入同一个进程,因为与Service通信是个密集操作,走的是RPC,开销不小,通过配置,可以变成进程内的直接引用,消耗颇小。

Android进程共分为五类优先级,分别是:Foreground Process, Visible Process, Service Process, Background Process, Empty Process。顾名思义不难看出,这说明,越和用户操作紧密相连的,越是正与用户交互的,优先级越高,越难被回收。

Android 进程与线程(android 进程通信)

线程 读取数据,后台处理,这些猥琐的伙计,自然少不了线程的参与。在Android核心的调度层面,是不屑于考量线程的,它关注的只有进程,每一个组件的构造和处理,都是在进程的主线程上做的,这样可以保证逻辑的足够简单。

多线程,往往都是开发人员需要做的。

Android的线程,也是通过派生Java的Thread对象,实现Run方法来实现的。但当用户需要跑一个具有消息循环的线程的时候,Android有更好的支持,来自于Handler和Looper。Handler做的是消息的传送和分发,派生其handleMessage函数,可以处理各种收到的消息,和win开发无异。Looper的任务,则是构造循环,等候退出或其他消息的来临。在Looper的SDK页面,有一个消息循环线程实现的标准范例,当然,更为标准的方式也许是构造一个HandlerThread线程,将它的Looper传递给Handler。 在Android中,Content Provider的使用,往往和线程挂钩,谁让它和数据相关呢。在前面提到过,Content Provider为了保持更多的灵活性,本身只提供了同步调用的接口,而由于异步对Content Provider进行增删改查是一个常做操作,Android通过AsyncQueryHandler对象,提供了异步接口。这是一个Handler的子类,开发人员可以调用startXXX方法发起操作,通过派生onXXXComplete方法,等待执行完毕后的回调,从而完成整个异步调用的流程,十分的简约明了。

实现整个任务、进程管理的核心实现,尽在ActivityManagerService中。上一篇说到,Intent解析,就是这个ActivityManagerService来负责的,其实,它是一个很名不副实的类,因为虽然名为Activity的Manager Service,但它管辖的范围,不只是Activity,还有其他三类组件,和它们所在的进程。在ActivityManagerService中,有两类数据结构最为醒目,一个是ArrayList,另一个是HashMap。ActivityManagerService有大量的ArrayList,每一个组件,会有多个ArrayList来分状态存放。调度工作,往往就是从一个ArrayList里面拿出来,找个方法调一调,然后扔到另一个ArrayList里面去,当这个组件没对应的ArrayList放着的时候,说明它离死不远了。HashMap,是因为有组件是需要用名字或Intent信息做定位的,比如Content Provider,它的查找,都是依据Uri,有了HashMap,一切都顺理成章了。ActivityManagerService用一些名曰xxxRecord的数据结构,来表达各个存活的组件。于是就有了,HistoryRecord(保存Activity信息的,之所以叫History,是相对Task栈而言的...),ServiceRecord,BroadcastRecord,ContentProviderRecord,TaskRecord,ProcessRecord,等等。&#;得注意的,是TaskRecord,我们一直再说,Task栈这样的概念,其实,真实的底层,并不会在TaskRecord中,维系一个Activity的栈。在ActivityManagerService中,各个任务的Activity,都以HistoryRecord的形式,集中存放在一个ArrayList中,每个HistoryRecord,会存放它所在TaskRecord的引用。当有一个Activity,执行完成,从概念上的Task栈中退出,Android是通过从当前HistoryRecord位置往前扫描同一个TaskRecord的HistoryRecord来完成的。这个设计,使得上层很多看上去逻辑很复杂的Task体系,在实现变得很统一而简明,&#;得称道。ProcessRecord,是整个进程托管实现的核心,它存放有运行在这个进程上,所有组件的信息,根据这些信息,系统有一整套的算法来决议如何处置这个进程,如果对回收算法感兴趣,可以从ActivityManagerService的trimApplications函数入手来看。对于开发者来说,去了解这部分实现,主要是可以帮助理解整个进程和任务的概念,如果觉得这块理解的清晰了,就不用去碰ActivityManagerService这个庞然大物了。参考网址:

实现Android 动态加载APK(Fragment or Activity实现) 尊重原创:

彻底解决Android 应用方法数不能超过K的问题 尊重原创:

Android中的子菜单(SubMenu)使用案例 Android中创建子菜单的步骤:1、覆盖Activity中的onCreateOptionMenu()方法,调用Menu的addSubMenu()方法添加子菜单。2、调用SubMenu的add方法,添加子菜单。3、覆盖o

标签: android 进程通信

本文链接地址:https://www.jiuchutong.com/biancheng/384276.html 转载请保留说明!

上一篇:Android开发:SurfaceView基本用法总结及开发问题分享(Android开发工具箱)

下一篇:实现Android 动态加载APK(Fragment or Activity实现)(android 动态化方案)

  • 企业办理纳税手续需要带什么材料
  • 企业电子发票申请不成功原因
  • 汇算清缴调表不调账调的是哪张表
  • 计提的成本次月怎么处理
  • 应付债券利息调整是什么意思
  • 拓展费税收分类编码
  • 扣缴义务人怎么删除
  • 税控盘丢失需要罚款吗
  • 非房地产企业销售不动产增值税计算
  • 员工工资薪金会计如何核算?
  • 审计范围包括什么内容
  • 外币折算会计处理例题
  • 个人缴纳物业费怎么开发票
  • 技术转让税收优惠政策500万
  • 增值税发票收款人和复核人可以一个人吗
  • 企业出售房产的账务处理
  • 与军队发生业务应该取得哪种发票?
  • 无票收入确认收入
  • 进项大于销额如何处理账务处理?
  • win11更新22468
  • win11版本22000.194
  • linux输出结果
  • 企业票据贴现费怎么算
  • 数据库olap
  • PHP:pcntl_wifsignaled()的用法_PCNTL函数
  • 马尼亚岛的降水特点
  • 用chatgpt写insar地质灾害的论文,重复率只有1.8%,chatgpt4.0写论文不是梦
  • vue3动态路由权限
  • 关基系统防SSL证书断供,知道创宇“包办式”国密改造方案省心又安全
  • vue中解决跨域问题
  • “php”
  • wordpress修改数据库
  • 可供出售金融资产是流动资产吗
  • 退回上年度企业所得税小规模怎么做分录
  • 租赁办公场所的法律规定
  • 小规模纳税人防水工程专用发票税率是多少
  • MySQL ERROR 2013 (HY000)错误解决方法
  • 低值易耗品摊销方法有几种
  • 小规模以前年度城建税未计提
  • 银行承兑汇票贴现的账务处理
  • 建设单位支付给施工单位的民工工资
  • 承兑汇票兑现怎么填写
  • 收到政府的奖励企业需要纳税吗?
  • 如何理解什么是半殖民地半封建社会
  • 手机属于固定资产吗
  • 根据企业会计准则第11号规定,下列关于等待期
  • 企业什么情形必须签无固定期限合同
  • 房地产企业发行长期债券的增信方式有哪些
  • 私营公司应付工资的规定
  • 加工企业三种商业模式
  • MySQL中interactive_timeout和wait_timeout的区别
  • MySql 5.6.35 winx64 安装详细教程
  • Fedora 21顶栏日期显示不全的解决方法
  • windows无法启动wlanautoconfig
  • windows vista如何安装
  • linux多线程并发的处理方式
  • win7电脑频繁自动重启是什么原因造成的
  • win8无法完成更新正在撤销更改怎么办
  • win10系统如何关闭窗口特效
  • 怎么关闭windows登录密码
  • xp桌面图标设置
  • w8系统文件夹怎么设置密码
  • win8.1怎么设置
  • win10本地连接怎么改名称
  • win8系统修复在哪里
  • cocos2d rpg
  • Cocos2dx3.2 Crazy Tetris 由于遮罩引起的部分手机白屏
  • 安卓优化清理大师怎么样
  • unity3d动画系统
  • javascript构成
  • fragment中嵌套fragment
  • js中的函数怎么使用
  • android 监听事件
  • js获取上传文件的大小
  • 办理税控盘的流程
  • 维修基金交了多少钱怎么查
  • 上饶市税务局咨询电话
  • 公司购买车辆是什么费用
  • 城镇土地使用税的计算公式
  • 杭州注册公司需要钱吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设