Returning data from AsyncTask without blocking UI

前端 未结 3 1579
逝去的感伤
逝去的感伤 2021-02-05 12:32

I have a conceptual problem related to AsyncTask class. We use AsyncTask so that the main UI is not blocked. But suppose, I want to retrieve some data

3条回答
  •  不要未来只要你来
    2021-02-05 12:56

    get() method will block the UI thread. To get the relavent data you need to return the value from doInBackground and capture the value in onPostExecute parameter.

    Value returned by doInBackground is captured by onPostExecute method

    Example:

    public class BackgroundTask extends AsyncTask{
           private ProgressDialog mProgressDialog;
           int progress;
           public BackgroundTask() {
               mProgressDialog = new ProgressDialog(context);
                 mProgressDialog.setMax(100);
                 mProgressDialog.setProgress(0);
        }
    
           @Override
        protected void onPreExecute() {
               mProgressDialog =ProgressDialog.show(context, "", "Loading...",true,false);
            super.onPreExecute();
        }
         @Override
         protected void onProgressUpdate(Integer... values) {
         setProgress(values[0]);
      }
    
        @Override
        protected String doInBackground(String... params) {
                String data=getDatafromMemoryCard();    
    
            return data;  // return data you want to use here
        }
        @Override
        protected void onPostExecute(String  result) {  // result is data returned by doInBackground
            Toast.makeText(context, result, Toast.LENGTH_LONG).show();
            mProgressDialog.dismiss();
            super.onPostExecute(result);
        }
       }
    

    If you are using asynctask in separate class, then use AsyncTask with callback interface like this

    Here is the answer I have provided earlier about the same AsyncTask with Callback

提交回复
热议问题