ASyncTask第二次使用时未启动

时间:2018-08-03 10:06:45

标签: android android-asynctask youtube-data-api

我有以下ASyncTask:

public class RetrieveSearchResultsTask extends AsyncTask<YouTube.Search.List, Void, ArrayList<SearchResult>> {

    @Override
    protected ArrayList<SearchResult> doInBackground(YouTube.Search.List... searchListByKeywordRequest) {
        try {
            SearchListResponse response = searchListByKeywordRequest[0].execute();
            ArrayList<SearchResult> searchResults = new ArrayList<>();
            for(SearchResult sr : response.getItems()){
                searchResults.add(sr);
            }
            return searchResults;
        }catch (Exception e){
            Log.e("error",e.toString());
        }

        return null;
    }

}

对ASyncTask的调用如下(代码在另一个活动中):

AsyncTask<YouTube.Search.List, Void, ArrayList<SearchResult>> task = new RetrieveSearchResultsTask().execute(searchListByKeywordRequest);
            ArrayList<SearchResult> searchResults = task.get();

此ASyncTask正在使用youtube api检索搜索结果。 现在,我第一次搜索它可以正常工作,但是当我再次搜索时,该应用程序卡在以下代码上:

ArrayList<SearchResult> searchResults = task.get();

,屏幕仅变黑,应用停止响应。

如果有人帮助我了解问题所在,我将不胜感激

1 个答案:

答案 0 :(得分:0)

AsyncTask实例只能使用一次。

相反,只需像new MyAsyncTask()。execute(“”);那样调用您的任务即可

来自AsyncTask API文档:

线程规则 为了使此类正常工作,必须遵循一些线程规则:

必须在UI线程上创建任务实例。 必须在UI线程上调用execute(Params ...)。 请勿手动调用onPreExecute(),onPostExecute(Result),doInBackground(Params ...),onProgressUpdate(Progress ...)。
该任务只能执行一次(如果尝试第二次执行,则会引发异常。)