W mojej aplikacji wyświetlam okno dialogowe podczas długotrwałego procesu w tle, który jest modalny.
To okno dialogowe jest ignorowane, gdy Android powraca z zadania w tle.Sprawdź, czy okno dialogowe można bezpiecznie odrzucić.
final ProgressDialog progressDialog = ProgressDialog.show(activity, "", "Doing something long running", true, true);
new Thread(new Runnable() {
public void run() {
someLongRunningCode(); // (not using AsyncTask!)
activity.runOnUiThread(new Runnable() {
public void run() {
progressDialog.dismiss();
}
});
}
}).start();
Teraz jednak, gdy użytkownik obraca urządzenie podczas jego proces nadal działa w tle aktywność jest odtworzona, a tym samym progressdialog zostaje oderwane od działalności.
Po długim procesie, Android oczywiście próbuje ukryć (teraz odłączone) okno dialogowe postępu, które następnie powoduje wyjątek: java.lang.IllegalArgumentException: View not attached to window manager
.
Czy istnieje sposób sprawdzenia, czy można bezpiecznie zamknąć okno dialogowe?
Edycja: A może jeszcze lepiej, czy istnieje sposób na dołączenie istniejącego okna dialogowego do nowo utworzonego działania?
Nowe, sklonowane okno dialogowe również będzie w porządku.
Właściwie najlepszym rozwiązaniem byłaby możliwość dołączenia istniejącego okna dialogowego do nowo utworzonej aktywności, ponieważ zadanie może nadal działać. Czy jest jakiś sposób na zrobienie tego? Również zaktualizowałem moje pytanie, aby to odzwierciedlić. – PureSpider
Jeśli nie korzystasz z osobnego układu/rysunków dla krajobrazu i portretu, możesz po prostu zastąpić configChange w swoim manifeście dla działania, aby nie zniszczyć działania (nadal będzie poprawnie obracać i zmieniać rozmiar dla ciebie). Inna opcja wymagałaby wiele pracy wokół obiektów OnSaveInstanceState i onRestoreInstanceState, a trzeba by bardzo uważać na problemy z synchronizacją, jeśli wątek faktycznie zakończy się w tym czasie. –
Ta metoda jest odradzana przez Google'a ... dlaczego? – PureSpider