0

しばらくグーグルでドキュメントを読みましたが、答えが見つかりませんでした。私の[簡略化された]シナリオは次のとおりです。

ユーザーが最初にアプリにログインすると、同期要求が発生し、onPerformSync が呼び出されます。EventBus を介して AbstractThreadedSyncAdapter から MainActivity にイベントを投稿しようとしています。同期が完了したら、MainActivity で呼び出されてすべてが完了したことを示すイベントを投稿します、機能していません。私のコード:

AbstractThreadedSyncAdapter

 //Constructor
  public MyMoneySyncAdapter(Context context, boolean autoInitialize) {
         super(context, autoInitialize);
         this.context = context;
         EventBus.getDefault().post(new SyncEvent(SyncEvent.SyncStatus.Started));
     }

onPerformSync:

EventBus.getDefault().postSticky(new SyncEvent(SyncEvent.SyncStatus.Running));
//...some ops....
//all done
EventBus.getDefault().postSticky(new SyncEvent(SyncEvent.SyncStatus.Finished));

そして MainActivity:

@Override
    protected void onResume() {
        super.onResume();
        EventBus.getDefault().register(this);
        EventBus.getDefault().getStickyEvent(SyncEvent.class);
    }


public void onEventMainThread(SyncEvent event){
            //never gets called  
}

syncService からイベントを投稿することさえ可能ですか? そうでない場合、この問題の最善の解決策は何ですか?

ありがとう !

4

1 に答える 1

0

android:process:sync私はsyncAdapterで使用していましたが、これを削除するだけで動作しましたが、EventBusでは問題なくLocalBroadcastManager動作すると思います。これは、プロセス間通信を行う場合、LocalBroadcast または Event を送信できないためです。同じプロセス上にある必要があります。そうでない場合は、別のアプローチを使用する必要があります。

于 2014-12-15T19:08:59.680 に答える