Data myData = new Data.Builder() .putInt(KEY_ONE_INT, aInt) .putIntArray(KEY_ONE_INT_ARRAY, aIntArray) .putString(KEY_ONE_STRING, aString) .build();
inline fun workDataOf(vararg pairs: Pair<String, Any?>): Data
val data = workDataOf( KEY_MY_INT to myIntVar, KEY_MY_INT_ARRAY to myIntArray, KEY_MY_STRING to myString )
class MyWork(context: Context, params: WorkerParameters) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
return try { // Do something Result.success() } catch (error: Throwable) { Result.failure() } } }
Tidak seperti Worker, kode ini tidak berjalan pada Executor yang ditetapkan dalam Konfigurasi WorkManager Anda.
override suspend fun doWork(): Result = withContext(Dispatchers.IO) {
Kebutuhan untuk mengubah Dispatcher yang digunakan CoroutineWorker adalah hal yang jarang terjadi dan Dispatchers.Default merupakan opsi terbaik untuk sebagian besar kasus.
@RunWith(JUnit4::class) class MyWorkTest { private lateinit var context: Context
@Before fun setup() { context = ApplicationProvider.getApplicationContext() }
@Test fun testMyWork() { // Get the ListenableWorker val worker = TestListenableWorkerBuilder<MyWork>(context).build()
// Run the worker synchronously val result = worker.startWork().get()
assertThat(result, `is`(Result.success())) } }
override suspend fun doWork(): Result { val serverUrl = inputData.getString("SERVER_URL")
return try { // Do something with the URL Result.success() } catch (error: TitleRefreshError) { if (runAttemptCount <3) { Result.retry() } else { Result.failure() } } } }
@Test fun testMyWorkRetry() { val data = workDataOf("SERVER_URL" to "http://fake.url")
// Get the ListenableWorker with a RunAttemptCount of 2 val worker = TestListenableWorkerBuilder<MyWork>(context) .setInputData(data) .setRunAttemptCount(2) .build()
// Start the work synchronously val result = worker.startWork().get()
assertThat(result, `is`(Result.retry())) }
@Test fun testMyWorkFailure() { val data = workDataOf("SERVER_URL" to "http://fake.url")
// Get the ListenableWorker with a RunAttemptCount of 3 val worker = TestListenableWorkerBuilder<MyWork>(context) .setInputData(data) .setRunAttemptCount(3) .build()
assertThat(result, `is`(Result.failure())) }
"Kami bekerja dengan Google Cloud untuk menciptakan pengalaman seluler baru yang memungkinkan pelanggan, di mana pun mereka berada, mengambil foto perabotan serta barang-barang rumah tangga dan dengan cepat menemukan produk itu atau yang serupa dalam katalog online kami. Cloud Vision Product Search API memberikan IKEA cara yang cepat dan mudah untuk mengindeks katalog kami, sementara Object Detection and Tracking API ML Kit memungkinkan kami mengimplementasikan fitur dengan mulus pada jendela bidik langsung di aplikasi kami. Google Cloud membantu kami memanfaatkan Vision Product Search dan kami sangat senang mengeksplorasi bagaimana hal ini bisa membantu kami menciptakan pengalaman yang lebih baik dan lebih nyaman bagi pelanggan kami.” - Susan Standiford, Chief Technology Officer of Ingka Group, mitra strategis dalam sistem waralaba IKEA dan operator IKEA di 30 market.
“Pengguna kami sangat tertarik dengan memancing, jadi menangkap dan memiliki akses ke gambar tangkapan dan informasi spesies merupakan hal yang sangat penting bagi pengalaman mereka. Melalui AutoML Vision Edge, kami berhasil meningkatkan jumlah tangkapan yang tercatat dengan informasi spesies sebesar 30%, dan meningkatkan akurasi model pengenalan spesies dari 78% menjadi 88%.”- Dimitris Lachanas, Android Engineering Manager di Fishbrain
“Melalui AutoML Vision Edge, kami dapat membuat model di perangkat yang sangat prediktif dari awal. Dengan peningkatan pada algoritme pengenalan makanan yang canggih, Snap It, kami berhasil meningkatkan jumlah kategori makanan yang bisa digolongkan oleh pelanggan kami dalam gambar sebesar 21% sekaligus mengurangi tingkat error sebesar 36%, jumlah yang sangat besar untuk pelanggan kami.” - Will Lowe Ph.D., Director of Data Science & AI, Lose It!