android - 应用程序在屏幕旋转时崩溃

标签 android screen-orientation

我正在线程中实现进度对话框。它在横向或纵向模式下工作正常。 但是当设备旋转时,应用程序崩溃并给出以下异常:

我的androidMainfest.xml

 <activity
        android:name="and.androidrest.Myactivity"
        android:label="@string/app_name"
        android:launchMode="standard" >

我的 Activity 代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sax_parser);
    callDialog(); 
}
public void callDialog(){
    progressDialog = new ProgressDialog(this);
    progressDialog.setTitle("Please wait..");
    progressDialog.setCancelable(false);
    progressDialog.setMessage("Loading...");
    progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
    progressDialog.show();


    new Thread(new Runnable(){
        public void run(){
            try{
                Thread.sleep(2000);           
            } 
            catch (Exception e){
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            if(progressDialog != null){ 
                try{
                    progressDialog.dismiss();
                    progressDialog=null;
                }
                catch(Exception e) {
                    e.printStackTrace();
                }          
            }            
        }
    }).start();      
}

这是我的 LogCat:

03-04 09:54:53.825: E/WindowManager(1309): Activity com.example.emailsending.SaxParserActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@405217f8 that was originally added here
03-04 09:54:53.825: E/WindowManager(1309): android.view.WindowLeaked: Activity com.example.emailsending.SaxParserActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@405217f8 that was originally added here
03-04 09:54:53.825: E/WindowManager(1309):  at android.view.ViewRoot.<init>(ViewRoot.java:258)
03-04 09:54:53.825: E/WindowManager(1309):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:148)
03-04 09:54:53.825: E/WindowManager(1309):  at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
03-04 09:54:53.825: E/WindowManager(1309):  at android.view.Window$LocalWindowManager.addView(Window.java:424)
03-04 09:54:53.825: E/WindowManager(1309):  at android.app.Dialog.show(Dialog.java:241)
03-04 09:54:53.825: E/WindowManager(1309):  at com.example.emailsending.SaxParserActivity.callDialog(SaxParserActivity.java:157)
03-04 09:54:53.825: E/WindowManager(1309):  at com.example.emailsending.SaxParserActivity.onCreate(SaxParserActivity.java:52)
03-04 09:54:53.825: E/WindowManager(1309):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-04 09:54:53.825: E/WindowManager(1309):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
03-04 09:54:53.825: E/WindowManager(1309):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-04 09:54:53.825: E/WindowManager(1309):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-04 09:54:53.825: E/WindowManager(1309):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-04 09:54:53.825: E/WindowManager(1309):  at android.os.Handler.dispatchMessage(Handler.java:99)
03-04 09:54:53.825: E/WindowManager(1309):  at android.os.Looper.loop(Looper.java:123)
03-04 09:54:53.825: E/WindowManager(1309):  at android.app.ActivityThread.main(ActivityThread.java:3683)
03-04 09:54:53.825: E/WindowManager(1309):  at java.lang.reflect.Method.invokeNative(Native Method)
03-04 09:54:53.825: E/WindowManager(1309):  at java.lang.reflect.Method.invoke(Method.java:507)
03-04 09:54:53.825: E/WindowManager(1309):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-04 09:54:53.825: E/WindowManager(1309):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-04 09:54:53.825: E/WindowManager(1309):  at dalvik.system.NativeStart.main(Native Method)
03-04 09:54:53.906: D/dalvikvm(1309): GC_EXTERNAL_ALLOC freed 107K, 52% free 2616K/5379K, external 910K/1038K, paused 66ms
03-04 09:54:53.995: D/AndroidRuntime(1309): Shutting down VM
03-04 09:54:53.995: W/dalvikvm(1309): threadid=1: thread exiting with uncaught exception (group=0x40015560)
03-04 09:54:54.005: E/AndroidRuntime(1309): FATAL EXCEPTION: main
03-04 09:54:54.005: E/AndroidRuntime(1309): java.lang.IllegalArgumentException: View not attached to window manager
03-04 09:54:54.005: E/AndroidRuntime(1309):     at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:355)
03-04 09:54:54.005: E/AndroidRuntime(1309):     at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:200)
03-04 09:54:54.005: E/AndroidRuntime(1309):     at android.view.Window$LocalWindowManager.removeView(Window.java:432)
03-04 09:54:54.005: E/AndroidRuntime(1309):     at android.app.Dialog.dismissDialog(Dialog.java:278)
03-04 09:54:54.005: E/AndroidRuntime(1309):     at android.app.Dialog.access$000(Dialog.java:71)
03-04 09:54:54.005: E/AndroidRuntime(1309):     at android.app.Dialog$1.run(Dialog.java:111)
03-04 09:54:54.005: E/AndroidRuntime(1309):     at android.os.Handler.handleCallback(Handler.java:587)
03-04 09:54:54.005: E/AndroidRuntime(1309):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-04 09:54:54.005: E/AndroidRuntime(1309):     at android.os.Looper.loop(Looper.java:123)
03-04 09:54:54.005: E/AndroidRuntime(1309):     at android.app.ActivityThread.main(ActivityThread.java:3683)
03-04 09:54:54.005: E/AndroidRuntime(1309):     at java.lang.reflect.Method.invokeNative(Native Method)
03-04 09:54:54.005: E/AndroidRuntime(1309):     at java.lang.reflect.Method.invoke(Method.java:507)
03-04 09:54:54.005: E/AndroidRuntime(1309):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-04 09:54:54.005: E/AndroidRuntime(1309):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-04 09:54:54.005: E/AndroidRuntime(1309):     at dalvik.system.NativeStart.main(Native Method)

我该如何解决这个问题?

最佳答案

您正在 Activity 中使用进度日志。所以当你旋转手机时它会抛出 leakwindow 异常..为此你需要在旋转时关闭进度......

用这个可以解决你的问题

@Override
public void onPause() 
{
    super.onPause();

    if(progressDialog != null)
    {
        progressDialog.dismiss();
    }

}

关于android - 应用程序在屏幕旋转时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22145982/

相关文章:

java - 不使用 onConfigurationChanged() 跟踪方向变化

java - 如何在android中的非主要 Activity 中设置屏幕方向

android - 为什么它说 "deprecated"是我唯一可以用于所选 API 级别的方法?

java - android点击按钮没有触发事件

Android:如何对标准 android 短信 GUI 进行编程更改

c# - 如何在 UWP 应用程序中锁定平板电脑屏幕旋转?

iphone - 以编程方式设置 iPhone 方向的正确方法是什么?

android - 我不想在更改时刷新 fragment

java - 创建一个在 editText 更改时运行的方法

android - 方向改变时的 radio 组行为