code: private ListenableFuture<BroadcastResultHolder> postIntent(
        final Wrapper wrapper,
        final Intent intent,
        ListenableFuture<BroadcastResultHolder> oldResult,
        final AtomicBoolean abort,
        final Context context) {
      final Handler scheduler =
          (wrapper.scheduler != null) ? wrapper.scheduler : getMainHandler(context);
      return Futures.transformAsync(
          oldResult,
          new AsyncFunction<BroadcastResultHolder, BroadcastResultHolder>() {
            @Override
            public ListenableFuture<BroadcastResultHolder> apply(
                BroadcastResultHolder broadcastResultHolder) throws Exception {
              final BroadcastReceiver.PendingResult result =
                  ShadowBroadcastPendingResult.create(
                      broadcastResultHolder.resultCode,
                      broadcastResultHolder.resultData,
                      broadcastResultHolder.resultExtras,
                      true /*ordered */);
              wrapper.broadcastReceiver.setPendingResult(result);
              scheduler.post(
                  () -> {
                    ShadowBroadcastReceiver shadowBroadcastReceiver =
                        Shadow.extract(wrapper.broadcastReceiver);
                    shadowBroadcastReceiver.onReceive(context, intent, abort);
                  });
              return BroadcastResultHolder.transform(result);
            }
          },
          directExecutor());
    }
docs: Enforces that BroadcastReceivers invoked during an ordered broadcast run serially, passing
  along their results.