workmanager是什麼?它是谷歌提供的architecture components 架構元件的庫中的其中乙個庫,workmanager有什麼用?官方解釋如下:
下面來看看這個庫怎麼用?
首先你需要在根build.gradle中加入
allprojects
}
然後在專案中的build.gradle中加入
dependencies
在裡面寫上你要處理的**,也就是你要做的工作,顧名思義,谷歌起名為worker。
2、選擇work請求(onetimeworkrequest(只執行一次任務的請求類),
periodicworkrequest(可以執行多次任務的請求,類似鬧鐘)
)
//只執行一次任務
onetimeworkrequest compressionwork =
new onetimeworkrequest.builder(workertyou.class)
.build();
//執行多次任務,每隔12個小時執行一次
periodicworkrequest.builder photocheckbuilder =
new periodicworkrequest.builder(workertyou.class, 12,
timeunit.hours);
//執行任務
workmanager.getinstance().enqueue(compressionwork);
3、監聽任務執行狀態
workmanager.getinstance().getstatusbyid(compressionwork.getid())
.observe(this, new observer()
});
4、限制任務執行條件constraints(例如裝置空閒的時候執行或者鏈結電源的時候使用等)
constraints
//只執行一次任務
constraints myconstraints = new constraints.builder()
//手機裝置空閒的時候使用
.setrequiresdeviceidle(true)
//手機接通電源的時候使用
.setrequirescharging(true)
//網路連線的時候執行任務
.setrequirednetworktype(networktype.connected)
//電池電量低於臨界水平不可用
.setrequiresbatterynotlow(true)
//可用儲存不能低於臨界值
.setrequiresstoragenotlow(true)
.build();
onetimeworkrequest compressionwork =
new onetimeworkrequest.builder(workertyou.class).setconstraints(myconstraints)
.build();
5、按順序執行任務
workmanager.getinstance()
.beginwith(worka)
// note: workmanager.beginwith() returns a
// workcontinuation object; the following calls are
// to workcontinuation methods
.then(workb) // fyi, then() returns a new workcontinuation instance
.then(workc)
.enqueue();
先執行任務a再執行任務b再執行任務c。
workmanager.getinstance()
// first, run all the a tasks (in parallel):
.beginwith(worka1, worka2, worka3)
// ...when all a tasks are finished, run the single b task:
.then(workb)
// ...then run the c tasks (in any order):
.then(workc1, workc2)
.enqueue();
同時執行worka1、worka2、worka3,然後執行workb,再同時執行workc1和workc2.
6、特殊順序處理workcontinuation
如圖執行這樣的順序應該怎麼處理:
7、為請求設定tag以方便獲取任務執行'狀態和取消
onetimeworkrequest cachecleanuptask =
new onetimeworkrequest.builder(mycachecleanupworker.class)
.setconstraints(myconstraints)
.addtag("cleanup")
.build();
8、執行任務傳值
setinputdata
//傳值
data mydata = new data.builder()
// we need to pass three integers: x, y, and z
.putint(key_x_arg, 42)
.putint(key_y_arg, 421)
.putint(key_z_arg, 8675309)
// ... and build the actual data object:
.build();
// ...then create and enqueue a onetimeworkrequest that uses those arguments
onetimeworkrequest mathwork = new onetimeworkrequest.builder(mathworker.class)
.setinputdata(mydata)
.build();
workmanager.getinstance().enqueue(mathwork);
//接收值
workmanager.getinstance().getstatusbyid(mathwork.getid())
.observe(lifecycleowner, status ->
});
const用法詳解
物件導向是c 的重要特性.但是c 在c的基礎上新增加的幾點優化也是很耀眼的 就const直接可以取代c中的 define 以下幾點很重要,學不好後果也也很嚴重 1.const常量,如const int max 100 優點 const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安...
const 用法詳解
物件導向是c 的重要特性.但是c 在c的基礎上新增加的幾點優化也是很耀眼的 就const直接可以取代c中的 define 以下幾點很重要,學不好後果也也很嚴重 1.const常量,如const int max 100 優點 const常量有資料型別,而巨集常量沒有資料型別。編譯器可以對前者進行型別安...
extern用法詳解
1 基本解釋 extern可以置於變數或者函式 前,以標示變數或者函式 的定義在別的檔案中,提示編譯器遇到此變數和函式 時在其他模組中尋找其定義。另外,extern也可用來進行鏈結指定。2 問題 extern 變數 在乙個原始檔裡定義了乙個陣列 char a 6 在另外乙個檔案裡用下列語句進行了宣告...