RK3576開發(fā)板Android 14系統(tǒng)工業(yè)級APP保活機制設計與實現(xiàn)
forlinx
2026-03-17 10:17:00
RK3576開發(fā)板
作者簡介
燕南無聲,擁有十二年嵌入式開發(fā)經(jīng)驗,深耕ARM架構嵌入式平臺開發(fā)領域,專注于系統(tǒng)底層服務定制、硬件與系統(tǒng)適配優(yōu)化,經(jīng)手多款RK系列芯片平臺的嵌入式應用開發(fā)與問題調(diào)試,擅長解決工業(yè)級嵌入式場景下的系統(tǒng)與應用適配難題。
一、行業(yè)需求與開發(fā)痛點
在ARM平臺Android系統(tǒng)的應用層開發(fā)工作中,進程?;钜恢笔呛诵男枨?,尤其是在工業(yè)級嵌入式場景里,后臺應用的持續(xù)穩(wěn)定運行直接關系到設備監(jiān)控、數(shù)據(jù)采集等核心業(yè)務的正常開展。近期,筆者基于飛凌嵌入式RK3576開發(fā)板進行Android 14系統(tǒng)應用開發(fā)時,遇到了工業(yè)監(jiān)測類APP后臺運行易被系統(tǒng)清理的問題:
系統(tǒng)級清理機制
OOM Killer、Low Memory Killer會主動清理后臺進程,系統(tǒng)根據(jù)內(nèi)存占用情況自動清理低優(yōu)先級進程。
用戶操作觸發(fā)終止
息屏、進程凍結、手動滑出應用界面或通過shell終端執(zhí)行kill命令等操作會直接終止進程。
原生系統(tǒng)缺陷
系統(tǒng)本身無原生拉活機制,進程被終止后無法自動恢復運行。
業(yè)務影響嚴重
造成數(shù)據(jù)采集中斷、設備監(jiān)控失效,嚴重影響整套工業(yè)系統(tǒng)的穩(wěn)定性。
因此亟需開發(fā)一套針對性的進程?;钆c自動拉活解決方案,確保核心業(yè)務進程在工業(yè)場景下的持續(xù)穩(wěn)定運行。
二、系統(tǒng)特性與核心解決思路
結合RK3576開發(fā)板Android 14系統(tǒng)的特性分析,該系統(tǒng)延續(xù)了Android系統(tǒng)對后臺進程的嚴格管理策略,會根據(jù)系統(tǒng)內(nèi)存占用情況主動清理低優(yōu)先級后臺進程,同時支持進程凍結、強制停止等系統(tǒng)級操作。原生系統(tǒng)中,既沒有針對特定進程的保活保護機制,也缺乏進程被終止后的自動拉活邏輯,無法滿足工業(yè)場景對后臺應用的穩(wěn)定性要求。
核心解決思路:通過定制系統(tǒng)服務劃定需要?;畹倪M程白名單,讓白名單內(nèi)的進程突破系統(tǒng)內(nèi)存管理、進程凍結等限制;同時開發(fā)獨立的監(jiān)控線程,實時檢測白名單進程的運行狀態(tài),在進程被手動或系統(tǒng)終止后完成自動拉活。
三、方案開發(fā)基礎與整體框架
在實際開發(fā)過程中,筆者發(fā)現(xiàn)飛凌嵌入式RK3576開發(fā)板提供的Android 14系統(tǒng)源碼中,已預留并實現(xiàn)了一套基礎的"白名單"?;詈诵倪壿嫞行∪チ说讓舆m配的繁瑣工作?;谶@一現(xiàn)有基礎,筆者進一步完善并落地了完整的APP?;罘桨?。
方案的核心載體為白名單系統(tǒng)服務 WhiteAppProcessListManagerService,該服務的具體路徑為:
frameworks/base/services/core/java/com/android/server/whiteappprocesslist/WhiteAppProcessListManagerService.java整個保活方案邏輯清晰、可落地性強,主要分為以下三個核心步驟:
白名單控制接口開發(fā)
封裝白名單的獲取與添加功能,實現(xiàn)進程保護范圍的管理
監(jiān)控服務開發(fā)
開發(fā)獨立監(jiān)控線程,實時檢測白名單進程狀態(tài)并實現(xiàn)自動拉活
配套測試驗證
開發(fā)測試APP并完成全場景驗證,確保?;顧C制穩(wěn)定可靠
四、白名單管理接口開發(fā)與初始化配置
WhiteAppProcessListManagerService作為管理白名單的系統(tǒng)服務,封裝了兩個核心對外接口,分別實現(xiàn)白名單的獲取與添加功能:
4.1 核心接口實現(xiàn)
// 獲取白名單進程列表接口
@Override
public @Nullable List<String> getWhiteAppProcessList() {
try{
// 調(diào)用ActivityManagerService的對應方法獲取白名單
return mActivityManagerService.getWhiteAppProcessList();
}catch(Exception e){
e.printStackTrace();
return null;
}
}
// 向白名單添加進程名接口
@Override
public void setWhiteAppProcessList(@Nullable String whiteAppProcess){
try{
// 調(diào)用ActivityManagerService的對應方法設置白名單
mActivityManagerService.setWhiteAppProcessList(whiteAppProcess);
}catch(Exception e){
e.printStackTrace();
}
}
4.2 服務初始化配置
在該服務的構造函數(shù)中,飛凌嵌入式RK3576開發(fā)板已預置com.forlinx.logtest測試應用,并將該測試APP添加至白名單,作為保活機制的驗證載體;與此同時啟動監(jiān)控線程,確保?;钕嚓P邏輯能夠正常觸發(fā):
public WhiteAppProcessListManagerService(Context context, ActivityManagerService activitymanagerservice) {
mContext= context;
mActivityManagerService = activitymanagerservice;
// 將測試APP加入白名單,包名無多余空格
mActivityManagerService.setWhiteAppProcessList("com.forlinx.logtest");
// 獲取白名單并打印日志,用于調(diào)試驗證
List<String> list = mActivityManagerService.getWhiteAppProcessList();
for (int i=0;i<list.size();i++){
Log.d(TAG,"white app process list["+i+"]-"+list.get(i));
}
// 啟動白名單監(jiān)控線程,開始進程狀態(tài)檢測
Thread thread = new Thread(new WhiteListMonitor(mContext,this));
thread.start();
}
注:白名單監(jiān)控服務為系統(tǒng)級服務,隨系統(tǒng)開機自啟并獨立運行,無需依賴測試APP啟動;僅白名單內(nèi)的進程需手動首次啟動后,監(jiān)控服務才會對其進行持續(xù)的狀態(tài)檢測。
五、白名單進程監(jiān)控與自動拉活服務開發(fā)
監(jiān)控服務與framework層白名單機制分工明確:
- Framework層白名單機制:已在framework層進程管理模塊完成適配,可讓白名單內(nèi)進程突破OOM Killer、Low Memory Killer、Freeze(進程凍結)、安卓設置APP強制停止按鈕等系統(tǒng)級的進程清理與凍結限制
- 監(jiān)控服務:作為獨立線程,重點處理應用界面滑出(關閉)、shell終端執(zhí)行kill命令等手動方式終止進程的場景
5.1 監(jiān)控線程核心邏輯
監(jiān)控服務通過1秒間隔實時遍歷檢測,當白名單進程狀態(tài)異常時自動拉活并切至后臺:
@Override
public void run(){
while(true){
try{
// 獲取系統(tǒng)所有進程信息
List<ActivityManager.RunningAppProcessInfo> processes = getRunningAppProcesses();
for (ActivityManager.RunningAppProcessInfo process : processes){
// 打印進程基礎信息,用于調(diào)試
Log.d(TAG,"Process:"+process.processName+",PID:"+process.pid+",state:"+process.processStateToString(process.processState)+","+process.processState);
// 檢測是否為白名單進程且狀態(tài)≥緩存空狀態(tài)
if (mWhiteProcessList.contains(process.processName) && process.processState >= ActivityManager.PROCESS_STATE_CACHED_EMPTY){
// 根據(jù)進程名構建啟動Intent
Intent intent = getLaunchIntentForPackage(process.processName);
if (intent != null){
Log.d(TAG,"restart"+process.processName);
// 添加標志位,避免創(chuàng)建新任務棧
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
// 攜帶啟動模式標識,標記為后臺拉活
intent.putExtra("StartMode","Background");
// 啟動進程,完成自動拉活
mContext.startActivity(intent);
// 拉活后模擬HOME鍵,將應用切至后臺運行
Instrumentation instrumentation = new Instrumentation();
instrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_HOME);
}
}
}
// 線程休眠1s,循環(huán)檢測進程狀態(tài),確保拉活及時性
Thread.sleep(1000);
} catch(Exception e){
Log.d(TAG,"restart process fail");
e.printStackTrace();
}
}
}
該監(jiān)控線程能在白名單進程出現(xiàn)異常狀態(tài)后快速識別并完成拉活,其中Intent參數(shù)的傳遞,為應用區(qū)分啟動方式、執(zhí)行后臺運行邏輯提供了關鍵依據(jù);拉活后切至后臺的操作,保障了工業(yè)場景中應用后臺運行的隱蔽性與穩(wěn)定性。
六、測試APP適配開發(fā)與全場景驗證
為驗證?;顧C制的有效性與穩(wěn)定性,本次測試基于com.forlinx.logtest測試APP開展適配開發(fā)與全場景驗證工作。該APP完成了啟動模式判斷、后臺運行邏輯的開發(fā),且自帶測試線程。
6.1 啟動方式識別邏輯開發(fā)
測試APP在onCreate函數(shù)中會接收監(jiān)控服務傳遞的StartMode消息,通過判斷消息內(nèi)容是否為Background,精準識別應用的啟動方式是監(jiān)控服務拉活還是用戶手動觸發(fā):
// 判斷應用是否為后臺拉活啟動
private boolean isAppIsInBackground() {
boolean isInBackground = false;
String StartMode = getIntent().getStringExtra("StartMode");
if(StartMode != null && StartMode.equals("Background")) {
isInBackground = true;
}
return isInBackground;
}
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 根據(jù)啟動方式執(zhí)行對應邏輯
if(isAppIsInBackground()){
Log.d(TAG,"后臺啟動");
moveTaskToBack(true);
}else{
Log.d(TAG,"用戶觸發(fā)啟動");
}
}
6.2 后臺運行驗證線程開發(fā)
測試APP自帶一個測試線程,該線程以1秒為間隔打印累加數(shù)字,開發(fā)人員可通過logcat日志實時查看數(shù)字變化,清晰、直觀地確認APP是否在后臺持續(xù)穩(wěn)定運行:
new Thread(() -> {
long num = 0;
while (true) {
num++;
Log.d(TAG, "logtest count " + num);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}).start();
6.3 全場景驗證結果
完成上述適配開發(fā)后,筆者在飛凌嵌入式OK3576-C Android 14平臺開展了全場景驗證工作:啟動com.forlinx.logtest測試APP后,分別執(zhí)行息屏、手動滑出應用界面、通過shell終端執(zhí)行kill命令、系統(tǒng)低內(nèi)存觸發(fā)OOM Killer等操作,通過logcat日志觀察發(fā)現(xiàn):
全場景驗證結果表明,本次開發(fā)的?;罘桨改軌驖M足工業(yè)級嵌入式場景對APP后臺持續(xù)、穩(wěn)定運行的核心需求,?;钆c拉活邏輯有效且可靠。
七、開發(fā)反思與場景適配體會
此次在RK3576飛凌OK3576-C平臺Android 14系統(tǒng)中實現(xiàn)APP?;罟δ埽尮P者對嵌入式Android平臺的系統(tǒng)服務定制有了更深入的理解。嵌入式平臺與消費級Android設備存在本質區(qū)別:
工業(yè)場景需求
對后臺進程的穩(wěn)定性、持續(xù)性要求遠高于消費級場景,核心業(yè)務不能中斷
原生系統(tǒng)限制
Android進程管理機制以資源優(yōu)化為核心,無法滿足工業(yè)場景的特殊需求
解決方案核心
通過底層系統(tǒng)服務定制開發(fā)獨立的、系統(tǒng)級的?;畋O(jiān)控服務
設計優(yōu)勢
監(jiān)控服務開機自啟、與應用進程解耦,保證監(jiān)控邏輯的穩(wěn)定性
八、方案待優(yōu)化點與功能拓展建議
本次實現(xiàn)的?;罘桨刚w能夠滿足工業(yè)場景的核心需求,但仍存在一處待優(yōu)化點: 白名單內(nèi)的進程暫未實現(xiàn)開機自啟,需要開發(fā)人員手動首次啟動測試APP后,監(jiān)控服務才會對其進行狀態(tài)檢測與拉活。
若要實現(xiàn)白名單進程開機自啟,可在WhiteAppProcessListManagerService的構造函數(shù)中,參考監(jiān)控服務的進程啟動方式,通過Intent直接啟動白名單內(nèi)的進程,實現(xiàn)"開機即運行、異常即拉活"的全流程自動化。
拓展建議:若需要通過應用層靈活控制白名單,比如動態(tài)添加、刪除?;钸M程,可將白名單系統(tǒng)服務的管理類生成jar接口,對外提供調(diào)用能力。但從系統(tǒng)穩(wěn)定性角度出發(fā),不建議進行此項修改。工業(yè)級嵌入式設備對系統(tǒng)穩(wěn)定性要求極高,白名單的動態(tài)修改可能引入進程管理混亂、系統(tǒng)資源占用過高的風險。
九、總結
嵌入式開發(fā)的核心價值
嵌入式開發(fā)的核心,始終是讓系統(tǒng)與硬件精準適配具體的業(yè)務場景。本次APP?;罘桨?,本質上是結合工業(yè)場景中"設備監(jiān)控、數(shù)據(jù)采集需要后臺進程持續(xù)運行"的核心需求,對Android系統(tǒng)的進程管理機制進行的一次定制化適配。
在嵌入式開發(fā)過程中,原生系統(tǒng)往往僅提供通用化的功能與機制,無法滿足各行業(yè)的個性化、場景化需求,這就要求開發(fā)人員深入理解硬件平臺與系統(tǒng)底層邏輯,結合業(yè)務場景進行定制化開發(fā),解決實際業(yè)務痛點。
咨詢立即獲得專屬報價
華北區(qū)負責人
華東區(qū)負責人
華南區(qū)負責人
中西區(qū)負責人
相關產(chǎn)品 >
-
FET3568-C核心板
RK3568性能強而穩(wěn) 國產(chǎn)芯|飛凌嵌入式RK3568系列核心板,采用瑞芯微國產(chǎn)高性能AI處理器RK3568設計生產(chǎn),RK3568兼具CPU、GPU、NPU、VPU于一身,RK3568 性能、性價比在同類產(chǎn)品中具有較高優(yōu)勢,RK3568處理器是一款定位中高端的通用型SoC, 飛凌RK3568核心板主要面向工業(yè)互聯(lián)網(wǎng)、HMI、NVR存儲、車載中控、工業(yè)網(wǎng)關等領域。目前RK3568系列已經(jīng)批量穩(wěn)定出貨
了解詳情
-
FET3576-C核心板
飛凌嵌入式RK3576核心板集成了強大的處理器和豐富的接口,提供出色的計算能力和擴展性。RK3576核心板以其卓越的性能、低功耗和穩(wěn)定性,成為工業(yè)、AIoT、邊緣計算、智能移動終端等領域的理想選擇。無論是數(shù)據(jù)處理還是邊緣計算,RK3576都能為項目提供強大的硬件支持。核心板推薦選擇飛凌嵌入式瑞芯微系列RK3576J業(yè)級核心板、RK3576高性能核心板。 了解詳情
-
FET3562J-C核心板
RK3562核心板,采用高性能低功耗工業(yè)級芯片RK3562J設計,RK3562J是瑞芯微專為工業(yè)自動化及消費類電子設備打造的一款高性能、低功耗國產(chǎn)化應用處理器,集成了4個ARM Cortex-A53高性能核,主頻高達1.8GHz。RK3562核心板采用3組80Pin板對板連接器,可插拔式設計便于產(chǎn)品的安裝與維護。 了解詳情
-
FET3506J-S核心板
RK3506J是一款高性能的三核Cortex-A7應用處理器,專為智能工業(yè)應用而設計。飛凌嵌入式基于RK3506J設計的核心板,價格僅88元,滿載功耗僅0.7W,是一款值得推薦使用的工業(yè)級國產(chǎn)核心板,滿足電力、交通、工控等行業(yè)對國產(chǎn)化的要求。同時進行了充分的可靠性測試,確保在工業(yè)環(huán)境的可靠運行。
了解詳情


