我在显示带有AsyncTask的进度对话框时遇到问题:
Activity has leaked window com.androID.internal.policy.PhoneWindow$DecorVIEw{8cee959 V.E...... R......D 0,0-1026,252} that was originally added here
这是我的异步任务:
public class MyClIEntTask extends AsyncTask<VoID, VoID, VoID> { private ProgressDialog progressDialog = null; private Context mContext; MyClIEntTask(Context mContext) { this.mContext = mContext; } @OverrIDe protected voID onPreExecute() { super.onPreExecute(); progressDialog = new ProgressDialog(mContext); progressDialog.setMessage("Working ..."); progressDialog.setIndeterminate(false); progressDialog.setCancelable(false); progressDialog.show(); } @OverrIDe protected VoID doInBackground(VoID... arg0) { try { wait(5000); } catch (InterruptedException e) { e.printstacktrace(); } return null; } @OverrIDe protected voID onPostExecute(VoID result) { super.onPostExecute(result); if (progressDialog != null) { progressDialog.dismiss(); progressDialog = null; } }}
这是我的活动:
public class ConnectionActivity extends Activity { final private Context mContext = this; private button buttonConnect; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R .layout.activity_socketconnection); buttonConnect = (button) findVIEwByID(R.ID.buttonConnect); buttonConnect.setonClickListener(getConnectOncOnClickListener()); } private OnClickListener getConnectOncOnClickListener() { return new OnClickListener() { @OverrIDe public voID onClick(VIEw v) { MyClIEntTask myClIEntTask = new MyClIEntTask(mContext); try { myClIEntTask.execute(); myClIEntTask.get(); } catch (InterruptedException e) { e.printstacktrace(); } catch (ExecutionException e) { e.printstacktrace(); } } }; }}
我搜索了解决方案,但仍然无法正常工作
解决方法:
一些提示:
>在您的活动中保留对ProgressDialog的引用,并添加公共方法来显示/隐藏它;
>使用WeakReference< Context>在您的AsyncTask中,让垃圾收集器完成工作;
>摆脱阻塞UI线程的myClIEntTask.get().
以上是内存溢出为你收集整理的Java-进度对话框android泄漏Windows错误全部内容,希望文章能够帮你解决Java-进度对话框android泄漏Windows错误所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)