============= 1   view not attached to window manager

以下转自:http://blog.csdn.net/gaofeiyunb/article/details/5304936

今天在发布到开发板测试时发现java.lang.illegalargumentexception: view not attached to window manager问题

引起的原因:

A应用在使用Intent显示启动其他应用,当关闭其他应用显A应用界面时报错。

解决方法1:

A应用使用startActivityForResult(intent)启动其他应用

解决方法2:

关闭其他应用时每次都使用Intent重新拉起一遍A应用

**************************************

我的问题是:在A中启动B,B中有线程操作,结束时涉及到对话框的dismiss。如果在操作尚未结束时,按下HOME键,线程后台操作。此时重新进去A,等到线程操作完成就会出现这个异常。此时应该做一个判断,如下:

                // Dismiss the Dialog only when the parent Activity is still alive.
                if (
SelectContactsActivity!=null&&!SelectContactsActivity.this.isFinishing()) {
                    mProgressDialog.dismiss();
                }

 
没有看懂,先收下。

======= 1  解决安卓悬浮窗异常:java.lang.IllegalArgumentException

本文章由亓根火柴原创,转载请注明出处:http://blog.csdn.net/qigenhuochai/article/details/42678587

在开发安卓悬浮窗的过程中有可能会遇到这个异常:java.lang.IllegalArgumentException: View not attached to window manager。

原因:如果是在执行android.view.ViewManager.updateViewLayout(View view, LayoutParams params)这个方法时出错,表示在调用该方法前,该view并没有附加到ViewManager。

就是之前没有执行这个方法android.view.ViewManager.addView(View view, LayoutParams params),或者说 updateViewLayout方法在addView方法之前执行了。

解决方法:执行addView方法,并且updateViewLayout方法要在addView方法之后执行。

注意:重复执行addview添加同一个view会报其它错误,注意避免。

========1    java.lang.IllegalArgumentException: View not attached to window manager

  • at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:653)
  • at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:349)
  • at android.view.WindowManagerImpl$CompatModeWrapper.removeView(WindowManagerImpl.java:160)
  • at android.app.Dialog.dismissDialog(Dialog.java:319)
  • at android.app.Dialog.dismiss(Dialog.java:302)
  • at android.app.Dialog.cancel(Dialog.java:1104)
  • at android.app.Dialog.onTouchEvent(Dialog.java:617)
  • at android.app.Dialog.dispatchTouchEvent(Dialog.java:739)
  • at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1890)
  • at android.view.View.dispatchPointerEvent(View.java:7323)
  • at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3200)
  • at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3145)
  • at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4181)

今天在写程序中遇到如下问题,如此怪异,在网上找了很多,终于解决了问题:

java.lang.IllegalArgumentException: View not attached to window manager

解决方法:

在调用系统相机拍照相片后返回   protected void onActivityResult(int requestCode, int resultCode, Intent data)方法,那么可能会抛出这个异常,

原因就是返回activity后,重新运行onCreate方法,那些view重新画出来,某些需要初始化的变量没有设置好。

处理这个问题,只要有两种方法:(关键第二点)
1. 限制屏幕翻转
    可在AndroidManifest.xml中设定android:screenOrientation=”portrait”
2. 如果是需要翻转的,那么限制那些view做重画动作。
    可在AndroidManifest.xml中设定android:configChanges=”orientation|keyboardHidden|navigation”

==== ============ 1   View not attached to window manager解决方案

前几日出现这样一个Bug是一个RuntimeException,详细信息是这样子的:
java.lang.IllegalArgumentException: View not attached to window manager
    at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:356)
    at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:201)
    at android.view.Window$LocalWindowManager.removeView(Window.java:400)
    at android.app.Dialog.dismissDialog(Dialog.java:268)
    at android.app.Dialog.access$000(Dialog.java:69)
    at android.app.Dialog$1.run(Dialog.java:103)
    at android.app.Dialog.dismiss(Dialog.java:252)
    at xxx.onPostExecute(xxx$1.java:xxx)
首先是Google了下,发现引发这个的原因基本上都一致都是 Dismiss对话框的时候,Activity已经不再存在。

常发生这类Exception的情形都是,有一个费时的线程操作,需要在显示一个ProgressDialog,在任务开始的时候显示一个对话框,然后当任务完成了再Dismiss对话框,如果在此期间如果Activity因为某种原因被杀掉且又重新启动了,

那么当Dismiss的时候WindowManager检查发现Dialog所属的Activity已经不存在了,所以会报IllegalArgumentException: View not attached to window manager.

其实此类Exception的一重要的原因是,ProgressDialog的创建显示和取消 都允许在非UI线程中进程。在Android当中非UI线程是不允许操作UI相关的事情,比如添加移除View等,但是为会么允许创建显示和取消对话框呢?而且还有可能引发此Exception导致应用Crash。
要想避免此类Exception,就要正确的使用对话框,也要正确的使用线程。
正确的使用对话框。不要在非UI线程中使用对话框创建,显示和取消对话框。
那么对于异步操作显示对话框怎么办呢?

Activity都有相应的操作对话框的回调。比如onCreateDialog(),showDialog(),dimissDialog(),removeDialog()等等。这些因为都是Activity的方法,所以用起来更方便,也不用显示创建和操控Dialog对象,一切都由框架操控,相对来说比较安全。
另外就是一定要让对话框对象在Activity的可控制范围之内和生命周期之内,比如一定要是它的成员变量,并且在让对话框变量活跃在Activity的onCreate()和onDestroy()之间。

尽量少用单独线程,除非是真正的费时操作才用线程,线程也不要直接用Java式的匿名线程,除非是那种单纯的操作,操作完成后不需要做其他事情的。
尽可能多用Android提供的类比如AsyncTask等。

