位置: 编程技术 - 正文

Android 中的线程调度(android线程状态)

编辑:rootadmin

推荐整理分享Android 中的线程调度(android线程状态),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:android线程状态,安卓 线程,android 线程池使用,android 工作线程,android线程间通信的几种方法,android 工作线程,android 线程池原理,安卓中线程的作用,内容如对您有帮助,希望把文章链接给更多的朋友!

ZZ: Android 中的线程是如何调度的,并通过设置线程优先级来优化 APP-UI,使其流畅运行。

线程调度听起来很学术,是操作系统中的概念:线程调度决定系统中不同线程运行,运行时间,何时运行。Android 中的线程调度很操作系统中的线程调度类&#;,主要使用 nice 和 cgroups 这两个变量来调度线程(本质上来说还是通过设置线程优先级,让 Linux 内核有依据的分配线程运行)。

Nice

我们这里的 Nice 与 Linux Kernel 的进程完全公平调度器(CFS)类&#;但是不一样(本质上,在创建线程的时候这个 Nice &#;最终还是要传递给底层的,跟 Linux Kernel 中的 nice 是相同的)。Java 层

Nice 在 Android 中是衡量线程优先级的重要参考指标;nice &#;越大,线程优先级越低,反之越高;其中两个重要的线程优先级属性参数是,default 和 background, 对于 Android App,线程要做大量耗时工作,其优先级应该越低,否则系统有卡死的风险,反之,线程做的工作不多,应该设置其优先级较高。所以关于交互界面的线程(如 UI 线程等前台线程)会给default 或更高的优先级,而后台线程(如执行 AsyncTask 的线程)的线程属性为background。

Android 中的线程调度(android线程状态)

Nice 这种特性可以让后台工作线程尽量少抢占前台线程的时间片(从OS来说),从而保证了用户界面的流畅性。实际上,仍有一种可能使 UI 卡死,例如有个后台线程,但是只有1个 UI 进程,这个后台线程可能占据了很大的计算资源,导致 UI 线程得不到及时运行,导致卡顿、掉帧;为了防止这种情况发生, Android 提出了cgroups,用来解决类&#;的问题。

Cgroups

为了解决上述问题,Android 将前台线程和后台线程分开运行,即利用Linux的 cgroups 给前台线程建一个群,给后台线程建一个群,然后调度器在这两个群中跑,这样不管后台线程有多少,调度器总能照顾到前台线程的运行;所以用户体验得到了保证。

如何区分前台进程和后台进程的 cgroup?

Android 会自动将没有在前台进程 cgroup 运行的线程都放到后台进程的 cgroup 中,这就保证了不管开多少线程,只会将其分为两个 Group,前台 cgroup 和后台 cgroup;理论上,不管多少非前台线程运行,Android都能保证前台线程的运行。

设置线程属性

一般来说,Android API 将常用工作线程的优先级设置好了。例如,HandlerThread 的代码第行,将线程优先级设置为Process.THREAD_PRIORITY_DEFAULT;AsyncTask 代码第行,将线程优先级设置为Process.THREAD_PRIORITY_BACKGROUND。再比如音乐播放的线程设置为THREAD_PRIORITY_AUDIO,Android API 将常用情况都做了详细的分类。

需要铭记于心的是,在 UI 主线程实例化的线程或线程池,都会继承 default 或 foreground属性(因为 UI 线程就是这个属性,子线程会继承父线程的属性),所以如果大量类&#;工作线程存在于前台进程的 cgroup 中话,可能会使 UI 变得非常不流畅。若是工作线程,建议在运行前通过Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND) 直接设置线程的属性。

Android入门:Intent入门 一、Intent与Activity应用0.创建新的Activity步骤在应用中创建新的Acitivity很常见;步骤1:创建一个class继承Activity步骤2:在Android-manifest.xml中添加activity元素

