val processRecords
=
mutableSetOf<
Any
>()
/
/
这里我们把闲鱼和加入到保活白名单
val lockPackageList
=
setOf(
"com.taobao.idlefish"
,
"com.netease.cloudmusic"
)
hookAllMethods(
"com.android.server.am.ActivityManagerService.newProcessRecordLocked"
) {
after { m
-
>
try
{
changeAppInfoForLockPackage(m.result,
-
12
)
/
/
弄成
-
12
}catch (e:Throwable){
Log.e(Tag,
"newProcessRecordLocked"
+
e.stackTraceString)
}
}
}
private fun changeAppInfoForLockPackage(processRecord:
Any
, oomAdjValue:
Int
) {
if
(processRecord.toString().contains(
"system"
))
return
Log.d(Tag,
"!@@ >>>> $processRecord"
)
val info
=
processRecord.get<ApplicationInfo>(
"info"
)!!
val processName
=
processRecord.get<String>(
"processName"
)!!
/
/
注意,只保活主进程就够了,其它子进程的优先级自然会被拉起来
lockPackageList.firstOrNull { info.packageName
=
=
it && processName
=
=
it }?.let {
setAdj(processRecord, oomAdjValue)
setPersistent(processRecord)
processRecords.add(processRecord)
}
if
(!thread.isAlive) thread.start()
}
/
/
这个设置小了就能逍遥自在,无论怎么吃内存吃电也不会被大管家斩首示众
fun setAdj(processRecord:
Any
, value:
Int
) {
processRecord.
set
<
Int
>(
"maxAdj"
, value)
}
/
/
设置了这个就能得永生,不小心死了也能被大管家复活
fun setPersistent(processRecord:
Any
) {
if
(Build.VERSION.SDK_INT <
29
) {
processRecord.
set
<Boolean>(
"persistent"
, true)
}
if
(Build.VERSION.SDK_INT >
=
29
) {
processRecord.call(
"setPersistent"
, true)
}
}