Android ViewPager在后台加载数据(异步任务与线程+处理程序)

Android ViewPager在后台加载数据(异步任务与线程+处理程序),android,multithreading,user-interface,android-asynctask,handler,Android,Multithreading,User Interface,Android Asynctask,Handler,我目前正在使用viewpager,并在加载数据时显示带有progressbarspinner的布局 我当前的体系结构使用带有回调的asynctask,在asynctask点击PostExecute时通知片段 我使用回调方法是因为如果我使用.get方法,asynctask将停止异步,并且当asynctask位于doInBackGround时,进度条将停止。 如果我使用get从doInBackground返回数据,它会阻塞我的UI线程,因此我在片段中实现一个接口,并将其发送到asynctask,并从

我目前正在使用viewpager,并在加载数据时显示带有progressbarspinner的布局

我当前的体系结构使用带有回调的asynctask,在asynctask点击PostExecute时通知片段

我使用回调方法是因为如果我使用.get方法,asynctask将停止异步,并且当asynctask位于doInBackGround时,进度条将停止。 如果我使用get从doInBackground返回数据,它会阻塞我的UI线程,因此我在片段中实现一个接口,并将其发送到asynctask,并从onPostExecute调用该方法,以通知已完成加载的片段

对于每一个异步任务都有一个回调是非常令人恼火的,因为我有很多这样的任务,而我忘记了顺序中的第一个

我使用asynctask通过php post和jSON从mySQL加载一些数据

我的问题是,我是否应该继续使用asynctask加载数据,并使用回调通知已完成的片段,还是使用工作线程和处理程序使用收到的数据更新UI

public interface UpdateValuesAsyncResponse {
    void updateFinish();
}

public class MyFragment extends Fragment implements UpdateValuesAsyncResponse{

     new UpdateLocalDevices(this).execute();

     @Override
     public void updateFinish() {

         continue();

     }

}

public class UpdateLocalDevices extends AsyncTask<Void, Void, Void> {



   public UpdateLocalDevices(UpdateValuesAsyncResponse asyncResponse, Context context) {
       this.asyncResponse = asyncResponse;

   }

   @Override
   protected void onPreExecute() {
        super.onPreExecute();


   }

   @Override
   protected Void doInBackground(Void... params) {

       getFromMySQL();
       return null;
   }

   @Override
   protected void onPostExecute(Void result) {
       super.onPostExecute(result);
       asyncResponse.updateFinish();
   }

}
大概是这样的:

首先我假设函数getFromMySQL;返回对象,您可以用字符串或其他任何东西替换它,我假设您要将这些对象添加到myList中,您可以执行您想要的逻辑操作,例如在列表上循环并更新或

public class MyFragment extends Fragment implements UpdateValuesAsyncResponse{

     ArrayList<object> myList = new ArrayList<object>();

     new UpdateLocalDevices(this).execute();

     @Override
     public void updateFinish() {

         continue();

     }

}

public class UpdateLocalDevices extends AsyncTask<Void, Void, Object> {



   public UpdateLocalDevices(UpdateValuesAsyncResponse asyncResponse, Context context) {
       this.asyncResponse = asyncResponse;

   }

   @Override
   protected void onPreExecute() {
        super.onPreExecute();


   }

   @Override
   protected Void doInBackground(Void... params) {

       return getFromMySQL();

   }

   @Override
   protected void onPostExecute(Object result) {
       super.onPostExecute(result);
        myList.add(result[0]);
   }

}

我认为你们真的需要重写你们的问题,清晰的问题有助于我们理解你们的问题,并帮助你们快速得到解决方案。详细解释一下这种情况,我真的很难知道发生了什么。希望现在很清楚了,我不使用短篇故事。所以我使用回调来知道异步任务何时完成。首先,您不需要对asynctask进行任何回调,因为onPostexecute在UI线程上运行,因此您可以更改或访问任何您喜欢的内容。这是一个繁重的调用,asynctask适合吗?发布如何将asynctask中获得的值更新到我的片段,我将接受答案,谢谢!请注意我的代码异步任务和。。。Ur始终欢迎:-basic,用于获取的数据类型,用于pusblishProgress的数据类型,用于返回的数据类型Yes:AsyncTask