Android取消标题栏&强制设置横(竖)屏方法 一、Android取消标题栏方法1.效果演示2.实现方法(1)将自定义Activity继承于Activity而不是ActionActivity;(2)在Activity的onCreate方法中的setContentView(myview)调用之前

[安卓]手机管家(七)防盗之左右划屏 下面来实现通过左右滑动来切换页面第一步是切换画面,通常来说,在滑动过程中,会有一部分页面进入当前的activity比如1向左平移出去,2从右边平移

标签: android线程状态

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

上一篇:androidの监听EditView中的文本TextWatcher(监听state)

下一篇:Android入门:Intent入门(android入门基础知识)

  • 组成计税价应该是含税价还是不含税价?
  • 预缴增值税的会计账务处理
  • 增值税纳税申报表附列资料(三)
  • 研发设备可以一次性扣除吗
  • 劳务公司收到劳务费怎么做账
  • 自产自用应税消费品的消费税,其纳税环节
  • 同产品不同单价能相加开票吗
  • 增值发票盖章有什么用
  • 一般纳税人收入会计分录
  • 租办公室还要交什么税
  • 转移性支付收入是什么
  • 调低社保基数怎么操作
  • 预交了一个季度的社保
  • 增值税进项大于销项,要全部认证吗
  • 出口退税生产企业增值税附加税怎么申报
  • 装修改造增值税税率
  • 帮对方公司垫付违法吗
  • 亏损企业所得税汇算清缴怎么做
  • 银行没有流水怎么开证明
  • 机票改签费要开发票吗
  • 开票需要对方提供营业执照吗
  • 出纳电汇流程
  • 土地转让应交税费
  • 个人其他应收款在贷方表示什么
  • 已经认证的发票怎么冲红
  • 收到政府补贴的装修款
  • php常用的优化方式
  • php 7z
  • 家庭版系统如何重装成专业版本
  • 孕妇能吃桂圆吗有什么好处
  • 垫资计入什么会计科目
  • cmdkill进程
  • php图片叠加
  • php的get
  • 付临时工资怎么入账
  • 固定资产非正常损失进项税
  • 逾期未收回包装物押金增值税怎么算
  • 金融企业计提资产减值准备是根据会计核算的
  • 企业研发费用加计扣除最新政策
  • chatGPT背后的真正逻辑
  • vite 配置
  • 在建工程完成后转入什么科目
  • Pytorch深度学习实战3-5:详解计算图与自动微分机(附实例)
  • 交易性金融资产入账价值怎么计算
  • 员工休产假不发工资违法吗
  • 经营性现金流减利息
  • 其他应收款个人挂账很大该怎么处理
  • 社会团体费用报销制度
  • 租厂房需要去缴房产税吗
  • 长期股权投资成本法转权益法的处理
  • 申报抵扣了不做账怎么处理?
  • 承兑汇票到期取现手续费
  • 进货时的运费计入什么
  • 税金及附加科目核算
  • 主营业务成本带二级科目吗
  • 企业重组合并
  • 数量金额式明细账余额怎么填
  • 要交多少税收跟什么有关
  • 销售费用变动率是看本期还是本年累计
  • mysql5.5改密码
  • windows进程数
  • ubuntu20.04.2
  • avserve2.exe是什么东东
  • vrvrf.exe是什么进程
  • 如何将win10系统从c盘迁移到d盘
  • windows隐藏分区
  • win7旗舰版升级win10
  • cocos lua教程
  • Unity3D游戏开发标准教程吴亚峰于复兴人民邮电出版社
  • nodejs实例教程
  • js判断输入用户名是否正确
  • shell编程总结
  • unity小游戏代码
  • 实例分析法名词解释
  • android设计模式单例有几种
  • 江西税务局官网登录
  • 出口退税应退税额未发生变化 骗税
  • 小规模纳税人可以用专票抵扣税吗
  • 税务师报考条件和时间2021湖北
  • 个体工商户自己开普票流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设