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进行改进:首先,它移除了空间聚…

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

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

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

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

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类,用于管理字体。 元…

无限学模式-“重塑科研学习路径: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} …

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

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

深入理解badblocks

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

代码随想录算法训练营第十六天|104.二叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数

104.二叉树的最大深度 思路:这道题最开始的时候,我想的是用前序遍历的思路来做,整个过程有剪枝的过程,弄了半天没写出来,主要是剪枝没写对!最大深度是叶子节点的高度,可以使用后序遍历来做。 cl…

el-table 动态渲染多级表头;一级表头根据数据动态生成,二级表头固定

一、表格需求: 实现一个动态表头,一级表头,根据数据动态生成,二级表头固定,每列的数据不一样,难点在于数据的处理。做这种表头需要两组数据,一组数据是实现表头的,另一组数据是内容…

Web网页生成桌面应用

前言:网页生成桌面指的是将一个网页保存为桌面应用程序的形式,使得用户可以在桌面上直接打开该网页,而不必通过浏览器打开。这种桌面应用程序一般具有独立的窗口、菜单、工具栏等界面元素,能够提供更加方便快捷的使用体验。 实现…

【pytorch】pytorch学习笔记(续1)

p22:1.加减乘除: (1)add(a,b):等同于ab。 (2)sub(a,b):等同于a-b。 (3)mul(a,b):等同于a*b。 (4)div(a,b)&#xff1a…

PID控制算法,带C语言源码实现

1 PID简介 PID即:Proportional(比例)、Integral(积分)、Differential(微分)的缩写。PID控制算法是结合比例、积分和微分三种环节于一体的控制算法。PID算法是连续系统中技术最为成熟、应用最为…

gitlab runner 安装、注册、配置、使用(Docker部署)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

【工具使用-Everything】everything只能搜到文件夹,无法搜到文件

一,问题现象 everything搜索时,只能搜索到文件夹,无法搜索到文件夹下的文件。 二,问题原因 everything搜索设置问题,设置为"文件夹"导致 三,解决方法 将搜索选项设置为“所有”即可&#x…