我在“ onCreate”中有线程,该线程从Web获取内容。在获取内容时,我有进度对话框。
new Thread() {
public void run() {
Get_content() ;
handler.sendEmptyMessage(0);
}
}.start();
但是,如果我在运行时将显示器旋转到横向模式,则我的应用程序会强制关闭。在日志中,我有以下内容:“由于未捕获的异常而导致线程主退出”
这是我的日志:
W / dalvikvm(17144):threadid = 3:线程以未捕获的异常退出(group = 0x40013140)
E / AndroidRuntime(17144):未捕获的处理程序:由于未捕获的异常而导致线程主退出
E / AndroidRuntime(17144):java.lang.IllegalArgumentException:视图未附加到窗口管理器
E / AndroidRuntime(17144):位于android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:356)
E / AndroidRuntime(17144):位于android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:201)
E / AndroidRuntime(17144):位于android.view.Window $ LocalWindowManager.removeView(Window.java:400)
E / AndroidRuntime(17144):位于android.app.Dialog.dismissDialog(Dialog.java:268)
E / AndroidRuntime(17144):位于android.app.Dialog.access $ 000(Dialog.java:69)
E / AndroidRuntime(17144):位于android.app.Dialog $ 1.run(Dialog.java:103)
E / AndroidRuntime(17144):位于android.app.Dialog.dismiss(Dialog.java:252)
E / AndroidRuntime(17144):位于com.webservice.KursnaLista $ 1.handleMessage(KursnaLista.java:77)
E / AndroidRuntime(17144):位于android.os.Handler.dispatchMessage(Handler.java:99)
E / AndroidRuntime(17144):位于android.os.Looper.loop(Looper.java:123)
E / AndroidRuntime(17144):位于android.app.ActivityThread.main(ActivityThread.java:3948)
E / AndroidRuntime(17144):位于java.lang.reflect.Method.invokeNative(本机方法)
E / AndroidRuntime(17144):位于java.lang.reflect.Method.invoke(Method.java:521)
E / AndroidRuntime(17144):位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:782)
E / AndroidRuntime(17144):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
E / AndroidRuntime(17144):位于dalvik.system.NativeStart.main(本机方法)
I / dalvikvm(17144):线程ID = 7:对信号3作出反应
I / ActivityManager(59):进程com.webservice(pid 17144)已死。
最佳答案
发生的事情是方向改变,活动被杀死并重新创建。但是,由于您启动了一个线程并且该线程仍在运行,因此它不会被杀死,并且当它完成并尝试关闭“进度对话框”时,会导致FC,因为进度对话框不存在。这是一个非常常见的问题,您可以签出尝试解决此问题的droid-fu库,或者可以更聪明地执行Threaded任务(例如,如果要花费大量的时间才能完成,那么也许它在后台服务中)。