位置: 编程技术 - 正文

Android的进程回收机制(android 进程启动流程)

编辑:rootadmin

推荐整理分享Android的进程回收机制(android 进程启动流程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android 进程启动流程,android 进程管理器,android进程状态,android 进程管理,android 进程启动流程,android进程状态,android系统进程,android进程状态,内容如对您有帮助,希望把文章链接给更多的朋友!

Android的进程回收机制(android 进程启动流程)

来源: 什么时候回收与回收哪一个2)避免误杀: 如何阻止被回收3)数据恢复与保存: 被回收了怎么办 Android将进程分为6个等级,它们按优先级顺序由高到低依次是:1.前台进程( FOREGROUND_APP)2.可视进程(VISIBLE_APP )3.次要服务进程(SECONDARY_SERVER )4.后台进程 (HIDDEN_APP)5.内容供应节点(CONTENT_PROVIDER)6.空进程(EMPTY_APP) 特征:1.如果一个进程里面同时包含service和可视的activity,那么这个进程应该归于可视进程,而不是service进程.2.另外,如果其他进程依赖于它的话,一个进程的等级可以提高.例如,一个A进程里的service被绑定到B进程里的组件上,进程A将总被认为至少和B进程一样重要.3.系统中的phone服务被划分到前台进程而不是次要服务进程. 在Android中以进程的oom_adj&#;也就代表了它的优先级.oom_adj&#;越高代表该进程优先级越低. Init.rc中:• setprop ro.FOREGROUND_APP_ADJ 0• setprop ro.VISIBLE_APP_ADJ 1• setprop ro.SECONDARY_SERVER_ADJ 2• setprop ro.HIDDEN_APP_MIN_ADJ 7• setprop ro.CONTENT_PROVIDER_ADJ • setprop ro.EMPTY_APP_ADJ Init.rc中,将PID为1的进程(init进程)的oom_adj设置为-:查看本机设置:cat /sys/module/lowmemorykiller/parameters/adj0,1,2,7,, 回收时机:Init.rc中:•setprop ro.FOREGROUND_APP_MEM •setprop ro.VISIBLE_APP_MEM •setprop ro.SECONDARY_SERVER_MEM •setprop ro.HIDDEN_APP_MEM •setprop ro.CONTENT_PROVIDER_MEM •setprop ro.EMPTY_APP_MEM 这些数字也就是对应的内存阈&#;,一旦低于该&#;,Android便开始按顺序关闭相应的进程。注意这些数字的单位是page,1 page = 4KB.上面的六个数字对应的就是(MB): 6,8,,,, 查看现在的设置可以:cat /sys/module/lowmemorykiller/parameters/minfree要想重新设置该&#;(对应不同的需求):echo ",,,,,">/sys/module/lowmemorykiller/parameters/minfree这样当可用内存低于MB的时候便开始结束空进程,而当可用内存低于MB的时候才开始结束内容供应节点. 具体的回收实现在ActivityManagerService.java中的函数trimApplications()1.首先移除package被移走的无用进程.2.基于进程当前状态,更新oom_adj&#;,然后进行以下操作. 1)移除没有activity在运行的进程 2)如果AP已经保存了所有的activity状态,结束这个AP.3.最后,如果目前还是有很多activities 在运行,那么移除那些activity状态已经保存好的activity. 更新oom_adj的&#;: 在ComputeOomAdjLocked中计算出进程的oom_adj,例如:if (app == TOP_APP) { // The last app on the list is the foreground app. adj = FOREGROUND_APP_ADJ; app.adjType = "top-activity";} Android kernel中的low memory killerAndroid的Low Memory Killer根据需要(当系统内存短缺时)杀死进程释放其内存,源代码在kernel/drivers/misc/lowmemorykiller.c简单说就是寻找一个最合适的进程杀死,从而释放它占用的内存.最合适:•oom_adj越大•占用物理内存越多 一旦一个进程被选中,内核会发送SIGKILL信号将之杀死.for_each_process(p) { …… if(selected == NULL || p->oomkilladj > selected->oomkilladj || (p->oomkilladj == selected->oomkilladj && tasksize > selected_tasksize)) { selected = p; }}if(selected != NULL) { force_sig(SIGKILL, selected);} 查看LRU列表:Adb shell dumpsys activity当activitydemo在前台时: 包含Service的进程的优先级比较高,在computeOomAdjLocked中将其分为了两小类:static final int MAX_SERVICE_INACTIVITY = **; if (now < (s.lastActivity&#;MAX_SERVICE_INACTIVITY)) { if (adj > SECONDARY_SERVER_ADJ) { adj = SECONDARY_SERVER_ADJ; app.adjType = "started-services"; app.hidden = false; } } if (adj > SECONDARY_SERVER_ADJ) { app.adjType = "started-bg-services"; }} 完全让进程不被kill是不可能的,我们可以通过一些操作使进程被kill的几率变小:1.提高进程的优先级:后台操作采用Service形式,因为一个运行着service的进程比一个运行着后台activity的等级高。1)按back键使得进程中的activity在后台运行而不是destory,需重载back按键(没有任何activity在运行的进程优先被杀).2)依赖于其他优先级高的进程. 强制修改进程属性:•在程序中设置setPersistent(true);•在project的AndroidManifest.xml的<application>中加入属性android:persistent="true"android:persistent(SDK) Whether or not the application should remain running at all times . The default value is "false". Applications should not normally set this flag; persistence mode is intended only for certain systemapplications(phone,system). 1.使用killProcess (int pid)可以杀死指定PID的进程public void onClick(View v) { android.os.Process.killProcess(android.os.Process.myPid());}使用System.exit(0);可以达到同样的效果. 2.使用finish()可以杀死当前的activity 1. 保存资料:最好在每次Activity 运行到onPause或onStop状态时先保存资料,然后在onCreate时将资料读出来(生命周期方法).2. OnSaveInstanceState(非生命周期方法)onRestoreInstanceState

