android:persistent和android:priority的区别,对进程优先级有什么影响?

前言:写的apk因为系统busy给我kill了,(adj 900): kill all background,在AndroidManifest.xml添加android:persistent="true"后,被甲方要求不能这样做,还是得从adj改,把 priority改成1000

android:persistent和android:priority是两个不同的属性,它们分别用于不同的目的。

  1. android:persistent:用于设置应用组件是否具有持久性。当android:persistent设置为true时,表示该组件具有持久性,即使在设备重启后也会保留其状态。而设置为false,则表示该组件不具有持久性,重启后会被销毁。

  2. android:priority:用于设置组件的优先级。这个属性通常用于广播接收器(BroadcastReceiver),可以通过设置android:priority来定义接收广播的顺序和优先级。数值越高表示优先级越高。

这两个属性对进程优先级没有直接的影响。进程优先级是由Android系统动态管理的,根据当前运行的应用程序的活动程度和资源需求来进行调整。系统会根据一些因素(例如用户当前正在与之交互的应用、前台服务等)来确定进程的优先级。

虽然android:priority可以在某种程度上影响广播接收器的执行顺序,但它并不会直接影响进程的优先级。进程的优先级是由系统根据一系列的策略和算法来决定的,而不仅仅取决于某个组件的属性设置。


关于Service保活和提高Android应用中Service组件优先级的方法,可以总结如下:

  1. 设置最高优先级:在AndroidManifest.xml文件中,通过设置android:priority属性为较高的值(例如1000)来设置最高优先级。这适用于广播接收器。

  2. 使用startForeground()方法:在Service的onStartCommand()方法中调用startForeground()方法,将Service提升为前台进程级别。在Service的onDestroy()方法中记得调用stopForeground()方法。

  3. 返回START_STICKY:在Service的onStartCommand()方法中手动返回START_STICKY,以便在Service被系统销毁后能够重新启动。

  4. 发送广播重启Service:在Service的onDestroy()方法中发送一个自定义广播,在收到广播后重新启动Service。请注意,这种方式无法保证在第三方应用或系统设置中强制停止应用时能够执行。

  5. 监听系统广播判断Service状态:通过监听系统广播,如手机重启、界面唤醒、应用状态改变等,判断Service是否存活。

  6. 多个App相互拉活:不同的App之间相互绑定、互相拉活。

  7. 设置闹钟定时唤醒:使用AlarmManager设置闹钟,在指定时间周期性地唤醒Service。

  8. 开启前台Service:将Service设置为前台Service,提高其优先级。

  9. Service中循环播放无声音频:在Service中循环播放一段无声音频,可以一定程度上提高保活效果,但会增加耗电量。

  10. 双进程守护(Android 5.0前有效):通过启动一个独立的守护进程与主进程相互监控和拉活。

  11. JobScheduler(Android 5.0后引入,8.0后失效):使用JobScheduler调度任务来定期唤醒Service。

  12. 像素Activity保活方案(不推荐):创建一个透明的1像素Activity,并设置为悬浮窗口,以维持应用的运行。

  13. 广播锁屏、自定义锁屏(不推荐):通过监听锁屏广播或自定义锁屏界面来保活,但这种方式可能对用户体验产生负面影响。

  14. 第三方推送SDK唤醒:使用第三方推送SDK的唤醒机制来保活,但需要接入第三方服务。

  15. Native层fork子进程:在native层创建一个子进程并与主进程进行通信,实现互相拉活。

  16. 与手机厂商沟通:与手机厂商沟通,将应用放入系统白名单,降低oom_adj值,以确保进程不被系统杀死。

  17. 在AndroidManifest.xml中添加Persistent属性:在application节点中添加android:persistent="true"属性,表示应用具有持久性。

tips:以上方法的适用性和效果可能因Android版本、设备品牌和系统策略等因素而有所差异。

确实,通过将自己的应用作为系统应用(安装目录为/system/apk/),并设置android:persistent="true"属性,可以实现持久性,即应用会在系统启动时加载,并在异常出现时自动重新启动。

实现这种持久性的原理是,AMS(ActivityManagerService)在系统启动时加载所有persistent为true的应用。对于persistent应用,当应用进程意外终止时,AMS会尝试重新启动该应用进程,以保证应用的持久性。

需要注意的是,这种方法只适用于将应用作为系统应用安装的情况,安装在/system/apk/目录下。普通应用安装后路径为/data/apk/,即使设置了android:persistent属性也不会生效。

使用一句代码搞定事情的前提是将应用作为系统应用,并重启手机后才会生效。但这种方法需要满足特定条件和限制,并且可能不适用于所有场景。因此,为了保证应用的可靠性和稳定性,通常还需要结合其他方法来实现Service保活和提高优先级的需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/646633.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

可Pin to Pin兼容DRV8837的国产H桥电机驱动芯片,具大电流,短gnd,短电源保护功能

在国产牙刷,电子锁设计中,以前方案很多采用TI的DRV8837做直流电机驱动,随着中美贸易战和牙刷,电子锁等产品价格平民化普及,很多大厂在做国产化替代设计方案,GLOBALCHIP 的电机驱动芯片GC8837,价…

解读Android进程优先级ADJ算法

本文基于原生Android 9.0源码来解读进程优先级原理,基于篇幅考虑会精炼部分代码 一、概述 1.1 进程 Android框架对进程创建与管理进行了封装,对于APP开发者只需知道Android四大组件的使用。当Activity, Service, ContentProvider, BroadcastReceiver任一组件启动时,当其所…

YOLOv8改进 | Conv篇 | 2024.1月最新成果可变形卷积DCNv4(适用检测、Seg、分类、Pose、OBB)

