2

私はIBM WorkManager (v8.0.0)を使用して、メイン スレッドとは非同期の作業を行っています。

このために、次のコードを使用します。

// wm = via resource injected WorkManager

WorkItem item = wm.startWork(work, WorkManager.INDEFINITE, new WorkListener() {

  @Override
  public void workStarted(WorkEvent arg0) {
  }

  @Override
  public void workRejected(WorkEvent arg0) {
  }

  @Override
  public void workCompleted(WorkEvent arg0) {
    WorkException exception = arg0.getException();
    if (null != exception) {
      throw new RuntimeException("WorkCompleted with Exception");
    }
  }

  @Override
  public void workAccepted(WorkEvent arg0) {
  }
});

WorkEventが例外なく完了している限り、これは非常にうまく機能します。しかし、それが例外で完了したとき、メインスレッドに通知して、それ以上の WorkItems をWorkManager.

を発生させてメインスレッドに通知できると思っていRunetimeExceptionましたが、ログを分析したところ、その瞬間に例外がスローされ、メインスレッドがすべてWorkItemsを に送信し、メソッドのWorkManager呼び出しを終了したことがわかりましjoinWorkManager。これでは遅すぎます (ほとんどの場合、 50.000 項目がWorkManager) によって実行される必要があります。

WorkManagerでは、で例外が認識されたときに、メインスレッドを中断して、 にさらにアイテムを送信するのを止めるにはどうすればよいworkCompletedでしょうか?

4

1 に答える 1