Ваш вопрос о том, какой диалог будет отображаться первым, является неопределенным. Бывают случаи, когда ордер переходит на флоп. Но обычно B показывалось бы первым, так как 9/10 он поместит свое событие в поток пользовательского интерфейса, прежде чем ваш поток сможет обнаружить проблему.
Я бы предложил использовать AsyncTask для выполнения любых механизмов, необходимых для запуска, затем в onPostExecute () разрешить возобновить запуск вашей программы, чтобы она могла показыватьDialog (B) для всего, что ей нужно. Таким образом, если отображается диалоговое окно A, вы можете остановить процесс запуска и не показывать b.
public class MyAsyncStartup extends AsyncTask<Integer,Integer,MyResult> {
MyActivity activity;
public MyResult handleBackground() {
if( somethingWentWrong ) return null;
}
public onPostExecute( MyResult result ) {
if( result == null ) {
showDialog(B);
} else {
activity.resumeStartupAndShowA();
}
}
}