Android线程主要退出

时间:2010-07-06 11:14:52

标签: java android multithreading

我在“onCreate”中有线程,它从网上获取内容。内容越来越多,我有进度对话框。

new Thread() {

     public void run() {

     Get_content() ;


    handler.sendEmptyMessage(0);
     }

     }.start();

但是如果我在运行时旋转显示(横向模式),我的应用程序会强制关闭。在日志中我有这个:“由于未捕获的异常导致主线退出”

这是我的日志:

  

W / dalvikvm(17144):threadid = 3:线程退出时未捕获异常(组= 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):at 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):at java.lang.reflect.Method.invokeNative(Native Method)   E / AndroidRuntime(17144):at java.lang.reflect.Method.invoke(Method.java:521)   E / AndroidRuntime(17144):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:782)   E / AndroidRuntime(17144):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)   E / AndroidRuntime(17144):at dalvik.system.NativeStart.main(Native Method)   I / dalvikvm(17144):threadid = 7:对信号3作出反应   I / ActivityManager(59):进程com.webservice(pid 17144)已经死亡。

1 个答案:

答案 0 :(得分:2)

正在发生的事情是方向改变,活动被杀死并重新创建。但是,由于您启动了一个线程并且线程仍在运行,因此它不会被终止,当它完成并尝试关闭进度对话框时,会导致FC,因为进度对话框不存在。这是一个非常常见的问题,您可以查看试图解决此问题的droid-fu库,或者您可以更聪明地处理您的Threaded任务(就好像它需要花费相当长的时间才能完成,然后也许把它放在后台服务中。)