前提・実現したいこと
androidxのWorkerManagerを使用し、バックグラウンドで通信を行うアプリを作成しています。
公開したアプリで、androidのバージョンに関係なく、常に発生しておらず、時折発生しております。
※自端末では発生しておらず、firebase Crashlyticsなどでは大量に発生が見えます。
発生している問題・エラーメッセージ
message
trace
1java.lang.Class.asSubclass (Class.java:2477) 2androidx.work.WorkerFactory.createWorkerWithDefaultFallback (WorkerFactory.java:88) 3androidx.work.impl.WorkerWrapper.runWorker (WorkerWrapper.java:242) 4androidx.work.impl.WorkerWrapper.run (WorkerWrapper.java:136) 5androidx.work.impl.utils.SerialExecutor$Task.run (SerialExecutor.java:91) 6java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167) 7java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641) 8java.lang.Thread.run (Thread.java:764)
該当のソースコード
実際にどこで発生しているか不明ですので、WorkerManagerを呼び出している部分のみ抜粋しています。
実行
kotlin
1class Activity : :AppCompatActivity(){ 2 override fun onCreate(savedInstanceState: Bundle?) { 3 super.onCreate(savedInstanceState) 4 5 WorkManager.getInstance(application) 6 .getWorkInfoByIdLiveData(DataCollectWorker.allRequest()) 7 } 8} 9 .getWorkInfoByIdLiveData(DataCollectWorker.allRequest())
呼び出し用
kotlin
1object DataCollectWorker{ 2 fun allRequest(): UUID { 3 Util.log.d("allRequest") 4 val request: OneTimeWorkRequest = OneTimeWorkRequestBuilder<DataAllRequestUseCase>() 5 .build() 6 7 WorkManager 8 .getInstance(applicationContext) 9 .beginUniqueWork( 10 "ALL" 11 , ExistingWorkPolicy.REPLACE 12 , request 13 ).enqueue() 14 15 return request.id 16 } 17 18 fun singleRequest(url: String): UUID { 19 Util.log.d("newRequest") 20 val request: OneTimeWorkRequest = OneTimeWorkRequestBuilder<DataSingleRequestUseCase>() 21 .addTag(TAG_ONETIME) 22 .setInputData( 23 workDataOf( 24 DATA_URL to url 25 ) 26 ).build() 27 28 WorkManager 29 .getInstance(applicationContext) 30 .beginUniqueWork( 31 "ONE_TIME" 32 , ExistingWorkPolicy.REPLACE 33 , request 34 ).enqueue() 35 36 return request.id 37 } 38}
動作しているところ
kotlin
1class DataAllRequestUseCase(appContext: Context, params: WorkerParameters) : CoroutineWorker(appContext, params) { 2 override suspend fun doWork(): Result = withContext(Dispatchers.IO) { 3 // いろいろな処理 4 5 return@withContext Result.success() 6 } 7 8} 9 10class DataSingleRequestUseCase(appContext: Context, params: WorkerParameters) : CoroutineWorker(appContext, params) { 11 override suspend fun doWork(): Result = withContext(Dispatchers.IO) { 12 // いろいろな処理 13 14 return@withContext Result.success() 15 } 16}
試したこと
ライブラリのバージョンの変更しましたが、変わりませんでした。
補足情報(FW/ツールのバージョンなど)
端末:Huawei P10 lite
androidバージョン: 8.0.0
ライブラリ: androidx.work:work-runtime-ktx:2.3.4
IDE : android studio 4.0
targetSdkVersion : 29
あなたの回答
tips
プレビュー