Android系统早就有了应用后台管理机制。在大多数人的认知中,应用分为前台和后台。最简单的判断方式:显示界面的应用是前台应用,不显示界面的应用是后台应用
Android十几年的发展,应用数量庞大,功能各异,单纯的后台机制已经不能满足需求。此图详细说明了Android的后台管理机制。它分为三个部分
目录:
-基础-Android后台机制-内存管理:应用状态分类,LMK机制,和其他系统的区别。
-为什么不能关闭后台应用程序:应用程序保持活动、自唤醒和相关启动。
-杀死恶毒应用之剑:后台干净利落,斩断觉醒和捧谷歌的手段。
-
| 1.Android后台管理的根源|
-
安卓内存管理方案:
Android遵循Linux的内存管理方案,是一种低内存恢复机制。不像Windows,打开多少就占多少,安卓不打开应用就占内存。在空加载状态下,Android P占用的下限是500mb左右(大概,我的测试可以正常运行),上限是设备物理内存的1/2,也就是开机占用的一半内存。
安卓应用不会关闭,退出后会保留在内存中。直到剩余内存太低,系统机制才会将其杀死,并回收其占用的内存。
-
了解应用状态的分类:
前台。很容易理解设备当前运行的应用程序、您打开的软件以及前台应用程序。
-可见。可见。类似于前台,也可以显示在屏幕上供用户查看和交互,比如输入法、浮动窗口等。
-中学。次要的。后台运行的服务通常占用的资源很少,但是用户需要自己的功能,比如各种系统的云服务。
-藏在后台。后台运行的进程在应用运行的时候直接按home键,应用还在运行。如果应用没有优化好,会占用大量资源。
-content_provider内容。与用户关系不大,通常感知不好。
-空空白色。应用程序已经停止运行,没有进程和服务,只留下一个缓存,以确保下次打开速度更快。
以上六种状态越低,重要性越低,越容易被杀死。
-
安卓背景杀手——低内存黑仔:
后台运行应用可以提高启动速度或者轻松推送信息,但是内存大小和电池容量并不是无限制的。背景多了会拖累性能,降低电池寿命。系统自然不能坐等内存满了崩溃。安卓系统使用的是LowMemoryKiller,简称lmk。
内核lmk接口
可以看出,lmk对于每个应用状态都有一个对应的值。当剩余内存大小达到数值时,lmk会杀死相应状态的应用程序,释放内存。如果应用程序被终止,并且剩余内存仍然不足,它将继续在以前的状态级别终止应用程序,以此类推。一直到前台应用,会导致正在运行的应用或者游戏闪回来。
当然,目前在安卓机器频繁使用4g和8g内存的时代,能让lmk秒杀前台的应用应该是不存在的,除非有bug。
-
后台应用占用的资源:
在固有印象中,Android后台应用越多,就越卡。因为应用运行是消耗硬件资源的,不管前台后台。在500mb内存的时代可能没有那么明显,因为内存太小,应用程序无法保持后台。但是自从Android进入1g和2g内存时代,这个缺陷就突然暴露出来了:后台打不死,打死了就自己启动,一个应用拖几个进程,一个进程有几个服务,可以说是一场心魔乱舞。这种现象至少持续了六年。
这些应用消耗什么资源?看上面的后台分类,这些应用一般属于二级或者后台,像前台应用一样运行,会占用CPU计算资源,数据操作会占用闪存的读写资源。这两项足以堵塞设备,妨碍正常运行。这些资源的总量是确定的。当时演出普遍比较弱的时候,资源用的少一点,后台占用很多,前台自然需要一张卡。
空负载:
空负载
后台打开百度地图:
后台挂百度地图
这时候卡住不能正常运行,各种动画丢帧。
-
Android和其他系统背景的区别:
一般来说,每个系统的应用可以表示为两种状态:Android分为“运行”和“停止”,iOS分为“前台”和“冻结”,Windows分为“启动”和“关闭”。
说明:iOS的特点是后台冻结,即应用停留在后台但不运行,只有前台应用可以运行。这样可以第二次打开应用,但是不消耗资源,只在退入后台时占用内存;Windows的特点是打开要运行的应用程序,点击关闭会停止运行并清空内存。
内存占用也和背景有关。旧社会安卓每天占50%;IOS内存开机不久就会满,永远活在95%以上;另一方面,Windows占用的内存和应用程序一样多,没有应用程序时占用的内存很少。
Win空负载
还有一个windows Phone系统,是微软为基于Win的智能手机设计的。它的特点不是杀伤,而是限制,限制后台应用的数量,为每个应用占用内存。这种个体小、个体总数少的限制非常简单有效,迫使开发者进行优化。是你,微软。
-
第二,为什么后台应用不能关闭?|
-
有些用户故意关闭后台释放内存或增加电池寿命,却发现后台运行的应用程序无法关闭。这是什么原因呢?详细分析后台管理和应用的关系。
首先看后台界面。
卡片后台界面
在这个界面中,您可以显示您已经打开的应用程序并生成缩略图。前面说了,安卓应用不关闭,退出后会在后台运行。在该界面中,您可以在后台手动停止申请过程,即点击×号,或在更高版本上滑动。但是这种行为不等于强行停车!
这个接口不是强制停止应用程序,而是清理应用程序接口,通知应用程序是时候停止自己的后台进程了。至于停止哪些服务,应用程序本身拥有最终决定权。以前安卓的机制确实是有问题的,尤其是安卓K-N,简直就是被恶意应用锤了。当时定制的系统修改了这些机制,在划掉卡的时候强制停止,这样就可以反击恶意应用。
-
应用保持活跃:
应用程序开发人员会保护应用程序的后台进程,以防止它因某些功能或某些利益原因而被杀死。这种行为被称为应用保持活动。
一个常见的生存方式是留下一个通知。你可以通过在通知栏中留下一个不清晰的通知来避免被杀死。即使在后台界面划掉卡,只要这个通知还在,服务就在,你可以随时拉起主进程继续运行。有许多这样的应用程序,例如在通知栏中放置一个信息窗口和一个搜索框。
关后台
最直接的活命方式就是请求用户许可。在定制的系统上,通常会有一个“允许应用在后台运行”的权限,应用可以找到合适的借口,让用户主动打开这个权限,不受阻碍地在后台运行。
另外还有一些很奇妙的操作,比如建立一个透明的悬浮窗口,可以直接提高应用状态分类,很难被lmk杀死;进程守护,一个应用建立了几个进程,一个进程丢失,马上被另一个进程拉起来;还有一个更强的,不断尝试以毫秒级的速度拉起自己的进程。这种方法甚至可以忽略强制停止(只要我启动够快,强制停止都不能让我关机),这已经是破坏性行为了。
-
应用唤醒:
在某些方面,应用程序无需用户手动打开就能自己启动,即应用程序唤醒,这也称为应用程序自启动。此时没有前台界面,只启动流程和服务。
在Android应用开发过程中,会在应用中添加一个BroadcastReceiver,以响应某些状态。比如设备接到电话,系统会发出广播“呼叫”,应用“拨号”会自己启动,并响铃提醒用户接听。当存储量空小于一定量时,系统会广播,文件管理应用会提示用户清理文件释放空。合理使用可以大大提高应用的功能性,但如果不合理使用,就会给用户带来麻烦。
百度云从自身做起
借知乎哥的图。可以看到,百度云会接收到图中的广播,实现自启动。当WiFi发生变化或存储发生变化时,会自动启动。功能联网毕竟要靠存储,但为什么要在收发短信和打电话的时候启动呢?安装和卸载应用程序时,它也会启动,充电和关机也会启动。你有多害怕你的服务无法停止?就算杀了后台,很快又会重新开始,就像不杀一样。
-
关联开始:
应用程序的广播接收器不仅可以接收系统的广播,还可以接收其他应用程序的广播,从而被其他应用程序拉起。这种现象叫做联动启动,或者说连锁启动。
关联启动常见场景:在“移动淘宝”购买产品,选择支付宝作为支付方式,可以直接拉起“支付宝”的应用界面,进行支付操作。
不合理的使用场景要让长期使用Android的用户深有感触,拉起其他应用的后台服务,收集用户数据,推送广告
关联唤醒
可以看到,同一个应用会自动唤醒,保持后台活动。这有什么用?我不知道。一开始就是这样。后来这种现象越来越严重。一些公司推出了相关的SDK。只要您访问这个SDK,并且一个可以访问同一个SDK的应用程序启动,您的应用程序就会被顺便拉上来。
连锁创业成了一种交易:“访问我的SDK,你的应用可以享受后台打不死的待遇,消息直接,数据采集畅通无阻。”于是大量的应用开始访问这个SDK,后台不能丢。
开发人员笑得很开心,但是又苦于用户,不能在后台打死。当他们停下来时,他们可以开始用链子把自己拴住。内存少的机器在那么多应用下不断触发lmk杀后台,杀完又刚好起来,陷入无限循环,导致高负载,血淋淋的人生。
-
|杀人之剑的恶毒应用|
-
对于那些恶毒的应用,就看着他们胡作非为,为所欲为?当然不是。反击已经开始了。垃圾用户,拿去吧!
-
杀死-应用背景过程:背景净化机制
后台纯度不是Android的官方说法,而是第三方定义的应用状态。即应用退出后台,不留无用服务(无用意味着用户不能使用),全部放入缓存(即上面分类中的空 white进程)。不仅会拖累系统性能,还会启动第二次。
这个说法来自绿色公约,意思是绿色公约中的应用可以做到这一点。然而,在过去的几年里,自愿公约已经成为谷歌的强制性规定。如果你当前运行的系统是Android O及以上,应用目标API在26以上,那么应用退出后可以进入缓存,实现后台无损保护。
您可以尝试打开应用程序,使用主页按钮退出应用程序界面,进入系统设置-开发人员选项-运行服务,并观察是否有任何进程和服务刚刚应用。然后单击右上角的显示缓存,查看是否有刚刚应用的缓存。如果没有进程服务,只剩下一个大小为数百mb的缓存进程,那么这个应用程序可能符合后台纯度。
过程
躲藏
可见我常用的应用都支持背景纯度。
当然,一切都不是绝对的。例如,音乐播放器在播放音乐并退出后必须离开一个进程。毕竟后台还是要运行的,不能说不支持后台纯度。
啊。。这个痛苦的消息,永远
还有一些奇怪的事情,就是内存显示错误,有时候应用占用的内存会直接计入系统占用,不知道是逻辑错误还是应用的奇妙操作,如图:
淘宝入系统
-
终止链启动:切断唤醒
为了处理应用程序的自启动和链式启动,在早期的安卓定制系统中,提供了一个由用户控制的应用程序自启动开关
自启动极限
当此开关关闭时,系统将屏蔽应用程序的广播接收,因此它不能通过广播本身启动。
对于非深度定制系统,没有这样的限制。如果有root权限,可以使用工具手动管理应用的各种组件,不仅可以关闭广播接收器,还可以控制应用的后台服务。不可用但正在运行的服务可以直接停止
垫子
如果有xposed框架,可以使用,功能更多,效果更强,操作更简单。
-
屠杀-背景资源占用
后台应用,要有后台的样子。有些应用在进入后台的时候还是焦躁不安,不停的交换数据,速度变慢,消耗大量资源。最糟糕的是唤醒锁,让设备无法睡眠。那么目标就明确了,就是减少自己对资源的占用。
从Android 8开始,系统对后台应用进行了整改。如果系统是Android 8,应用的目标API是26以上,那么应用会自动达到后台纯度。如果应用API低于26,可以在开发者选项——后台检查中手动限制。如果不需要这个应用的后台,可以关闭
背景调查
说到Android 9,限制背景就更难了。智能待机在线可以根据应用使用频率和使用时间自动管理,后台根据活跃、工作、常用和很少使用的级别分配不同的资源。这也是为什么用了一段时间的机器比新的电池寿命长的原因,就是机器学习记录你的使用习惯。
如果是非标准应用,是否不适合新特性?谷歌有更多独特的举动。安卓P还提供了后台限制功能。如果一个应用的API低,后台有大量进程,或者长时间控制唤醒锁,系统会在通知栏列出应用,提示:* *应用在后台耗电,用户可以一键限制。这个限制并不是如上所述的限制资源的分配,而是直接禁止应用的所有后台,禁止应用的所有响应,退出时停止。
用户也可以手动打开该限制。设置-应用-查看所有应用后,找到要限制的应用,高级-电池-后台限制,点击限制,世界就干净了。
另一种方法:在中更改应用权限,在Android 9中“后台运行”的权限是这样的
严格限制是上述限制的应用。API以上的应用默认为基本限制,26以下的应用默认无限制。用户可以手动将其更改为严格限制。
可见系统越原生,干扰越少,没有白名单,更能体现开发者的优化水平。优化的垃圾越多,后台就越不能挂在原生ROM上,消息就越不能推出。比如我的机器从来没有收到过酷安(whml)的消息
-
屠杀——恶意应用的最后顽固:谷歌的手段
从这些底层的大变动可以看出,谷歌不得不大力整顿这些恶性应用,可以说是无差别的打击。如果不规范,就会受到影响。
后台限制是指如果可以标准化,就可以在后台合理运行,不影响功能,不损害用户体验。如果是头铁,你要跟体制做个规划。好了,不要直接运行后台,什么功能都实现不了
play store有强制要求,目标API必须在26以上,很快就变成28了。这意味着应用不能标准化,API越高,应用越受约束。不升级API?好吧,我不会把你下架,但我会禁止你发布更新。如果你永远不能更新,你可以这样做。
如果它不在游戏商店里呢?毕竟谷歌管理不了第三方分销渠道。没关系,我不能禁止你分发,但是我可以干涉你跑步。鉴于API低于23,运行时将提示有风险的应用程序并谨慎使用。API远低于现在的系统。为了兼容运行,我会降低你的一些业绩,不能抢占国际市场。不值这个蜡烛!
-
文末聊天
-
总有人抱怨安卓生态太差,和竞争对手iOS相比太落后,这样比较不公平。考虑到iOS的起源,苹果早在上个世纪就设计了mac操作系统。经过十几年的优化,积累了大量的经验和一定的生态基础。设计iOS系统自然是非常容易的,没有压力把iOS生态打好。
另一方面,Linux内核Android从零开始做系统,一开始就不是为智能手机设计的。经过几年的发展,这样的存在完全被iOS压制,应用比iOS多,市场份额是iOS的几倍。
如果看不懂这个,再看看Windows。经过几十年的发展,生态依然稀疏,权威管理混乱,uwp生态半残。你感受到安卓的力量了吗?
-问:如何正确检查剩余内存
-回答:设置-开发人员选项-运行服务。点击右上角的“显示缓存进程”,查看真正的剩余内存。剩余内存大小一般比lmk的最大值多一点。通常几百兆
-问:我只是不想让应用程序停留在后台,只想看到剩余的内存很大
-回答:Set-把开发者选项拉到最后,限制后台进程,改为不允许后台进程。简单总结:盈余很大,体验极差。
-问:现在多少吉字节的手机内存合适?
-回答:你问我,3g勉强够,4g够,6g绰绰有余,8g是巅峰。12g 16g?方向不对。厂家不想优化,想的比朋友参数好,成本压不下来。最后,用户购买旗舰机需要增加预算。
-问:文章太长,看不下去,总结一下
-回答:杀死后台的唯一方法是lmk机制,用户手动停止。安装的应用API越高越好,剩余内存越少越好。至于优化,爬回去自己看
有人说我写的图文看不懂。我尽了最大的努力去修改,但是出了问题。对于关云长的千粉大佬来说,这些应该是基础,没必要谈。对于刚入安的小白,我可能一开始就不理解(我太难了。
图文的写法有些混乱,这个排版挺跨越的。原谅我
例行评论
原作者Anm718
1.《手机内存满了 手机内存满了,教你那些内存可以删》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《手机内存满了 手机内存满了,教你那些内存可以删》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/guoji/702657.html