Мое приложение выполняет некоторую сетевую активность или извлекает данные из веб-сервисов в фоновом потоке. Перед запуском открывается диалоговое окно прогресса. Диалог отклоняется на обработчике. Все это прекрасно работает, за исключением случаев, когда ориентация экрана меняется, когда диалог вверх. В этот момент мое приложение отключается. И im использует два макета для одного портрета в res/layout. Папка и один ландшафт в res/макет-земля. мое приложение получает сбой, когда я меняю ориентацию экрана с портрета на пейзаж или наоборот.Изменение ориентации экрана экрана при активном диалоге и фоновом потоке?
Я знаю, почему это происходит.
Когда я переключаю ориентации, Android создаст новый вид. Я, вероятно, получаю сбои, потому что \ background thread пытается изменить состояние на старом. (Может также возникнуть проблема, потому что фоновый поток не находится в потоке пользовательского интерфейса). Так может кто-нибудь приятель сказать мне, как решить это, чтобы я мог продолжить.
Как я могу обрабатывать изменение ориентации экрана, когда диалог выполнения и фоновый поток активны?
Заранее спасибо.
мой код здесь
public class LoginActivity extends Activity {
EditText edUserName, edPassword;
Button btnLogin;
TextView txt_Alert;
ProgressDialog dialog;
String url, Status, result;
ConnectToWebService cn;
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
dialog.dismiss();
if (check_Status()) {
login();
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setTitle("Login");
edUserName = (EditText) findViewById(R.id.edName);
edPassword = (EditText) findViewById(R.id.edPass);
btnLogin = (Button) findViewById(R.id.btnLogin);
txt_Alert = (TextView) findViewById(R.id.txt_Required);
btnLogin.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
String uName = edUserName.getText().toString().trim();
String Pass = edPassword.getText().toString();
cn = new ConnectToWebService();
processThread();
}
protected void processThread() {
dialog = ProgressDialog.show(LoginActivity.this, "",
"Singing in ...", false);
new Thread() {
public void run() {
Status = cn.callWebService(url);
handler.sendEmptyMessage(0);
}
}.start();
}
Мой LogCat
03-23 00:03:48.865: E/AndroidRuntime(11799): java.lang.IllegalArgumentException: View not attached to window manager
03-23 00:03:48.865: E/AndroidRuntime(11799): at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355)
03-23 00:03:48.865: E/AndroidRuntime(11799): at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:200)
03-23 00:03:48.865: E/AndroidRuntime(11799): at android.view.Window$LocalWindowManager.removeView(Window.java:432)
03-23 00:03:48.865: E/AndroidRuntime(11799): at android.app.Dialog.dismissDialog(Dialog.java:278)
03-23 00:03:48.865: E/AndroidRuntime(11799): at android.app.Dialog.access$000(Dialog.java:71)
03-23 00:03:48.865: E/AndroidRuntime(11799): at android.app.Dialog$1.run(Dialog.java:111)
03-23 00:03:48.865: E/AndroidRuntime(11799): at android.app.Dialog.dismiss(Dialog.java:268)
03-23 00:03:48.865: E/AndroidRuntime(11799): at com.palewar.coinop.LoginActivity$1.handleMessage(LoginActivity.java:42)
03-23 00:03:48.865: E/AndroidRuntime(11799): at android.os.Handler.dispatchMessage(Handler.java:99)
03-23 00:03:48.865: E/AndroidRuntime(11799): at android.os.Looper.loop(Looper.java:130)
03-23 00:03:48.865: E/AndroidRuntime(11799): at android.app.ActivityThread.main(ActivityThread.java:3683)
03-23 00:03:48.865: E/AndroidRuntime(11799): at java.lang.reflect.Method.invokeNative(Native Method)
03-23 00:03:48.865: E/AndroidRuntime(11799): at java.lang.reflect.Method.invoke(Method.java:507)
03-23 00:03:48.865: E/AndroidRuntime(11799): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:861)
03-23 00:03:48.865: E/AndroidRuntime(11799): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:619)
03-23 00:03:48.865: E/AndroidRuntime(11799): at dalvik.system.NativeStart.main(Native Method)
ya, Это тоже работает для меня. Причина в том, что мы Portrait или LandScape Device при отображении ProgressBar, то тогда будет вызван метод onDestroy(). – String