AsyncTaskとダイアログにviewが表示されます.WindowManager$BadTokenException: Unable to add window…is not valid; is your a
最近1つの奇抜な問題に出会って、気がふさぐ前によく見ていません.問題はたまに発生する.ログを再表示すると、
view.WindowManager$BadTokenException: Unable to add window…is not valid; is your activity running?
どうしたの?そうですね.activityにはdestoryがありません.走っているのに、どうしてダイアログボックスがactivityに添付されて追加できないのですか.無効だと言っていますが、activityがdestoryされたようですね.
後でコードを一つ一つチェックして、確かにactivityがdestoryによって存在している場合、異常はまだキャプチャされていませんが、非同期のAsynTaskはまだ実行されています.その後異常がキャプチャされ、ダイアログでエラーが表示されると、エラーが報告され、activityは死んでしまい、ダイアログはまだ生きているのか、ヒントはもう意味がありません.後続の処理を放棄すべきだ.
では、実は異常タスクにisFinishing()を加えて判断するだけで、activityが切れたら、放っておきます....
view.WindowManager$BadTokenException: Unable to add window…is not valid; is your activity running?
どうしたの?そうですね.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();