另外,如果线程操作过程中还需要与主线程有交互,那么最好保存一个线程的对象,并且线程内部最有一定的控制,这样可以让Activity更好的操控线程。
如果说某些操作是特别费时的,且是经常性的操作,比如从网络获取数据,或是从后台读取文件,或是导入/导出,恢复/备份的事情,最好放到后台Service中去做,然后在StatusBar中给出相应进度。

同样的问题,还会发生在Dialog 和PopopWindow 的dissmiss过程中。对应Dialog,Activity提供了统一的方法来管理对象的创建和销毁等,建议使用此类方法。

对于PopopWindow对象,建议子销毁的时候判断当前Activity是否被finish。

if(mAcitvity!=null && !mAcitivity.isFinish()){

popwindow.dissmiss();

}

随便提醒下,可能存在已知或未知的acitvity关闭的地方,比方说,旋转屏,如果没做处理,会导致activity重建。

参考:http://blog.csdn.net/xpsharp/article/details/7378832

bug_ _java.lang.IllegalArgumentException: View not attached to window manager的更多相关文章

  1. bug_ _java.lang.IllegalArgumentException: View not attached to window manager 2

    今天遇到一个很奇特的问题,当用户设置了PIN码,在锁屏界面正常解锁PIN码后,进入Launcher时显示com.android.phone 已停止运行.一开始猜想会不会是解锁PIN码的时候处理导致了P ...

  2. 关于java.lang.IllegalArgumentException: View not attached to window manager 错误的分析

    今天遇到一个很奇特的问题,当用户设置了PIN码,在锁屏界面正常解锁PIN码后,进入Launcher时显示com.android.phone 已停止运行.一开始猜想会不会是解锁PIN码的时候处理导致了P ...

  3. java.lang.IllegalArgumentException: View not attached to window manager

    公司项目线上bug: java.lang.IllegalArgumentException: View not attached to window manager at android.view.W ...

  4. decorview that was originally added here or java.lang.IllegalArgumentException: View not attached to window manager

    使用Dialog的时候,没少出现下面这两个报错 12-11 17:47:49.776: E/WindowManager(11461): android.view.WindowLeaked: Activ ...

  5. Android中 View not attached to window manager错误的解决办法

    前几日出现这样一个Bug是一个RuntimeException,详细信息是这样子的:java.lang.IllegalArgumentException: View not attached to w ...

  6. View not attached to window manager

    java.lang.IllegalArgumentException: View not attached to window manager 在用ProgressDialog的时候,任务结束后Dis ...

  7. View not attached to window manager crash 的解决办法

    View not attached to window manager crash 的解决办法 转自:http://stackoverflow.com/questions/22924825/view- ...

  8. 关于dialog引起的 java.lang.IllegalArgumentException: View=com.android.internal.policy.impl.PhoneWindow$DecorView not attached to window manager 错误的分析

    在跑Monkey测试的时候出现了一个比较特别的问题,先来看看Log: // CRASH: com.meizu.media.painter (pid 12491) // Short Msg: java. ...

  9. view not attached to windows manager与This Toast was not created with Toast.makeText()

      http://blog.sina.com.cn/s/blog_474928c90100x871.html     public class Ex04_1Activity extends Activ ...

随机推荐

  1. 越狱Season 1-Episode 1: the pilot

    the pilot: 美国电视剧新剧开播都会有一个试播来测试观众对新剧的接受程度,以此来决定是否再继续播下去,也可以说是一个开端,第一集,试播 -Tattoo Artist: That's it. t ...

  2. Android dip(dp) 与 sp的自适应问题

    本文转载于:http://www.oschina.net/question/272860_70761 今天碰到的一个问题,感觉应该其他人也会碰到,拿来分享一下. 我们都知道android在开发配置界面 ...

  3. Android 开发 之 Fragment 详解

    本文转载于 : http://blog.csdn.net/shulianghan/article/details/38064191 本博客代码地址 : -- 单一 Fragment 示例 : http ...

  4. Linux磁盘空间被未知资源耗尽【转】

    Linux磁盘空间被未知资源耗尽 在linux中,当我们使用rm在linux上删除了大文件,但是如果有进程打开了这个大文件,却没有关闭这个文件的句柄,那么linux内核还是不会释放这个文件的磁盘空间, ...

  5. debugging tools

    https://blogs.msdn.microsoft.com/debugdiag/ https://blogs.msdn.microsoft.com/debuggingtoolbox/2012/1 ...

  6. distinct和group by

    distinct:同时查询两个字段,另外一个字段(不是distinct的那个字段,下例是tagid)需要多个值,如下                 group by:同时查询两个字段,另外一个字段( ...

  7. 二十四种设计模式:外观模式(Facade Pattern)

    外观模式(Facade Pattern) 介绍为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用.示例有一个Message实体类,某对象对它 ...

  8. SET ROWCOUNT,SET NOCOUNT

    SET ROWCOUNT (Transact-SQL) 在停止特定查询之前要处理的行数(整数). 重要提示 在 SQL Server 的将来版本中,使用 SET ROWCOUNT 将不会影响 DELE ...

  9. shell脚本实例-matrix

    [Sat Feb 27 17:51:36 1038 /dev/pts/0 192.168.2.250 ~/sh]#cat matrix blue="\033[0;34m" brig ...

  10. codevs-1447取出整数的一部分

    说实在的,这个题目真不想写了…… 1447 取出整数的一部分 题目描述 Description 假如有一个整数(int):145678,现在我做截取该数一部份的操作,如输入4,返回前4位即1456;如 ...