在屏幕旋转后,ProgreeDialog出现leaked window com.android.internal的错误
来源:互联网 发布:中国电信网络套餐 编辑:程序博客网 时间:2024/06/03 05:42
在程序起始的时候,acticity启动一个线程去请求部分数据,这时在ui层,弹出一个进度条,正常情况下没有什么问题,但是当在线程没有运行结束,ProgressDialog还在show的时候,在log中会出现错误如下:
E/WindowManager( 244): Activity MyAct has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@433b7150 that was originally added hereE/WindowManager( 244): android.view.WindowLeaked: Activity MyAct has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@433b7150 that was originally added hereE/WindowManager( 244): at android.view.ViewRoot.<init>(ViewRoot.java:178)E/WindowManager( 244): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:147)E/WindowManager( 244): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:90)E/WindowManager( 244): at android.view.Window$LocalWindowManager.addView(Window.java:393)E/WindowManager( 244): at android.app.Dialog.show(Dialog.java:212)E/WindowManager( 244): at android.app.ProgressDialog.show(ProgressDialog.java:103)E/WindowManager( 244): at android.app.ProgressDialog.show(ProgressDialog.java:91)E/WindowManager( 244): at MyAct.send(MyAct.java:294)E/WindowManager( 244): at MyAct$4.onClick(MyAct.java:174)E/WindowManager( 244): at android.view.View.performClick(View.java:2129)E/WindowManager( 244): at android.view.View.onTouchEvent(View.java:3543)E/WindowManager( 244): at android.widget.TextView.onTouchEvent(TextView.java:4664)E/WindowManager( 244): at android.view.View.dispatchTouchEvent(View.java:3198)E/WindowManager( 244): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:857)E/WindowManager( 244): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:857)E/WindowManager( 244): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:857)E/WindowManager( 244): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:857)E/WindowManager( 244): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:857)E/WindowManager( 244): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1593)E/WindowManager( 244): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1089)E/WindowManager( 244): at android.app.Activity.dispatchTouchEvent(Activity.java:1871)E/WindowManager( 244): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1577)E/WindowManager( 244): at android.view.ViewRoot.handleMessage(ViewRoot.java:1140)E/WindowManager( 244): at android.os.Handler.dispatchMessage(Handler.java:88)E/WindowManager( 244): at android.os.Looper.loop(Looper.java:123)E/WindowManager( 244): at android.app.ActivityThread.main(ActivityThread.java:3739)E/WindowManager( 244): at java.lang.reflect.Method.invokeNative(Native Method)E/WindowManager( 244): at java.lang.reflect.Method.invoke(Method.java:515)E/WindowManager( 244): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:739)E/WindowManager( 244): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:497)E/WindowManager( 244): at dalvik.system.NativeStart.main(Native Method)
我做了一个简单的代码如下:
public class MyAct extends Activity implements Runnable { public ProgressDialog mProgress; // UI has a button that when pressed calls send public void send() { mProgress = ProgressDialog.show(this, "Please wait", "Please wait", true, true); Thread thread = new Thread(this); thread.start(); } public void run() { Thread.sleep(10000); Message msg = new Message(); mHandler.sendMessage(msg); } private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { mProgress.dismiss(); } };}
问题解决了。
主要是由于在屏幕旋转的时候,view发生改变,而另一个进程还在尝试改变老的视图,去掉diaolog.
我用两个方式,都比较简单:
1.是在配置文件中忽略横竖屏旋转。
android:configChanges="orientation|keyboardHidden"
2.是在OnPause的时候对progressDialog进行处理:
protected void onPause() { super.onPause(); if ((mProgress != null) && mProgress.isShowing()) { mProgress.dismiss(); } }
原文地址:http://www.dewen.org/q/3334/%E5%9C%A8%E5%B1%8F%E5%B9%95%E6%97%8B%E8%BD%AC%E5%90%8E%EF%BC%8CProgreeDialog%E5%87%BA%E7%8E%B0leaked+window+com.android.internal%E7%9A%84%E9%94%99%E8%AF%AF
- 在屏幕旋转后,ProgreeDialog出现leaked window com.android.internal的错误
- 在使用AsyncTask和ProgreeDialog时出现leaked window com.android.internal窗口泄露的错误
- Android错误:has leaked window com.android.internal.policy.impl.PhoneWindow$ that was originally added
- [Android]关于异步任务(AsyncTask)报leaked window com.android.internal.policy.PhoneWindow$DecorView错误
- Activity has leaked window com.android.internal.policy.impl.PhoneWindow
- has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView
- MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$
- has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView
- activity关闭和dialog.dismiss冲突的解决(Activity has leaked window com.android.internal.p
- com.com.adapterdialog.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$De
- Activity com.hotel.ui.LoginActivity has leaked window com.android.internal.policy.impl.PhoneWindow
- Android 报错android.view.WindowLeaked.....has leaked window com.android.internal.policy.
- Android排错:has leaked window com.android.internal.policy.impl.PhoneWindow$ that was originally added
- Android排错:has leaked window com.android.internal.policy.impl.PhoneWindow$ that was originally added
- Android排错:has leaked window com.android.internal.policy.impl.PhoneWindow$ that was originally added
- Android排错:has leaked window com.android.internal.policy.impl.PhoneWindow$ that was originally added
- Android排错:has leaked window com.android.internal.policy.impl.PhoneWindow$ that was originally added
- Android排错:has leaked window com.android.internal.policy.impl.PhoneWindow$ that was originally added
- 【Vista找回桌面的图标和修改启动时间】
- 写了一个小的网站困惑
- 泛型List<T>转存为XML文档
- Web网页的控件使用小巧记录
- 格式化输出的坑
- 在屏幕旋转后,ProgreeDialog出现leaked window com.android.internal的错误
- Linux2.6内核--对块IO层操作的讨论
- QT 4.6 Animation
- merge sort in golang
- Windows Data Types(VC VS .NET windows数据类型)
- 常用java代码片段之读取删除文件
- ACM之java速成 3(转)
- How to Allow MySQL Client to Connect to Remote MySQL server
- 基本排序算法:Python实现