最近遇到一个奇葩的问题,好郁闷 之前也没有仔细看。问题偶尔出现一次。再去查看日志时,出现

view.WindowManager$BadTokenException: Unable to add window…is not valid; is your activity running?

什么情况,activity is runing? 对呀,activity没有destory呀,在跑呢,怎么会出现 对话框 附加到activity上加不了呢,还说无效的,似是activity被destory了呢。

后面一一检查 代码,确实 存在 activity 被destory时,异常还没有捕获到,而异步的AsynTask 还在运行呢。之后异常被捕获到了,再用对话框显示错误时,就会报错了,activity都死了,对话框还能活呀,再说此时提示已经没有意义了。应该丢掉 放弃 后续的处理。

那么 其实只需要 在异常 任务中 加上 isFinishing() 判断下,若activity挂了,就不管了。...

     new AsyncTask<Void, Void, Object>(){
boolean isNoNetException = false;
boolean isNetLagException = false; //网络超时等不稳定 异常
boolean isConnException = false; //连接掉了,需要重新登录
@Override
protected void onPreExecute() {
//TODO 清空掉 所有的已填写的数据
pd = new ProgressDialog(SCInfoGainActivity.this);
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pd.setMessage(getString(R.string.pop_window_waiting_submit_tip));
pd.show();
} @Override
protected Object doInBackground(Void... params) {
DataService ds = new DataService(SCInfoGainActivity.this);
Object retVal = null;
try {
retVal = ds.persubmitServiceChangeInfo(checkPhoneCustInfo.getUserId(), servicenum, checkPhoneCustInfo.getNettype(), serviceLists);
}catch (HessianConnectionException e) {
if(!DeviceUtil.isConnect(SCInfoGainActivity.this)){
//没网络发生的异常
isNoNetException = true;
}else{
//网络掉线了,请重新
isNetLagException = true;
}
}catch (SocketTimeoutException e) {
L.v(SCInfoGainActivity.class.getSimpleName(), "SocketTimeoutException ... "+e.getLocalizedMessage());
if(!DeviceUtil.isConnect(SCInfoGainActivity.this)){
isNoNetException = true; //没网络发生的异常
}else{
isNetLagException = true; //网络掉线了不稳定,请重新
}
e.printStackTrace();
}catch (ConnectException e){
L.v(SCInfoGainActivity.class.getSimpleName(), "SocketTimeoutException ... "+e.getLocalizedMessage());
if(!DeviceUtil.isConnect(SCInfoGainActivity.this)){
isNoNetException = true; //没网络发生的异常
}else{
isConnException = true; //网络掉线了不稳定,请重新
}
}catch (Exception e) {
//不是连接上的异常,比较复杂 有各种服务端返回的异常信息....
e.printStackTrace();
}
return retVal;
} @Override
protected void onPostExecute(Object result) {
if(isFinishing()) return ; //若activity 都没有了,没有必要弹对话框了
pd.dismiss();
if(isNoNetException){
tipDialog.setContent(getString(R.string.tip_window_checknet));
tipDialog.show();
}else if(isNetLagException){
tipDialog.setContent(getString(R.string.tip_window_nostable_net));
tipDialog.show();
}else if(isConnException){
tipDialog.setContent(getString(R.string.tip_window_loseconn));
tipDialog.show();
}else{
handlePersubmitOrder(result);
}
} }.execute();

