android提高优先级
‘壹’ android 中 自己写的activity 的优先级怎么才能大于系统的 譬如来电 自己已经获取号码并写了一个activity
Android中,Activity的级别永完都没有来电这么高级别,因为手机最主要的功能,还是用来通话。
关于Android中的进程级别:
1、foreground process
正处于activity resume状态
正处于bound服务交互的状态
正处于服务在前台运行的状态(StartForeGround()被调用)
Service生命周期正在被执行(onCreate(),onStart(),onDestroy())
BroadcastReceiver正在执行onReceive()方法
杀死foreground需要用户响应,因为这个安全优先级是最高的
是用户操作所必须的,任一时间下,仅有少数进程会处于前台,仅当内存实在无法供给它们维持同时运行时才会被杀死。一般来说,在这种情况下,设备依然处于使用虚拟内存的状态,必须要杀死一些前台进程以用户界面保持响应。
•Android会依据进程中当前活跃组件的重要程度来尽可能高的估量一个进程的级别。比如说,如果一个进程中同时有一个服务和一个可视的activity,则进程会被判定为可视进程,而不是服务进程。
2、visible process
activity不在前端显示,但也没有完全隐藏,能够看得见,比如弹出一个对话框
一个bound到visible或者foreground的activity的service
没有前台组件,但仍可被用户在屏幕上所见。当满足如下任一条件时,进程被认为是可视的:
• 它包含着一个不在前台,但仍然为用户可见的activity(它的onPause()方法被调用)。这种情况可能出现在以下情况:比如说,前台activity是一个对话框,而之前的 activity位于其下并可以看到。
• 它包含了一个绑定至一个可视的activity的服务。
可视进程依然被视为是很重要的,非到不杀死它们便无法维持前台进程运行时,才会被杀死。
3、Service process
正在运行的,不在上述两种状态的service
是由 startService() 方法启动的服务,它不会变成上述两类。尽管服务进程不会直接为用户所见,但它们一般都在做着用户所关心的事情(比如在后台播放mp3或者从网上下载东 西)。所以系统会尽量维持它们的运行,除非系统内存不足以维持前台进程和可视进程的运行需要。
4、background process
不可见状态的activity进程,onstop被调用
包含目前不为用户所见的activity(Activity对象的 onStop() 方法已被调用)。这些进程与用户体验没有直接的联系,可以在任意时间被杀死以回收内存供前台进程、可视进程以及服务进程使用。一般来说,会有很多背景进程 运行,所以它们一般存放于一个LRU(最后使用)列表中以确保最后被用户使用的activity最后被杀死。如果一个activity正确的实现了生命周 期方法,并捕获了正确的状态,则杀死它的进程对用户体验不会有任何不良影响。
5、empty process
没有运行任何component的进程,保留这个进程主要是为了缓存的需要
不包含任何活动应用程序组件。这种进程存在的唯一原因是做为缓存以改善组件再次于其中运行时的启动时间。系统经常会杀死这种进程以保持进程缓存和系统内核缓存之间的平衡。
此外,一个进程的级别可能会由于其它进程依赖于它而升高。一个为其它进程提供 服务的进程级别永远高于使用它服务的进程。比如说,如果A进程中的内容提供者为进程B中的客户端提供服务,或进程A中的服务为进程B中的组件所绑定,则A 进程最低也会被视为与进程B拥有同样的重要性。
‘贰’ 安卓系统优化方法
目前智能手机市场两大系统分别是iOS和Android,并且已经形成了对立的阵营,Android用户并不理会iOS用户所谓的体验好应用好是怎么个好法,而iOS用户则更不理解Android用户刷机重启抠电池的乐趣。在iOS用户眼中,Android的形象几乎可以用一个“卡”字来代替。其实Android经过了这几年的发展,硬件水平已经有了很大的提高,再加上目前的优化,Android卡的情况已经有了很大程度的缓解,目前的双核机型硬件配置十分强大,如带告果还要说卡,也就是因为厂商定制ROM的优化原因。
其实Android的“卡”,可以得到彻底的解决,这就关系到了Android的优化问题,而今天我们就探讨下如何优化我们手中的Android机型。在这里笔者也要提醒大家,选购Android机型一定要选择热门机型,只有热门机型才有足够丰富的优化资宏行激源供我们选择,切忌为了个性选择偏门机型,Android热门机型再是街机,也不会比iPhone还街吧?
刷机重启抠电池
刷机是Android用户的一大乐趣,部分用户刷机是为了得到更好的易用性,比如小米的MIUI ROM,非常符合中国人的使用习惯,也有着足够丰富的个性化设蔽袜定,是图省事的朋友刷机的好选择,不过对于追求高性能的朋友来说,MIUI的优化还有很大提升空间,人们纷纷选择了对于ROM优化更加出色的CyanogenMod作为刷机的第一选择。
MIUI ROM特色
CyanogenMod系列目前主打的ROM有CM 7.2和CM 9两个,CM 7.2基于Android 2.3.7,而CM 9则基于Android 4.0.4,其中CM 7.2已经基本成熟,完美支持的机型很多,是大部分机友刷机的第一选择,CM 9官方的ROM支持机型并不多,民间高手也都进行了各个机型的移植,官方支持的机型兼容性相当不错,而移植情况并不乐观。
CyanogenMod的LOGO
CM系列ROM忠实于AOSP,在底层驱动方面做了很多努力,刷入之后就会感觉手机流畅了许多,同时也支持了更多的美化和手机自定义能力,比如我们可以对手机的震动回馈做细致的调整,包括按下震动的强度,抬起震动的强度等,让手机虚拟按键给我们更为真实的回馈,在CM ROM中,类似的设定非常多。
CM9 ROM截图
目前大部分的ROM都是使用CM进行定制的,还有一部分是对官方原版ROM进行修改,仅有少部分的ROM是修改的AOSP的源码,这些ROM指向都是谷歌Nexus系列的机型,比如GALAXY Nexus和Nexus S上的Codename和AOKP,就针对源码做了很多修改,让手机变得更流畅。
刷内核效果很好
仅仅刷手机的ROM是不够的,虽然多了很多自定义的功能,流畅度已经高于官方的ROM,但依旧有很大提升的空间,这时候我们就需要通过刷内核来进一步优化,刷内核所能带来的提升是相当明显的,但是对于刷内核大家还是要谨慎。
国外着名论坛的内核发布区
刷内核相比刷ROM,是一个很小的工程,你的手机不必要Wipe,也就是说不用删除手机内部的数据,刷一下也就几分钟的功夫,所以刷内核的时候,大家完全可以多下几个内核,逐个进行测试,看看哪个内核更适合自己,就保留哪个内核。同时刷内核时我们要注意,内核需对应自己的手机版本,对应自己所刷的ROM,否则会造成手机无法启动的现象,如果遇到无法启动的现象,再刷其他可用内核就可以恢复。
Android机器人
大家会问了,说了这么半天,刷内核到底都有什么作用呢?首先就是超频,大部分内核会默认提供降压超频,并拥有多种超频策略,来保证超频的情况下更省电。其次,还提供更多调整,比如内存虚拟机的大小,颜色管理等等,甚至一个内核可以包括一些新的linux的补丁,比如最新的Linux 3.3所集成的CPU频率补丁等等。
刷内核工具
事实上,一般的第三方ROM已经修改了手机的内核,达到了更流畅的目的,但ROM的制作速度远远比不上内核的调整速度,有时候一个ROM适用的内核在一天之内可能多次更新,所以我们可以尝试不同的新内核,看看他们的超频是不是能给我们带来性能上质的提升,是不是能更省电,是不是能通过颜色调整让我们看到更棒的画面等等。
精简内置应用
我相信Android用户通过不断的更换ROM和刷内核已经在流畅度上有了质的飞跃了,如果这时候你的手机已经比iPhone更流畅、更省电,那么我们就可以收手了,如果你还不满意,我们还有其他的路可选,精简内置应用,就是一个可以大幅度提升流畅度的方法。像Google的服务就是大部分人精简的对象。
跑分是性能的体现
Android系统和iOS与Windows Phone不同,这个系统拥有真正的后台运行能力,虽然iOS在推送方面做得很好,弥补了后台方面的不足,但是仍然无法与Android的真后台相比,但是由于Android的程序优先级并不像iOS和Windows Phone那样,为了流畅让当前界面拥有最高优先级,所以我们就要把Android手机后台不必要的进程关掉,以获得最佳的性能。
RE管理器截图
那么精简内部应用就是很好的选择,因为在我们使用过程中,有许多Android内部应用程序是不必要的,而这些程序会在我们不用的时候悄悄的后台打开,对我们的使用造成影响。在精简时,我们需要用到root文件管理器,同时需要保证手机已经开启root权限。
RE管理器截图
进入system/app就可以进行精简了,我们需要把root管理器的当前权限设置成读写,并且修改需要删除的软件权限,打开软件执行操作的权限,就可以对删除内置软件了,在精简前,大家需要对软件进行备份,或者备份整个ROM,如果你精简掉系统程序,可能会造成无法开机的情况,重刷ROM可以解决,所以大家最好找到该机型、该ROM的精简列表,以避免重复劳动。
还有其他优化
经过以上多方面的优化,我相信大家都已经得到了一个较为干净、运行流畅的Android了,不过在很多程序中,我们还是会遇到卡顿的情况,对于一个极端追求流畅度的玩家来说,这样的情况是绝对不允许发生的,因为我们还有进一步优化的空间。
CM超频选项
之前我们介绍了CM系列ROM,而CM的ROM中有两个选项的勾选可以进一步的提高流畅度,但是会损失一些画面这些选项是贴图差值抖动和16位透明度,贴图差值抖动这个选项需要关闭,这个选项关闭后可以提高流畅度,但是在滑动菜单时会有不容易被发现的画面损失,而16位透明度这个选项开启会大幅度提高流畅度,但是一些纯色的透明效果画质会下降,比如Android滑动到边缘的越界效果。
CM性能设置选项
在Android 4.0的ROM中,也有不少选项可以提高程序的流畅度,比如程序的GPU加速,使用GPU对2D程序的界面进行渲染,有效减轻界面滑动对于CPU的负担,同时还能让界面得到更好地渲染效果,不过这个选项会让有些程序出现兼容性问题,而Android也不能单独为某个程序开关GPU加速,所以GPU加速这个功能让人又爱又恨。
Android 4.0强制GPU加速
在提到刷内核时,我们也提到了超频内核,超频内核在刷完后,会在ROM设置中提供给你多种内核超频策略选择,在大部分机型中,超频不会增加CPU的耗电,因为厂商在CPU出厂前,为了保证CPU的稳定,为CPU设置了很安全的电压和频率,这显得过于保守,而在同等的电压下,CPU根据体质不同或多或少还有可以压榨的空间,所以我们在保证稳定运行的情况下,还可以继续对CPU进行超频。
优化策略总结
本文我们从刷ROM开始提到了一些Android系统的优化,对于Android系统来说,流畅度是它相比其他系统最大的短板,其实Android的大部分手机有着相当好的硬件,所以流畅度大幅度提升完全不是难事,而各个厂商在Android手机出厂前给手机定制的ROM并没有达到最优的优化效果,或多或少都有可提升的空间。
三星 GALAXY Nexus
所以我们也可以根据自己用手机的需要对手机进行彻头彻尾的优化,从ROM开始让手机变得彻底流畅起来,这里要跟大家嘱咐的,也是我们多次重申的一点:一定要选择普及率较高的Android机型,尤其是在国外的高普及度,像谷歌的Nexus系列手机被誉为亲儿子,也是因为它开放了源代码,在其他手机为第三方ROM挠头的时候,Nexus系列已经早早的开始各种优化了。
ClockworkMod的LOGO
其次,除了ROM资源,我们也要考虑到其他资源,比如内核,各大手机厂商的热门机型,内核资源也是不一样的,早期摩托罗拉的里程碑很开放,所以有着大量可刷的内核,而到了后来摩托罗拉机型很封闭,可刷的内核资源就相当匮乏,虽然ROM很多,但刷来刷去都大同小异,刷机的乐趣锐减。这里谷歌的Nexus系列再一次做了表率。
AOSP网页截图
再加上一些精简和设置操作,你会发现,你的手机流畅度完全可以翻几番,即使是官方有新的升级你可能都懒得去理,因为你知道,官方的升级不可能带来刷机所给你的流畅度。这也是iOS玩家所不理解的刷机重启扣电池的乐趣。他们更不理解的是Android的流畅度怎么能超越iOS呢?如果您按照小编交给你的这些方法,安卓手机不会再出现卡壳的现象了。
‘叁’ Android以太网和wifi共存并设置Wif优先级最高
1.ip route show //显示路由
2.ip rule list //显示路由表规则优先级
3.ip route flush cache //刷新路由缓存
4.ifconfig usb0 down 关闭usb0网络接口
5.ifconfig usb0 up 打开usb0网络接口
此时只是wif和以太网能共存,但是这个时候由于以太网的优先级比,wif优先级高,因此我们需要改动 EthernetNetworkFactory 的NETWORK_SCORE小于60即可,还需要将WifiStateMachine的优先级设置为Integer.MAX_VALUE,这样确保wif的优先级为最高
‘肆’ android自启动怎么优先级高
进程的优先级 12); //实例化按钮对象 Button btnDownload=(Button)findViewById(RMessage); Button btnDownload=(Button)findViewById(R.id.btnDownload); Button btnUpdate=(Button)findViewById(R.id.btnUpdate); //注册按钮的单击事件 btnDownload.setOnClickListener(this); btnUpdate.setOnClickListener(this); } //实现按钮的单击时间事件 @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnDownload: //创建对象 MyAsyncTask myAsyncTask=new MyAsyncTask(); myAsyncTask.execute(null);//执行任务 break; case R.id.btnUpdate: break; } } private class MyAsyncTask extends AsyncTask<URL, Integer, String>{ //在UI中执行,更新UI @Override protected void onProgressUpdate(Integer... values) { mProgressBar.setProgress(values[0]); if(values[0]<100){ mTextView.setText("progress="+values[0]+"%"); } } //现在work thread中执行耗时操作 @Override protected String doInBackground(URL... params) { for (int i = 0; i < 100; i++) { publishProgress(i+1);//向onProgressUpdate发送消息 try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } return "download finished"; } //doInBackground结束后,执行本方法,result是doInBackground方法返回的数据 @Override protected void onPostExecute(String result) { mTextView.setText(result); } } } 12.9. 软件开发术语 12.9.1性能 临时对象越多,垃圾回收(GC)的频率越高 GC占用CPU,CPU被占用时,无法响应用户的操作 用户感觉到卡,影响用户体验。 12.9.2资源池 存放一定数量的同样类型的对象,当程序需要使用时,可以从资源池中获取,使用完成,收回资源池。 等待下一次被使用。 示例:从资源池中获取Message对象。 Message msg=Message.obtainMessage(); 提示:若之前没有创建过Message,则创建给对象。Android系统会在适当时候回收该对象,方便下次取用。 提示:解决性能问题的前提是不能影响功能。
‘伍’ Android提升服务进程优先级
在android应用开发时,我们经常会在后台开一个service,来处理一些业务操作。最近公司的一个项目就是,通过service不断地和硬件设备交互,获取数据,在页面长时间停留在一个页面时,手机的屏幕会出项锁屏的状况,这时,我们的应用的优先级就会下降,很多次,等打开屏幕的瞬间,我发现原来的原来的进程被杀死了,应用又回到了首页,尤其是在Android高版本的系统中尤为突出。所以下面我们通过提成优先级的方式,来进行进程保活
2.在程序开始的地方注册这个广播接收者
4.定义这个activity的style属性 value - style.xml 文件
5.Androidmanifest文件中注册这个activity
大功告成!
经过测试,本人的华为荣耀9i,原来存在的问题被解决了,希望大家能互相交流经验。
‘陆’ android怎么提高线程的优先级
线程调度 计算机通常只有一个CPU,在任意时刻只能执行一条机器指令,每个线程只有获得CPU的使用权才能执行指令.所谓多线程的并发运行,其实是指从宏观上看,各个线程轮流获得CPU的使用权,分别执行各自的任务.在运行池中,会有多个处于就绪状态的线程在等待CPU,java虚拟机的一项任务就是负责线程的调度,线程调度是指按照特定机制为多个线程分配CPU的使用权. 有两种调度模型:分时调度模型和抢占式调度模型。 分时调度模型是指让所有的线程轮流获得cpu的使用权,并且平均分配每个线程占用的CPU的时间片这个也比较好理解。 java虚拟机采用抢占式调度模型,是指优先让可运行池中优先级高的线程占用CPU,如果可运行池中的线程优先级相同,那么就随机选择一个线程,使其占用CPU。处于运行状态的线程会一直运行,直至它不得不放弃CPU。 一个线程会因为以下原因而放弃CPU。 1 java虚拟机让当前线程暂时放弃CPU,转到就绪状态,使其它线程或者运行机会。 2 当前线程因为某些原因而进入阻塞状态 3 线程结束运行 需要注意的是,线程的调度不是跨平台的,它 不仅仅取决于java虚拟机,还依赖于操作系统。在某些操作系统中,只要运行中的线程没有遇到阻塞,就不会放弃CPU;在某些操作系统中,即使线程没有遇到阻塞,也会运行一段时间后放弃CPU,给其它线程运行的机会。 java的线程调度是不分时的,同时启动多个线程后,不能保证各个线程轮流获得均等的CPU时间片。 如果希望明确地让一个线程给另外一个线程运行的机会,可以采取以下办法之一。 调整各个线程的优先级 让处于运行状态的线程调用Thread.sleep()方法 让处于运行状态的线程调用Thread.yield()方法 让处于运行状态的线程调用另一个线程的join()方法
‘柒’ Android 进程管理篇(五)-调度策略与优先级
接上篇cpuset,这篇来看看进程优先级与调度策略管理。
Linux中,优先级号一共有0-139,其中0-99的是RT(实时)进程,100-139的是非实时进程。
数字越低优先级越高。
SCHED_IDLE idle状态低优先级进程调度
先看Process中调度策略的划分,与上面介绍的一样。
首先在AMS中封装了FIFO和NORMAL的两个策略,NORMAL好说,看看FIFO在哪用到
这里Process.setThreadScheler并没有太多的应用,我们直接来看优先级设置吧。else中将top app的UI线程与render线程都设置为TOP_APP_PRIORITY_BOOST优先级,nice值为-10,非常高。
这里主要调用androidSetThreadPriority方法
这里通过set_sched_policy来调整调度策略,并通过setpriority设置进程优先级。这里不特意区分进程与线程了,反正在linux中都是进程。
这里与前面的cpuset非常相似,依然是写节点,节点前面也提了就是:
那么这里又引入了一个schedtune子系统,简单介绍下:
schedtune是ARM/Linaro为了EAS新增的一个子系统,主要用来控制进程调度选择CPU以及boost触发。通过权重来分配CPU负载能力来实现快速运行。高权重意味着会享受到更好的cpu负载来处理对应的任务,换句话说你能享受相对更好的cpu运行性能。
简单梳理下schedtune和不同类型SchedPolicy之间的对应关系:
看下具体文件夹内容:
系统配置:
这里/dev/stune相关配置只做了这么一个