我的應用有兩個活動,CreateOrderActivity
和PaymentResultActivity
。第三方付款應用程序用於完成付款。ProgressDialog.show在處理Otto事件時卡住
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
運行成功。但是,當我在應用再次發出新訂單並完成付款時,活動也會發布,但應用只會卡住,不會檢查結果。
我添加的三條線的調試日誌記錄到上面的代碼以找出在該步驟中,應用程序被卡住,並且它顯示出該1
和2
在Android監視器進行打印,但是3
將永遠不會被印刷,其意味着ProgressDialog.show
無法成功執行,程序剛剛卡在那裏。我不明白爲什麼代碼只能在第二次嘗試中失敗。
順便說一下,PaymentResultActivity
的啓動模式是singleTop
,這是第三方應用程序所要求的。