所以我是一个学习android的iOS开发人员,我很难理解一些事情。现在我有一个datamanager类。在该类中,它有一个AsyncTask来更新数据。 OnPreExecute我弹出一个活动来显示它正在更新。我知道我可以使用额外的东西将初始信息传递给UpdateActivity。我的问题是我不确定如何在OnProgressUpdate中发送新信息。这是我的代码萎缩:
private class myTask extends AsyncTask<Integer,String,Void>{
@Override
protected void onCancelled() {
super.onCancelled();
isUpdating = false;
}
@Override
protected Void doInBackground(Integer... params) {
//My BG Code
}
@Override
protected void onPostExecute(Void result) {
// TODO Remove updating view
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
Intent myIntent = new Intent(mContext,UpdateActivity.class);
mContext.startActivity(myIntent);
}
}
答案 0 :(得分:6)
AsyncTask旨在嵌套在Activity类中时效果最佳。
AsyncTask'特殊'的原因在于它不仅仅是一个工作线程 - 而是它将处理doInBackground(...)
中代码的工作线程与在Activity的UI线程上运行的方法相结合 - {{1} }和onProgressUpdate(...)
是最常用的。
通过定期从onPostExecute(...)
调用updateProgress(...)
,调用doInBackground(...)
方法,允许它操作Activity的UI元素(进度条,显示正在下载的文件名称的文本等) )。
简而言之,不是从AsyncTask触发'update'活动,而是更新Activity本身应该有一个嵌套的AsyncTask,用于处理更新并将进度发布到UI。
答案 1 :(得分:2)
您有两种选择:
1)将一个活动实例传递给AsyncTask构造函数,以便在其上调用一些方法:
new MyTask(this).execute();
所以,你可以这样做:
public MyTask (Activity activity) {
this.activity = activity;
}
public void onPostExecute(...) {
activity.someMethod();
}
2)传递Handler
实例并从onPostExecute()向活动发送消息。