В моем приложении есть два вида деятельности: CreateOrderActivity
и PaymentResultActivity
. Для завершения платежа используется стороннее платежное приложение.ProgressDialog.show застрял во время обработки события Отто
CreateOrderActivity -> 3rd-party payment app -> PaymentResultActivity
И я хочу, чтобы отправить результат обратно CreateOrderActivity
поэтому я использую Отто:
CreateOrderActivity -> 3rd-party payment app -> PaymentResultActivity
^ |
|-------------------- Otto <----------------------
Вот код:
// PaymentResultActivity
bus.post(new PaymentFinishedEvent(resultCode));
finish();
// CreateOrderActivity
@Override
protected void onCreate(Bundle savedInstanceState) {
...
bus.register(this);
}
@Subscribe
public void onPaymentFinished(PaymentFinishedEvent event) {
checkPaymentResult(event.resultCode);
}
private void checkPaymentResult(int resultCode) {
Log.i("checkPaymentResult", "1");
Request request = buildCheckingPaymenResultRequest();
Log.i("checkPaymentResult", "2");
final ProgressDialog progressDialog = ProgressDialog.show(this, "", "Checking...", true);
Log.i("checkPaymentResult", "3");
request.execute(new Listener() { ... });
}
Когда я запустить приложение и платеж завершен, PaymentResultActivity
уволен, мероприятие отправлено по шине и методу checkPaymentResult
run с успехом. Но когда я снова добавлю новый заказ в приложение и закончу платеж, мероприятие также будет опубликовано, но приложение просто застрянет и не проверит результат.
Я добавил три строки отладки лесозаготовок в код выше, чтобы выяснить, на какой шаг приложение застревает, и это показывает, что 1
и 2
печатаются в Android Monitor, но 3
никогда не будет напечатано, что означает, что ProgressDialog.show
не смог выполнить успешно, и программа просто застряла там. Я не могу понять, почему код может завершиться неудачно во второй попытке.
Кстати, режим запуска PaymentResultActivity
- singleTop
, который требуется сторонним приложением.