我有两个Activity
s(mainActivity
& downloadActivity
)我在AsyncTask
downloadActivity
个
在downloadActivity
首先执行getFileAsyncTask
以阅读JSON文件以添加一些图片并从图片中创建ListView
,如果用户点击图片,downloadAsyncTask
被叫,它开始从互联网上下载东西。
我的问题在于:当第二个AsyncTask
正在运行时,我会回到mainActivity
并再次回到downloadActivity
,直到AsyncTask
才会调用第一个downloadAsyncTask
完成了
public class downloadActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
new getFileAsyncTask().execute();
...
}
private class getFileAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
//fetch a json file from internet and add images in ListView
return null;
}
//there is an BaseAdabter class
//if user clicks on an image it calls this downloadAsyncTask.execute()
private class downloadAsyncTask extends AsyncTask<Void, Integer, Void> {
@Override
protected void onPreExecute() {
//download the file
}
@Override
protected Void doInBackground(Void... unused) {
//download the file
}
}
注意:我想写一些类似购物应用的内容。例如,用户可以下载文件并浏览商店以查看产品。
答案 0 :(得分:16)
如果您想并行运行多个AsyncTasks
,则可以在任务中调用executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR)
而不是execute()
。默认情况下,AsyncTasks
以串行方式运行,先到先得。
请注意两个线程不会在相同的数据上进行交互,这可能会导致一些奇怪且难以跟踪的错误。
答案 1 :(得分:0)
你可以在一个异步类中创建它,它有两个方法首先在doInBackground
中获取json文件等待响应...如果可以,则调用下载文件方法。那些方法将返回httpResponse
对象
答案 2 :(得分:0)
制作一个类似于:
的classtask在主线程中全局声明进度条。
现在您需要做的是在主线程中启动一个异步任务,如
public class myactivityextends Activity {
private ProgressDialog _dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.base_screen);
new abc().execute();
}
class abc extends AsyncTask(String,String,String){
@Override
protected void onPreExecute() {
_dialog = new ProgressDialog(_ctx);
_dialog.setCancelable(false);
_dialog.setMessage("Loading");
_dialog.show();
super.onPreExecute();
}
@Override
protected String doInBackground(String... params) {
@Override
protected void onPostExecute(String result) {
// in post execute of this class you can run a new thread of your downaloder thread. and in post execute of last thread you have to dismiss the progess bar.
new download activity.execute();
}
}
}
}
}
答案 3 :(得分:0)
您可以在活动中覆盖onBackPressed功能,并在转到上一个活动之前完成当前活动。再一次,你来下载它,它称之为oncreate方法并首先调用AsynctTask。