一、本文介绍 本文给大家带来的改进机制是2024-1月的最新成果DCNv4,其是DCNv3的升级版本,效果可以说是在目前的卷积中名列前茅了,同时该卷积具有轻量化的效果!一个DCNv4参数量下降越15Wparameters左右,。它主要通过两个方面对前一版本DCNv3进行改进:首先,它移除了空间聚…

Python 流静态文件过滤、端口过滤、同域过滤(host过滤)、代理拦截

目录 静态文件过滤 需求 代码 端口过滤 需求 代码 同域过滤(host过滤) 需求 代码 静态文件过滤 需求 流量中的url包含大量静态文件请求信息,过滤掉 代码 def __is_static(self, flow: http.HTTPFlow) -> bool:static_ext [.j…

探讨Go语言中的HTTP代理模式:看Go如何玩转网络中转站

在互联网的海洋中,HTTP代理服务器像一座灯塔,为我们的网络冲浪提供了指引。而当Go语言遇上HTTP代理,会碰撞出怎样的火花呢?今天,让我们一起探讨Go语言中的HTTP代理模式,看看它如何玩转这个网络中转站&#…

三:C语言-输入与输出

三:输入与输出 一:输出 1.printf(): ​ 将参数文本输出到屏幕上,它名字里的 f 代表 format(格式化),表示可以定制输出文本的格式 ​ printf()不会在行尾自动添加换行符,待运行结…

IDEA(十)2022版本 Services中服务窗口不显示端口号解决

目录 一、问题描述二、问题分析三、解决方案3.1 设置启动参数【生效】3.2 方法二:设置环境变量【不生效】3.3 方法三:删除缓存【不生效】 四、补充:如何手动控制端口显示 一、问题描述 我们在使用 IDEA 的过程中,会发现在 Servic…

Hive之set参数大全-11

设置 Map Join 操作中优化哈希表的工作集大小(working set size) hive.mapjoin.optimized.hashtable.wbsize 是 Apache Hive 中的一个配置属性,用于设置 Map Join 操作中优化哈希表的工作集大小(working set size)。 …

Dockerfile:如何写一个Dockerfile文件?

如何写一个Dockerfile文件? 🚨推荐参考:Dockerfile:如何写一个Dockerfile文件? 现在的项目肯定都离不开docker,只要是流水线部署就会涉及Dockerfile文件,那么如何写一个正确的编写一个Dockerfil…

dpdk网络转发环境的搭建

文章目录 前言ip命令的使用配置dpdk-basicfwd需要的网络结构测试dpdk-basicfwddpdk-basicfwd代码分析附录basicfwd在tcp转发时的失败抓包信息DPDK的相关设置 前言 上手dpdk有两难。其一为环境搭建。被绑定之后的网卡没有IP,我如何给它发送数据呢?当然&a…

[leetcode] 18. 四数之和

文章目录 题目描述解题方法排序 双指针java代码 相似题目 题目描述 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应&a…

二、Kotlin 内置类型

1. 基本类型 1.1 Kotlin 和 Java 的基本类型对比 KotlinJava字节Bytebyte/Byte整型Int & Longint/Integer & long/Long浮点型Float & Doublefloat/Float & double/Double字符Charchar/Chararcter字符串StringString 1.2 定义变量 1.2.1 val 只读变量 &…

qt初入门5:字体设置和元对象系统的练习

空闲时间,参考课本demo,做一下练习。 字体的颜色主要用QPalette类,调色板的作用,控制着窗口部件的颜色和外观,包括背景色、前景色、文本颜色、边框颜色等。 字体的显示样式主要用Font类,用于管理字体。 元…

python三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1…

无限学模式-“重塑科研学习路径:ChatGPT应用实战课,开启高效率、高创新的科研之旅!“

ChatGPT 在论文写作与编程方面也具备强大的能力。无论是进行代码生成、错误调试还是解决编程难题,ChatGPT都能为您提供实用且高质量的建议和指导,提高编程效率和准确性。此外,ChatGPT是一位出色的合作伙伴,可以为您提供论文写作的…

【研0日记】24.01.25

回家倒数第6天 受不了了,不想写了,这群b怎么这么能写 用latex写了个伪代码,有点好玩 \usepackage[ruled,linesnumbered]{algorithm2e} \begin{algorithm}[ht] \caption{Pipeline of Kernel Iteration in K-Net.} \label{alg:alg1} …

2024年软考报名时间及条件,小白必看

不少考生开始准备报名2024年软件水平考试,那么报名软考有没有学历、专业以及工作经验等方面的限制呢?今天就给大家梳理下2024年软考考试,若有变更,也会及时更新内容。 免费送备考资料。联系我 2024年软考考试时间 2024年软考有两次考试&a…

在Java中如何优雅使用正则表达式?

在Java中如何优雅使用正则表达式? 一、正则表达式的基本概念与用途 1.1 正则表达式的简介 正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),是计算…

不通过代码绕过浏览器跨域检测(权宜之策)

通过属性找到浏览器可执行程序目录 然后在cmd该目录下输入: msedge.exe --args --disable-web-security --user-data-dirD:\temp上述代码是以edge浏览器为例,找到的可执行文件名为msedge.exe,最后的"D:\temp"为自己新建的一个有效…

深入理解badblocks

文章目录 一、概述二、安装2.1、源码编译安装2.2、命令行安装2.3、安装确认 三、重要参数详解3.1、查询支持的参数3.2、参数说明 四、实例4.1、全面扫描4.2、破坏性写入并修复4.3、非破坏性写入测试 五、实现原理六、注意事项 团队博客: 汽车电子社区 一、概述 badblocks命令是…