我通过扩展AsyncTask类来定义一个单独的线程.在这个类中,我在AsyncTask的onPostExecute和onCancelled方法中执行一些Toasts和Dialog.祝酒词需要应用程序的上下文,所以我需要做的就是:
Toast.makeText(getApplicationContext(),"Some String",1);
使用AlertDialog.Builder创建对话框,它还需要在其构造函数中使用上下文.我是否正确地认为这个背景应该是活动的背景?即
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
其中getActivity可以是返回当前活动的用户定义类.如果是这样,处理这种情况的最佳方法是什么?创建类似getActivity的类或将当前活动的上下文传递给AsyncTask的构造函数?
我想我正在尝试理解Context的使用 – 我注意到内存泄漏可能是一个问题(还没有真正理解这一点)以及如何使用getApplicationContext()是最好的方法.
解决方法
只需将AsyncTask创建为Activity的内部类,或将Context传递给AsyncTask的构造函数.
内部类:MyActivity.java
public class MyActivity extends Activity { // your other methods of the activity here... private class MyTask extends AsyncTask<Void,Void,Void> { protected Void doInBackground(Void... param) { publishProgress(...); // this will call onProgressUpdate(); } protected Void onProgressUpdate(Void... prog) { Toast.makeText(getActivity(),"text",1000).show(); } } }
构造函数:MyTask.java
public class MyTask extends AsyncTask<Void,Void> { Context c; public MyTask(Context c) { this.c = c; } protected Void doInBackground(Void... param) { publishProgress(...); // this will call onProgressUpdate(); } protected Void onProgressUpdate(Void... prog) { Toast.makeText(c,1000).show(); } }
此外,请不要忘记在对话框上调用.show().
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.show();
原文地址:https://www.jb51.cc/android/316120.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。