Android SimpleAdapter 1.MainActivity.javapublicclassMainActivityextendsActivity{privateListViewlistView;privateSimpleAdaptersimp_adapter;privateListMapString,ObjectdataList;@OverrideprotectedvoidonCreate(BundlesavedInstanc

adb 命令 直接把日志存到text文件中 adb命令直接把日志存到text文件中adblogcat-vtimepay.log就可以吧日志存到pay.log中

Android打包之bat脚本打包 Android打包可以使用eclipse直接打包,而eclipse打包其实是对一系打包命令的执行。既然是执行命令,那么命令行也同样可以胜任,所以有了bat脚本打包。

标签: android 进程启动流程

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

上一篇:Android实战简易教程-第十五枪(实现ListView中Button点击事件监听)(android实战项目)

下一篇:Android SimpleAdapter

  • 进入税金及附加怎么算
  • 个人所得税汇算表
  • 海关对哪些物品有出入境的限制规定
  • 广州二手房交易契税
  • 我国会计准则规定,会计核算以人民币为记账本位币
  • 居民转供电收费标准
  • 定额发票怎么验证真伪
  • 减免税金需要计提吗
  • 资产重组账务处理 会计视野
  • 个体工商户增值税怎么计算
  • 通行费电子增值税怎么算
  • 税控系统技术维护费抵税怎么申报
  • 事业单位开办费账务处理
  • 软件分几次开票怎么入账
  • 补交以前年度房产税如何记账
  • 上年度的印花税怎么计算
  • 递延收益摊销包含哪些
  • 员工预借差旅费属于什么科目
  • 新税法下广告费计税依据
  • 前期差错更正处理方法
  • 营改增后自产产品用于在建工程
  • 出现一窗式比对失败,该纳税人没有防伪税控比对信息!
  • 税务局的网站以后有这些变化是你不知道的!
  • 购买国债兑现时要交税吗
  • 单位的审计
  • 出售固定资产账务如何处理
  • 应税劳务、服务清单
  • 安装设备领用原材料应该用成本还是公允
  • 社保滞纳利息所得税前扣除
  • 政府收储土地补偿款账务处理
  • 公司利润为负数 贷款
  • 财政拨款结转的明细科目中,年末结转后有余额的是
  • 提取的坏账准备使用完后如何处理
  • 关于固定资产抵扣的税务规定
  • 详解php实现执行任务
  • 带息应收票据会计处理,到期
  • laravel sqlserver
  • php 图片上传
  • 折旧和摊销的区别通俗
  • 快递行业规矩
  • photo-sphere-viewer中文文档
  • react组件定义
  • 购买土地需要缴纳增值税吗
  • 充电桩折旧年限是多少年
  • css媒体查询不起作用
  • 帝国cms如何使用
  • 财务上大写数字420.1怎么写
  • 员工实际工资
  • 自然人独资和个人独资是一样的吗
  • 期初和期末余额是什么意思
  • 即征即退相关证明材料
  • mssqlserver数据能删吗
  • 固定资产一次性扣除账务处理
  • 企业哪些行为是违法的
  • 可抵扣进项税有哪些项目
  • 为什么要办理外地身份证
  • 税局代开的专票能作废或红冲吗?
  • 增值税出口退税款缴纳企业所得税吗
  • 多计提的税费怎么处理
  • 本月工资未发个税能不能扣
  • 费用报销票据规范要求
  • 生育保险基金的筹集原则是
  • 返利开红字发票怎么做账
  • 购买材料如何计提折旧
  • 库存现金的主要内容有哪些
  • 其他流动资产为什么包括应交增值税
  • 本地hosts文件存在问题
  • cocos2dx4.0教程
  • unity3d地图定位
  • opengl extension
  • 圆形图表分析怎么做
  • centos 安装完成后无法启动
  • Android之fill_parent和wrap_content
  • 增值税预缴税款在主表怎么填写
  • 外地经营预缴企业所得税
  • 增值税征税范围口诀
  • 浙江个体户开票软件
  • 小微企业契税政策
  • 国税局内设机构
  • 留抵税额退税政策2023
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设