Android中的後台程式優化

2021-07-25 20:08:34 字數 3267 閱讀 5457

(1)後台執行需求

推送訊息/廣告

資料同步/檔案傳輸

使用者活動跟蹤、

定時任務/鬧鐘

內容提供者

(2)實現自動後台執行

stikcy service

@override

public

intonstartcommand(intent intent, int flags, int startid)

靜態註冊broadcastreceiver監聽系統級事件

(3)禁用無用元件

/**

* 監聽系統事件的receiver

*/public

class

autostartreceiver

extends

broadcastreceiver

/*** 在不需要乙個receiver時,可使用該介面disable掉,

* 這樣當匹配intentfilter的事件發生時,就不會再啟動該控制項了

*@param context

*/public

static

void

disable(context context)

@override

public

void

onreceive(context context, intent intent)

}

android:name=".autostartreceiver"

android:enabled="true"

android:exported="true">

android:name="android.intent.action.boot_completed"/>

android:name="android.intent.action.airplane_mode"/>

intent-filter>

receiver>

(4)定時任務

timer

handler.postdelayed

alarmmanager(使用硬體時鐘)

public

class

alarmreceiver

extends

broadcastreceiver

/*** 啟動乙個一次性鬧鐘

* 即使被kill掉也可以發生

*@param context

*/public

static

void

startonetimealarm(context context)

@override

public

void

onreceive(context context, intent intent)

}

(5)jobscheduler

對執行時機無需精確控制

需要特定情況滿足才執行

只能動態註冊

@targetapi(build.version_codes.lollipop)

public

class jobmanager

}

@targetapi(build.version_codes.lollipop)

public

class

testjobservice

extends

jobservice

@override

public

boolean

onstartjob(jobparameters params)

@override

public

boolean

onstopjob(jobparameters params)

}

android:name=".testjobservice"

android:enabled="true"

android:exported="true"

android:permission="android.permission.bind_job_service">

service>

(6)wakelock

private void backgroundtask()  catch (interruptedexception e)  finally 

}

(7)監控電池狀態

public

class

batteryreceiver

extends

broadcastreceiver

@override

public

void

onreceive(context context, intent intent) else

if (intent.action_battery_okay.equals(action)) else

if (intent.action_battery_changed.equals(action)) }}

android:name=".batteryreceiver"

android:enabled="true"

android:exported="true">

receiver>

intentfilter filter = new intentfilter(intent.action_battery_changed);

filter.addaction(intent.action_battery_low);

filter.addaction(intent.action_battery_okay);

registerreceiver(receiver, filter);

(8)doze

6.0引入的打盹模式

jobs 顯示後台程式

作用 jobs命令顯示後台任務的執 況。用法 jobs 選項 jobspec 主要選項如下。l 長輸出用法,顯示全部內容。n 不輸出資訊。p 只輸出程序號。r 只輸出執行的程序。jobspec 表示後台任務號碼。應用例項如下。先把兩個程序放在系統後台執行,然後使用jobs命令檢視後台任務的執 況 d...

nohup後台執行 關閉後台程式

參考 在跑時間比較長的程式,或者列印資訊比較多,或者網路不穩定時,可以採用後台執行程式,然後把列印資訊儲存在檔案中,等程式結束後再檢查日誌,完成該功能可以用以下命令 1.nohup python3 u test.py test.log 2 1 2.回車 3.輸入exit命令退出終端 4.關閉shel...

ubuntu 前台程式和後台程式

以前知道了 命令後,經常使用她把程式從前台轉換到後台。後來突然想時候那個程式了,我不知所措了。本文與 ubuntu 前台程式和後台程式 這裡一般是命令後加乙個 命令即可。比如 1 31098 2 31570 輸入命令 jobs 後,發現我們的那個後台程式了。1 running pc2server 2...