AsyncTask 与 对话框显示 view.WindowManager$BadTokenException: Unable to add window…is not valid; is your a的更多相关文章

  1. Activity has leaked window that was originally added -界面退出时未关闭对话框异常 android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running? -

    退出Activity时弹出登录框,点击确定finish当前Activity,结果报了这个错,随后查找资料知道 原因: 是因为退出Activity时没有关闭弹出框,出现了这个错误 解决方法: 只需要在a ...

  2. bug_ _ android.view.WindowManager$BadTokenException: Unable to add window -- token

    ========4       关于android的一个常见错误:Unable to add window --token is not valid android.view.WindowManage ...

  3. Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

    在广播中启动一个Dialog时出现如下错误信息:Caused by: android.view.WindowManager$BadTokenException: Unable to add windo ...

  4. 关于ProgressDialog.show抛出android.view.WindowManager$BadTokenException: Unable to add window

    下午摆弄ProgressDialog,进入就抛错:android.view.WindowManager$BadTokenException: Unable to add window -- token ...

  5. android.view.WindowManager$BadTokenException: Unable to add window

    这是在加载dialog时出现的一个异常.转载地址:http://hi.baidu.com/fbdfp/item/7dea2d0ade9121813d42e23d 扔了好久的android又开始断断续续 ...

  6. android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

      原博客地址:http://aijiawang-126-com.javaeye.com/blog/662336 在Activity中newSpinner是我把mContext传入,但是出了 andr ...

  7. android.view.WindowManager$BadTokenException: Unable to add window — token null is not for an applic

    之前遇到过这样的问题, 04-12 10:40:33.302: E/AndroidRuntime(17213): Caused by: android.view.WindowManager$BadTo ...

  8. Android报错:WindowManager$BadTokenException: Unable to add window -- window has already been added

    很久之前测试通过的代码,现在手机升级了Android7.0后一运行就崩溃,报出这样的错误,具体错误如下: Process: com.example.sho.android_anti_theft, PI ...

  9. WindowManager$BadTokenException: Unable to add window permission denied for this window type

    10-11 11:47:27.472: E/AndroidRuntime(12804): java.lang.RuntimeException: Unable to start activity Co ...

随机推荐

  1. Erlang ODBC 处理中文

    erlang处理utf8字符集相对比较简单,因为它是用integer的list来保存所有的string的,所以处理什么字符集都没关系. 话虽这么说,但我在使用erlang的ODBC处理中文时,着实费了 ...

  2. CF Zepto Code Rush 2014 B. Om Nom and Spiders

    Om Nom and Spiders time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

  3. Ubuntu下访问SSH

    ssh程序分为有客户端程序openssh-client和服务端程序openssh-server.如果需要ssh登陆到别的电脑,需要安装openssh-client,该程序ubuntu是默认安装的.而如 ...

  4. [RxJS] Stopping a Stream with TakeUntil

    Observables often need to be stopped before they are completed. This lesson shows how to use takeUnt ...

  5. 关于C语言中的inline

    在c中,为了解决一些频繁调用的小函数大量消耗栈空间或是叫栈内存的问题,特别的引入了inline修饰符,表示为内联函数.栈空间就是指放置程式的局部数据也就是函数内数据的内存空间,在系统下,栈空间是有限的 ...

  6. CentOS6.6修改主机名和网络信息

    1.修改主机名称 [root@centos ~]# vim /etc/sysconfig/network #打开文件,修改以下内容并保存 NETWORKING=yes #使用网络HOSTNAME=ce ...

  7. Java数据结构漫谈-Stack

    Stack(栈)是一种比较典型的数据结构,其元素满足后进先出(LIFO)的特点. Java中Stack的实现继承自Vector,所以其天然的具有了一些Vector的特点,所以栈也是线程安全的. cla ...

  8. Android发送通知栏通知

    /** * 发送通知 * * @param message */ @SuppressWarnings("deprecation") @SuppressLint("NewA ...

  9. "ORA-00942: 表或视图不存在 "的原因和解决方法[转]

    采用Oracle数据库,使用Powerdesigner设计,生成Sql文件导入后查询出现“ORA-00942: 表或视图不存在 ”,很是郁闷,这个问题以前出现过,当初解决了,但因好久没有使用,这次竟然 ...

  10. JAVA采用JDBC连接操作数据库详解

    JDBC连接数据库概述 一.JDBC基础知识 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供 ...