Android-系统进程优先级深入解析 (android studio)
进程是操作系统中正在运行的程序的实例。
- 每个进程都有自己的内存空间和系统资源。
- 进程可以独立地执行指令。
- 进程可以包含一个或多个线程。
- 进程之间可以通过进程间通信(IPC)机制进行数据交换和协作。
进程在操作系统中是资源分配的基本单位。
- 操作系统通过调度算法来管理和控制进程的执行顺序,以实现多任务并发执行。
- 每个进程都有一个唯一的进程标识符(PID),用于在操作系统中标识和管理进程。
- 进程可以处于不同的状态,如运行态、就绪态、阻塞态等,根据进程的状态和优先级,操作系统会进行相应的调度和管理。
- 进程的创建和销毁是动态的,可以根据需要动态地创建和销毁进程。
线程
线程是操作系统中最小的执行单元,是进程中的一个实体。
- 一个进程可以包含多个线程,这些线程共享进程的资源。
- 每个线程有自己的独立执行路径。
- 线程可以并发执行,可以同时执行多个任务。
- 线程之间可以通过共享内存进行通信,可以共享进程的资源,如文件句柄、全局变量等。
线程在编程中的应用非常广泛,可以用于并发处理、多任务处理、图形界面等场景。
- 在多核处理器上,多线程可以充分利用多核资源,提高程序的性能。
- 在编写多线程程序时,需要注意线程的同步和互斥问题,避免出现竞态条件和死锁等问题。
- 常用的线程同步机制包括互斥锁、条件变量、信号量等。
进程优先级
进程优先级是操作系统中用于确定进程调度顺序的一个重要概念。
- 每个进程都被赋予一个优先级,优先级越高的进程在竞争CPU资源时被调度的概率也越高。
- 操作系统根据进程的优先级来决定哪个进程先执行,哪个进程后执行。
-
常见的进程优先级有以下几种:
- 实时优先级
- 高优先级
- 普通优先级
- 低优先级
进程优先级的设定可以通过操作系统提供的调度策略进行调整。
- 不同的操作系统可能有不同的调度策略和优先级范围。
- 在系统中,可以使用nice命令来调整进程的优先级,较小的nice值表示较高的优先级。
Android进程优先级
在Android系统中,进程大致可以分为以下几种:
- 前台进程:正在与用户交互或执行与用户交互相关的任务的进程。
- 可见进程:未与用户交互,但仍然可见的进程,如正在后台播放音乐的进程。
- 服务进程:在后台运行的任务或服务的进程,如系统服务进程。
- 后台进程:不与用户交互也不可见的进程,如后台下载任务的进程。
- 空进程:不执行任何任务的进程,被系统保留以备不时之需。
在Android系统中,进程的优先级调度是由系统自动完成的,开发者无法直接控制。
- Android系统会根据进程的优先级来进行资源分配和管理,以保证前台进程和可见进程能够获得更多的系统资源,提供更好的用户体验。
Kernel调度策略
在操作系统中,Kernel调度策略是指操作系统内核对于进程或线程的调度方式和算法。
- 调度策略的选择对于系统的性能和响应时间有着重要的影响。
-
常见的Kernel调度策略包括:
- 先来先服务(FIFO)算法
- 轮转调度算法
- 优先级调度算法
- 多级反馈队列调度算法
在Android系统中,采用了CFS(CompletelyFrScheduler)调度算法作为默认的调度策略。
- CFS调度算法是一种基于红黑树的时间片轮转调度算法。
- 它通过维护一个红黑树来管理所有的进程,每个进程都有一个虚拟运行时间(virtualruntime)来衡量其执行时间。
- CFS调度算法的目标是尽量保证所有进程的公平性,即每个进程都能够获得公平的CPU资源。
Android线程优先级和进程oom_adj
在处理app启动速度的时候,可以设置主线程的优先级,保证主线程占用的cpu足够久。进程的oom_adj,决定了当内存不够的时候,lmk会根据oom_adj的大小依次释放内存。
android中对线程等级划分如下:
设置线程的优先级分为:android 提供的api和java sdk自带的api 注意: 要使用android提供的api设置,用java提供的作用不够显著
作用: 可以在主线程设置主线层等级;在Glide加载图片的时候设置低优先级。当图片量很大的时候可以降低加载图片线程的等级
android内存不够了,会触发oom机制,lowMemoryKiller会根据每个进程的oom_adj的等级,依次杀死进程,释放内存。
lom会根据free的内存的值,来判断kill掉哪个等级下的进程。例如当空闲内存只有64M了。会kill掉oom_adj为12-15的进程
真实案例:应用A跳到第三方应用B,在第三方应用B中播放视频,加载大量图片,导致返回的时候,应用A走了SplashActivity。通过logcat发现A应用被kill掉了
android timertask 在内存不足的情况下会被杀死吗
通常在一部Android手机里同时运行着多个应用(app),每个app对应一个系统进程,当系统需要更多的资源(如内存)而空闲资源不足时,Android系统就会选择杀掉一些“低优先级”的进程以便释放所需资源。 Android系统是如何确定进程优先级的高低的呢?如果一个app正在与用户交互,那么它所在的进程具有最高优先级;其次,如果一个app是可见的,例如被一个对话框部分遮挡,它所在进程具有第二高的优先级;再次,如果app当前是不可见的,也就是被切换到了后台,则它所在进程具有第三高的优先级;这里要补充一点,如果这个后台app启动了一个service,则它比一般的后台app优先级高一些。 最后,如果一个进程里没有包含任何app,这个进程的优先级是最低的。
免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。