Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:AsyncTask从doInBackground中的返回到postExecute的开始需要很长时间_Java_Android_Android Asynctask - Fatal编程技术网

Java Android:AsyncTask从doInBackground中的返回到postExecute的开始需要很长时间

Java Android:AsyncTask从doInBackground中的返回到postExecute的开始需要很长时间,java,android,android-asynctask,Java,Android,Android Asynctask,我正在片段中运行一个AsyncTask,从doInBackground中的return语句到postExecute的第一行需要很长时间(1-3秒) 我建立了日志,得出了以下结论: 09-07 20:26:15.496﹕ 已输入myAsyncTask的doInBackground 09-0720:26:15.496﹕ 已完成myAsyncTask的后台工作 09-0720:26:18.524﹕ 已输入myAsyncTask的postExecute 09-07 20:26:18.525﹕ 已完成m

我正在片段中运行一个
AsyncTask
,从
doInBackground
中的return语句到
postExecute
的第一行需要很长时间(1-3秒)

我建立了日志,得出了以下结论:

  • 09-07 20:26:15.496﹕ 已输入myAsyncTask的doInBackground

  • 09-0720:26:15.496﹕ 已完成myAsyncTask的后台工作

  • 09-0720:26:18.524﹕ 已输入myAsyncTask的postExecute

  • 09-07 20:26:18.525﹕ 已完成myAsyncTask的后期执行

我不明白为什么启动
postExecute
要花这么长时间。在
doInBackground
中,我只是返回null,因此传递该参数不应该很耗时。我不明白为什么要花这么长时间

有人能帮我澄清一下吗?为什么从
doInBackground
的返回行输入
postExecute
要花这么长时间

异步任务的代码如下:

 public class UpdateTask extends AsyncTask<Void, Void, Void>
{
    @Override
    protected void onPreExecute() {
        Log.d("AnswerTabFragment", "Entered preExecute of UpdateTask");

        mRefreshWrapper.setRefreshing(true);
    }

    @Override
    protected void onPostExecute(Void param) {
        Log.d("AnswerTabFragment", "Entered postExecute of UpdateTask");

        mRefreshWrapper.setRefreshing(false);
        if(mAnswers.isEmpty()){
            mHeaderTextView.setText("No Answers");
            mHeaderTextView.setVisibility(View.VISIBLE);
        }
        else{
            mHeaderTextView.setVisibility(View.GONE);
        }
        Log.d("AnswerTabFragment", "Finished postExecute of UpdateTask");

    }

    @Override
    protected Void doInBackground(Void... params  ) {
        Log.d("AnswerTabFragment", "Entered doInBackground of UpdateTask");

        if(u == Application.qollegeCache.currentUser){
            mAnswers.clear();
            mAnswers.addAll(Application.qollegeCache.myAnswers);

        }
        else{
            try {
                Answer.unpinAll(u.getObjectId() + "Answers");

                mAnswers.addAll(Answer.getQuery()
                        .whereEqualTo(Constants.kQollegeAnswerPostedByKey, u)
                        .orderByDescending(Constants.kQollegeQuestionCreatedAtKey)
                        .find());

                Answer.pinAllInBackground(u.getObjectId() + "Answers", mAnswers);


            } catch (ParseException e) {
                e.printStackTrace();
            }

        }

        Log.d("AnswerTabFragment", "Finished doInBackground of UpdateTask");

        return null;

    }
}
公共类UpdateTask扩展异步任务
{
@凌驾
受保护的void onPreExecute(){
Log.d(“AnswerTabFragment”,“输入UpdateTask的预执行”);
mRefreshWrapper.setRefreshing(true);
}
@凌驾
受保护的void onPostExecute(void参数){
Log.d(“AnswerTabFragment”,“输入UpdateTask的postExecute”);
mRefreshWrapper.setRefreshing(false);
if(mAnswers.isEmpty()){
mHeaderTextView.setText(“无答案”);
mHeaderTextView.setVisibility(View.VISIBLE);
}
否则{
mHeaderTextView.setVisibility(View.GONE);
}
Log.d(“AnswerTabFragment”,“UpdateTask的完成后执行”);
}
@凌驾
受保护的Void doInBackground(Void…参数){
d(“AnswerTabFragment”,“输入了UpdateTask的doInBackground”);
if(u==Application.qollegeCache.currentUser){
清除;
addAll(Application.qollegeCache.myAnswers);
}
否则{
试一试{
unpinal(u.getObjectId()+“Answers”);
addAll(Answer.getQuery()
.whereEqualTo(Constants.kqollegeansweredbykey,u)
.orderByDescending(常数.kQollegeQuestionCreatedAtKey)
.find());
Answer.pinAllInBackground(u.getObjectId()+“Answers”,mAnswers);
}捕获(解析异常){
e、 printStackTrace();
}
}
Log.d(“AnswerTabFragment”,“完成了UpdateTask的后台工作”);
返回null;
}
}

Answer.pinAllInBackground(u.getObjectId()+“Answers”,mAnswers)花费了多少时间行?日志语句不能保证在调用它们时准确显示。这可能表明您的ui线程过载,因此排队执行时需要一些时间。@ρцσѕρєK每次我测试它时,用户始终是当前用户,所以这个代码从来没有被调用过。你每次运行这个代码都会得到相同的结果吗?