搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
Gausst松鼠会
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
C++开发基础——可变参数与可变参数模板
2
深入理解ArkTS:Harmony OS 应用开发语言 TypeScript 的基础语法和关键特性_ark typescript
3
计算机结构体系:循环展开题型 (非凭感觉的方法详解)_daddiu
4
利用GitHub开源项目ChatGPTNextWeb构建属于自己的ChatGPT - Docker_chatgpt-next-web 修改key
5
iostream 缓冲区详解(cin和cout)_cout的缓冲
6
洛谷 P1182 数列分段 Section II_给定一个长度为的数列。你需要将数列分成若干互不重叠的区间。 使得 记那么一个划
7
JestonNano安装PyQt5_jetson nano 安装pyqt5
8
用uni-app开发iOS给iPhone添加安装测试版本APP权限_uniapp 调试ios app 时没有权限列表
9
数字化转型:未来十年,数字化转型将成为企业发展的基础_数字化部门将来应该成为公司
10
必背命令行集合_艾孜尔江撰_cmd find files sort by file size
当前位置:
article
> 正文
Android进程保活_android.intent.action.time_tick 保活监听
作者:Gausst松鼠会 | 2024-03-14 16:10:51
赞
踩
android.intent.action.time_tick 保活监听
一,背景
Android系统在APP退出后台时系统并不会真正杀掉这个进程,而是将其缓存起来以方便下次能快速启用。在系统内存不足的情况下,系统会依据一套Low Memory Killer机制来杀进程。
Linux内核会为每一个进程分配一个值,如下,这个值代表进程的优先级,值越大,代表进程优先级越低,那么就越容易被回收,Low Memory Killer就是根据这套机制来决定哪个进程被回收
普通进程的oom_adj >= 0
系统的进程的oom_adj有可能<0
上面是简单的原理介绍,关于更细的可以参考文章
http://www.atatech.org/articles/54730
二,实施方案
下面重点介绍下对于进程保活,我们可以有哪些手段,这里主要从2个层面进行介绍:
1,
Linux
层面
Linux本身存在am命令,可以通过am命令启动Android中的Activity, Service, BroadcastReceiver等组件
如: am start -a android.intent.action.VIEW -d http://www.baidu.com
am startservice - a com.xxx.test
具体见 am --help
因此可以利用它在后台起一个守护进程,然后监听前台service,拉起service等
2,Android层面
1),优先级
Service中利用startForeground将服务设置为前台,当系统资源紧张时,会优先保留此服务所在的进程。
但 sdk < 18 , 直接调用startForeground即可
sdk >=18 的,会在通知栏显示service正在运行,这里不要让用户感知,所以这里的实现方式是利用2个同进程的service,利用相同的notificationID, 2个service分别startForeground,然后只在1个service里stopForeground,这样即可去掉通知栏的显示。
2)属性
android:persistent,适用于放在 /system/app下的APP (一般属于预装应用)
3)返回值
Service 中的onStartCommand方法返回值:
START_STICKY:如果service进程被kill掉,保留service的状态为开始状态,但不保留递送的intent对象。随后系统会尝试重新创建service,由于服务状态为开始状态,所以创建服务后一定会调用onStartCommand(Intent,int,int)方法。如果在此期间没有任何启动命令被传递到service,那么参数Intent将为null。
START_REDELIVER_INTENT:重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
4)广播监听拉起
A,监听系统事件广播拉起对应的service
B,监听android.intent.action.ACTION_TIME_TICK广播拉起,注:不能在AndroidManifest注册,只能通过代码注册
5)自身销毁拉起
Service的onDestroy方法中调起
6)矩阵互保
通过AIDL的方式拉起对应的service
7)利用AlarmManager, WakeLock 间隔性唤醒进程,但需要考虑耗电情况
注:每个事情有利就会有弊,千万不要以为我们进程存活越久就越好,需要根据业务,场景等综合来评定。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/235744
推荐阅读
article
Android
应用和
系统优化
V1.2...
一年多年写了一篇简单的软件优化教程,给公司的同事使用。现在应该还不算过时,在过去一年里,在国家脱虚向实运动倡导下,一个个...
赞
踩
article
android
studio
超级玛丽
源码,VR版
NES
模拟器
来了,
超级玛丽
、魂斗罗都支持...
提到“
模拟器
”,可能更多的人会想到街机或主机中的游戏。没错,很多人体验街机确实就是想通过现代化的设备体验过去的游戏,VR...
赞
踩
article
oracle
中
to
_
char
()时间格式
_
oracle
to
_
char
('
time
', ''
yyyy
...
今天无意中遇到一个问题通过sql查询某表的记录(包含时间字段),使用
to
_
char
(
time
,‘
yyyy
-MM-dd H...
赞
踩
article
android
fstrim
的触发机制...
fstrim
_
android
fstrim
android
fstrim
...
赞
踩
article
android
fstrim
命令
,
满血复活:安卓
4.3
为所有
Nexus
带来
TRIM
...
接触固态硬盘的应该都会关心耐用性、寿命这样的指标,这源于闪存存储的特质。现代智能手机、平板机使用的基本也是闪存,但因为日...
赞
踩
article
G
it
: ‘LF
will
be
replaced
by
CRLF
the
next
time
Gi...
G
it
: ‘LF
will
be
replaced
by
CRLF
the
next
time
G
it
touches ...
赞
踩
article
[
Android
Studio
]新手向
,
安装创建
项目
构建很慢
,
下载
依赖
很慢的
问题
_安卓
下载
依赖
慢...
其实我主要是因为第一个原因
,
因为语言选的是kotlin它要下那个包
,
就花了很多时间
,
如果用Java语言
,
Java是在安装...
赞
踩
article
【230828更新】晶晨(
Amlogic
)
s
9
05l
(-b)
p211
android
9
.0
(atv...
晶晨
s
9
05l
1+8G
p211
盒子推出
9
.0
的系统_
s
9
05l
2刷安卓
9
.0
s
9
05l
2刷安卓
9
.0
...
赞
踩
article
Android
Studio
在导入
项目
后
编译
出现
java
版本
错误解决方法...
这说明使用的
java
版本
过高,而 gradle5.6.4对应的是
java
8,最新安装的
编译
器
java
版本
是17。解决方法...
赞
踩
article
Android studio 项目常见问题_
build
task
failed
.
open
the ...
1. 找不到类,JAR包导入失败import android.support.v7.app.AppCompatActiv...
赞
踩
article
Android
shell
脚本
的使用_
macrodroid
运行
shell
...
1.android中如何调用
shell
脚本
呢?A:android中的
shell
和 linux中的
shell
不同,linu...
赞
踩
article
android
bluetooth
开发
基础-0...
android
bluetooth
开发
基础-0分类:
android
蓝牙2013-10-29 12:07 1538人阅...
赞
踩
article
Windows
11 安装
Android
13版本的安卓
子系统
(带
Google
Play
商店和...
通过下载最新的
Windows
Android
子系统
(WSA) ,绕过Beta用户的限制,而且我提供的版本集成了 M...
赞
踩
article
10分钟搞定
win11
安卓
子系统
_
win11
android
csdn
...
与虚拟机或第三方安卓模拟器相比,微软官方的Windows 11安卓
子系统
在性能和与系统的集成上更为优越!非常实用,可以让...
赞
踩
article
Win11
安卓
子系统
(WSA)
安装
包
教程 - 电脑运行
Android
手机应用 /
安装
A...
相比虚拟机或第三方
安卓
模拟器,微软官方的Windows11
安卓
子系统
不管在性能上,还是跟系统的融合程度来看都更加优秀!实...
赞
踩
article
【
Android
】在
WSA
安卓子系统中进行新实验
性功能
试用与抓包(
2311.4
.
5.0
)_
wsa
2...
在根据几篇22和23的
WSA
抓包文章进行尝试时遇到了问题,同时发现新版Wsa的一些实验
性功能
能优化抓包配置时的一些步骤,...
赞
踩
article
Windows
Subsystem
for
Android(
WSA
)安装教程
for
Windows
...
首先打开此网站左侧选择对应通道「ProductId」并在中间输入
WSA
的产品代码「9P3395VX91NR」在右边按...
赞
踩
article
Windows
10
安装
Android
13版本的安卓
子系统
(带
Google
Play 商店和...
根据微软的说明,WSA 仅支持
Windows
11,
Windows
10
及以前的操作系统无缘WSA不过我们来看一下原理哈...
赞
踩
article
Android
Material
Design控件之
NavigationView
_
android
c...
Material
Design 之
NavigationView
item样式自定义;item点击事件;_
android
c...
赞
踩
article
Android
侧滑
栏-
NavigationView
的使用(全网最
简单明了
)_
android
nav...
Android
侧滑
栏1.导入依赖(build.gradle)因为需要用到 ”
NavigationView
“ And...
赞
踩
相关标签
hierarchy
TraceView
Systrace
LeakCanary
MAT
android studio超级玛丽源码
oracle
to-char
adb
android fstrim命令
git
android studio
android
ide
嵌入式硬件
Android shell脚本的使用
windows
ui