Piszę plik do pobrania obsługi programu. Podczas tego działania pobierania uruchamiam pasek postępu, a następnie uruchamiam wątek, aby wykonać pobieranie. Ten wątek wysyła wiadomość do wątku interfejsu użytkownika, aby powiadomić, ile razy zostało pobranych. W wątku głównym (UI) aktualizuję wyświetlanie paska postępu po otrzymaniu wiadomości. Jeśli podczas pobierania wystąpi jakiś problem, wyśle ​​kolejną wiadomość. Gdy wątek główny otrzyma wiadomość, zatrzymuje pasek postępu i wyświetla nowe okno dialogowe AlertDialog, aby pokazać przyczynę błędu.

Oto specjalny test na to. Podczas pobierania przełącz program na ustawienia. Wyłącz WIFI/GPRS, aby wyłączyć sieć.

Kiedy wracam do mojego programu, powinien wyświetlić interfejs użytkownika w tle i wyskakujące okienko AlertDialog, aby pokazać powód, jak sobie życzę. Ale wyświetla tylko interfejs użytkownika w tle (co oznacza główną aktywność) i z półświetlnym podświetleniem, podobnie jak wyskakujące okienka. Kiedy naciskam z powrotem po raz pierwszy, nic się nie dzieje, poza tym, że podświetlenie jest jasne, tak jak zamykam wyskakujące okienko.

Myślę, że może to dlatego, że kiedy uruchamiam AlertDialog, moja aktywność nie jest na pierwszym planie.

Próbowałem użyć:

ActivityManager am = (ActivityManager)Update.this.getSystemService(Context.ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;

By ocenić, czy najważniejsza aktywność jest moja. Ale chcę pokazać okno dialogowe. Jeśli aktywność nie jest widoczna dla użytkownika, po powrocie do mojej aktywności chcę, aby wyświetlało się okno dialogowe.

7
Fakebear 10 czerwiec 2011, 12:14
Jakiego kontekstu używasz podczas tworzenia AlertDialog.Builder?
 – 
areyling
10 czerwiec 2011, 13:51
Mam ten sam problem. Czy rozwiązałeś to?
 – 
Jim
27 wrzesień 2011, 16:59

2 odpowiedzi

Najlepsza odpowiedź

Rzeczywiście okno dialogowe zostało już pokazane, ale nie jest widoczne dla użytkownika i stanie się widoczne po obróceniu urządzenia.

Wyglądało na to, że wystąpił problem z odświeżaniem/rysowaniem, jeśli zamkniesz okno dialogowe postępu i natychmiast pokażesz inne nowe okno dialogowe, gdy aktywność nie jest na pierwszym planie. Podczas moich testów taki problem nie występuje, jeśli poczekaj na zakończenie akcji odrzucania dla okna dialogowego postępu, a następnie pokaż nowe okno dialogowe.

Tak więc jedno rozwiązanie polega na tym, że najpierw wyświetla się AlertDialog, a następnie odrzuca ProgressDialog. To zadziałało dla mojej aplikacji.

3
Moses 25 listopad 2011, 07:15

Myślę, że w Dialog jest jakiś król błędów. Mam taką samą sytuację i jedynym rozwiązaniem było odrzucenie bieżącego okna dialogowego przez dialogDismiss(id) i ponowne wyświetlenie go przez showDialog(id).

1
biegleux 4 październik 2012, 00:05
1
Ten błąd pojawił się ponownie na Androidzie 9, który jest w stanie odtworzyć go konsekwentnie dzisiaj, prawie 9 lat w przyszłości… i to rozwiązanie nadal działa. Poważnie, Google?
 – 
0101100101
4 luty 2020, 05:40