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

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. JAVA并发实现五(生产者和消费者模式Condition方式实现)

    package com.subject01; import java.util.PriorityQueue; import java.util.concurrent.locks.Condition; ...

  2. PHP的错误处理方式

    错误类型 PHP 主要有两种错误:触发错误和异常.其中触发错误大概可以分为:编译错误.引擎错误和运行时错误,其中前两个是无法捕获的:异常都是可以捕获的,当没有尝试捕获时则会中断代码. 触发错误可以通过 ...

  3. (转)iOS Wow体验 - 第二章 - iOS用户体验解析(2)

    本文是<iOS Wow Factor:Apps and UX Design Techniques for iPhone and iPad>第二章译文精选的第二部分,其余章节将陆续放出.上一 ...

  4. 【转】WCF、WebAPI、WCFREST、WebService之间的区别

    在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下,你有很多的选择来构建一个HTTP Services.我分享一下我对 ...

  5. Android服务Service总结

    转自 http://blog.csdn.net/liuhe688/article/details/6874378 富貴必從勤苦得,男兒須讀五車書.唐.杜甫<柏學士茅屋> 作为程序员的我们, ...

  6. UIApplication的作用

    1.设置app图标右上角的数字2.设置状态栏的属性(样式.是否要显示)3.打开某个链接\发短信\打电话4.keyWindow : 访问程序的主窗口(一个程序只能有一个主窗口)5.windows : 访 ...

  7. 树状jquery导航条

    $(function () {        $(".leftsecoundtitle").css({ "display": "none" ...

  8. hadoop 2.6.0上安装sqoop-1.99.6-bin-hadoop200

    第一步:下载sqoop-1.99.6-bin-hadoop200.tar.gz  地址:http://www.eu.apache.org/dist/sqoop/1.99.6/ 第二步:将下载好的sqo ...

  9. C++中string类的基本用法

    #include <iostream> #include <set> using namespace std; int main() { string line; getlin ...

  10. C++中cin输入类型不匹配解决方法

    #include <iostream> #include <set> using namespace std; int main() { int a; cin>>a ...