我AsyncTask
从一个开始Activity
。当AsyncTask
完成执行时,我需要发送一个广播,该广播需要调用Activity
方法来更新 UI。
任何好的方法来实现这一点。
问问题
2109 次
3 回答
4
是的。
如果它AsyncTask
是您的内部类,Activity
那么它可以访问任何成员变量和您的Activity
方法。如果不是,那么您可以简单地将变量传递给它的构造函数,甚至是Activity
对调用Activity
方法的引用onPostExecute()
。没有任何代码很难说别的。
要传递你的实例Activity
并使用它的方法,如果它是一个单独的类,那么你可以创建一个构造函数并执行类似的操作
public class MyTask extends AsyncTask<...> // add your params
{
private MyActivity activty;
public MyTask (MyActivity act)
{
this.activty = activty;
}
// ...
}
并onPostExecute()
添加类似的东西
activity.myMethod();
并将任务称为
MyTask task = new MyTask(this); // pass a reference of the activity
task.execute(); // add params if needed
如果它AsyncTask
是一个单独的文件,Activity
那么你可以看到这个关于如何使用接口的答案callback
于 2013-08-06T00:19:52.257 回答
3
请使用接口。
interface INotifyChange {
void notifyChange(); // You can use params to transfer data :D
}
在Activity你应该实现这个接口。
YourActivity extends Activity implements INotifyChange {
@Override
public void notifyChange() {
// Right here, you can Update UI.
}
}
当您创建AsyncTask的新实例时
例子:
YourAsyncTask mTask = new YourAsyncTask(this); // You put INotifyChange
在YourAsyncTask 中
private INotifyChange iNotifyChange;
public YourAsyncTask(INotifyChange iNotifyChange) {
this.iNotifyChange = iNotifyChange;
}
// 当你完成 doInBackground 或任何你想更新 UI 的地方,请使用iNotifyChange.notifyChange()
例子:
@Override
public void onPostExecute(ResultType mResult) {
iNotifyChange.notifyChange();
}
通过这种方式我经常使用更新进度条。在这种情况下,我在方法中使用参数:
例子:
iNotifyChange.notify(progress);
于 2013-08-06T00:25:53.047 回答
1
您是否考虑过覆盖 AsyncTask 的 onPostExecute() 方法来更新 UI?尝试这样的事情:
AsyncTask<String, Void, Bitmap> task = new AsyncTask<String, Void, Bitmap>(imageView)
{
private ImageView imageView;
public AsyncTask(ImageView imageView)
{
this.imageView = imageView;
}
@Override
protected Bitmap doInBackground (String... params)
{
if(params.length > 0)
{
String filePath = params[0];
// Load Bitmap from file
return bitmap;
}
}
@Override
protected void onPostExecute(Bitmap result)
{
imageView.setImageBitmap(result);
}
}
task.execute(filePath);
于 2013-08-06T00:20:45.970 回答