我一直在使用对话框显示Asynctask
进度。通过这样做,我在onPreExecute
内初始化它并在onPostExecute
中将其解除。我不知道出现什么问题,当我提出解雇条件时,如果它不是空的并且它显示但仍然被触发IllegalArgumentException: View not attached to window manager
以下是代码:
public class SampleTask extends AsyncTask<String, Void, String> { public ProgressDialog pDialog; @Override protected void onPreExecute() { super.onPreExecute(); pDialog = new ProgressDialog(SampleActivity.this); pDialog.setMessage(getString(R.string.loading)); pDialog.setCancelable(false); pDialog.show(); } @Override protected String doInBackground(String... path) { . . . } @Override protected void onPostExecute(String result) { super.onPostExecute(null); if (null != pDialog && pDialog.isShowing()) { pDialog.dismiss(); } . . . } }
我看了here类似的解决方案,但如果我将null != pDialog && pDialog.isShowing()
置于同一条件下会有所不同吗?
答案 0 :(得分:0)
你的问题是你只接受主UI线程中的android视图。 Read this link for more detail因此,当您在pDialog.dismiss();
中调用onPostExecute(String)
时,它会在另一个线程上运行,因此android会抛出新的IllegalArgumentException
。我有一些解决方案,希望得到帮助:
我总是使用这个解决方案,但它根本不好:
Handler handler = new Handler();
Runnable runable = new Runnable() {
@Override
public void run() {
// TODO something you would like to do with Android UI.
}
};
handler.post(runable);
Handler将创建一个在UI Thread上运行的新线程,以便您可以使用Android UI
2.有时我尝试使用interface
。它比上面的解决方案更有效,当然,它让我花更多的精力。