以下是我项目活动中的代码:
CustomClass custom = new CustomClass();
//Passing an array list
result = custom.getResults(list);
此处CustomClass
是库项目中的一个类,方法getResults(list)
启动AsyncTask
。
getResults()
方法:
public List<String> getResults(List<String> string){
List<String> result= new ArrayList<String>();
BackgroundTask task = new BackgroundTask();
task.execute(string);
result= task.get();
return result;
}
我的异步任务:
public class BackgroundTask extends AsyncTask<List<String>, Integer, List<String> >{
List<String> results= new ArrayList<String>();
@Override
protected List<String> doInBackground(List<String>... params) {
for (int i=0; i<params[0].size();i++) {
// someOperation
}
return results;
}
@Override
protected void onPostExecute(List<String> result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
}
问题:AsyncTask
未启动。当我调试并尝试进入AsyncTask
课程时,我得到The source attachment does not contain the source for the file classloader.class
。有人可以帮我吗?谢谢。
答案 0 :(得分:1)
get()方法阻塞UI线程,这意味着onPreExecute无法运行(它必须在UI线程中运行)因此后台线程将永远不会启动。
取消对get()的调用并将“返回值”逻辑移动到onPostExecute。
当你在UI线程中时,从不阻止。