2024年Android的进程优先级与进程回收详解(1),2024年最新终于有人把Android程序员必学知识点全整理出来了

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2020-2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节

还有 高级架构技术进阶脑图、Android开发面试专题资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

一线互联网面试专题

379页的Android进阶知识大全

379页的Android进阶知识大全

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

setprop ro.SECONDARY\_SERVER\_ADJ 2

setprop ro.HIDDEN\_APP\_MIN\_ADJ 7

setprop ro.CONTENT\_PROVIDER\_ADJ 14

setprop ro.EMPTY\_APP\_ADJ 15



init.rc中,将PID为1的进程(init进程)的oom\_adj设置为-16:



# Set init its forked children's oom\_adj.

write /proc/1/oom\_adj -16



查看本机设置:



cat /sys/module/lowmemorykiller/parameters/adj

0,1,2,7,14,15




**回收时机**:  

  

init.rc中:



# Write value must be consistent with the above properties.

Note that the driver only supports 6 slots, so we have combined some of

the classes into the same memory level; the associated processes of higher

classes will still be killed first.

setprop ro.FOREGROUND_APP_MEM 1536

setprop ro.VISIBLE_APP_MEM 2048

setprop ro.SECONDARY_SERVER_MEM 4096

setprop ro.HIDDEN_APP_MEM 5120

setprop ro.CONTENT_PROVIDER_MEM 5632

setprop ro.EMPTY_APP_MEM 6144




这些数字也就是对应的内存阈值,一旦低于该值,Android便开始按顺序关闭相应的进程 .  

  

注意这些数字的单位是page. 1 page = 4 kB.  

上面的六个数字对应的就是(MB): 6,8,16,20,22,24  

  

查看现在的设置可以:  

cat /sys/module/lowmemorykiller/parameters/minfree  

要想重新设置该值(对应不同的需求):  

echo “1536,2048,4096,5120,15360,23040”>/sys/module/lowmemorykiller/parameters/minfree  

  

这样当可用内存低于90MB的时候便开始结束空进程. 而当可用内存低于60MB的时候才开始结束内容供应节点.  

  

具体的回收实现在ActivityManagerService.java中的函数trimApplications()  

1.首先移除package被移走的无用进程.  

2.基于进程当前状态,更新oom\_adj值,然后进行以下操作.  

移除没有activity在运行的进程  

如果AP已经保存了所有的activity状态,结束这个AP.  

3.最后,如果目前还是有很多activities 在运行,那么移除那些activity状态已经保存好的activity.  

  

  

当系统内存短缺时Android的Low Memory Killer根据需要杀死进程释放其内存  

简单说就是寻找一个最合适的进程杀死,从而释放它占用的内存.  

最合适:  

•oom\_adj越大  

•占用物理内存越多  

  

查看LRU列表:Adb shell dumpsys activity  

  

当activitydemo在前台时:  

包含Service的进程的优先级比较高,在computeOomAdjLocked  

中将其分为了两小类:



static final int MAX_SERVICE_INACTIVITY = 30*60*1000;

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的等级高。  

2按back键使得进程中的activity在后台运行而不是destory,需重载back按键(没有任何activity在运行的进程优先被杀).  

3依赖于其他优先级高的进程.  

  

强制修改进程属性:  

在程序中设置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 system applications(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或  



### 总结

我最近从朋友那里收集到了**2020-2021BAT 面试真题解析**,内容很多也很系统,包含了很多内容:`Android 基础、Java 基础、Android 源码相关分析、常见的一些原理性问题`等等,可以很好地**帮助大家深刻理解Android相关知识点的原理以及面试相关知识**。

这份资料把大厂面试中**常被问到的技术点**整理成了PDF,包知识脉络 + 诸多细节;还有 高级架构技术进阶脑图 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

这里也分享给广大面试同胞们,希望每位程序猿们都能面试成功~

**Android 基础知识点**

![](https://img-blog.csdnimg.cn/img_convert/1e9e0e72030f88fed79a3fb5339576a0.webp?x-oss-process=image/format,png)

**Java 基础知识点**

![](https://img-blog.csdnimg.cn/img_convert/10d1b4356089666c1d8c4eae113939bb.webp?x-oss-process=image/format,png)

**Android 源码相关分析**

![](https://img-blog.csdnimg.cn/img_convert/a81c0368f64d1d7b998a1bc2ee83074e.webp?x-oss-process=image/format,png)

**常见的一些原理性问题**

![](https://img-blog.csdnimg.cn/img_convert/3248fe7e0ce9b1252aa1b59c31bb2fd7.webp?x-oss-process=image/format,png)

**腾讯、字节跳动、阿里、百度等BAT大厂 2019-2020面试真题解析**

![](https://img-blog.csdnimg.cn/img_convert/4248e965752139a07fe4ee9145e67f02.webp?x-oss-process=image/format,png)



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.youkuaiyun.com/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

存中...(img-u8CjQNVx-1715713580778)]



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.youkuaiyun.com/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值