我创建了一个这样的异步任务:
private class LongOperationcheckall extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
String result="Start";
try
{
Looper.myLooper().prepare();
// Looper.loop();
// TODO Auto-generated method stub
for(int k=0;k<13;k++)
{
checkall();
this.publishProgress("Show the dialog");
//count++;
}
result="Success";
checkallcomp++;
OnscanComplete();
}
catch(Exception ex)
{
checkallcomp++;
OnscanComplete();
}
return result;
}
@Override
protected void onProgressUpdate(String... values) {
super.onProgressUpdate(values);
Log.i("Progress", "Progressincheck");
}
protected void onPostExecute(String params ) {
Log.w("all Check",params);
// Execution of result of Long time consuming operation
}
}
我添加了代码,
Looper.myLooper().prepare();
以
来调用此任务taskAllcheck = new LongOperationcheckall();
taskAllcheck.execute();
第四次点击开始按钮时,它会给出异常
无法在未调用looper.prepare
的线程内的线程内创建处理程序
仅当我在设备中运行时,它在模拟器中执行OK,但是在添加此行之后,出现错误,因为当我第四次单击开始按钮并且调用{时,每个线程只能创建一个looper {1}}。
答案 0 :(得分:-1)
请将异步线程视为具有内置处理程序以更新UI的UI线程。无论如何,它都是一个线索。所以现在已经清除,我看不到你实际编写checkall()
函数的位置。 check all函数需要是异步任务在后台调用的本地方法。它不能成为主类中的方法。如果是这种情况,则无需进行异步任务。所以请将checkall()
函数添加到异步任务中。
接下来,异步任务中不需要looper。数据处理由以下人员处理:
this.publishProgress(“显示对话框”);
请确保传递任何你想要的东西。可以在此处理int
,string
,boolean
,array
或其他任何内容。所以明智地使用实现。
现在,相应地在onProgressUpdate()
内部进行操作,因此请检查是否需要执行UI线程中的某些操作,例如方法或其他内容。这可以用这种方法完成。
现在进行我告诉你的更改。请回复我,我会更好地与您合作。如果我们能够找出问题所在。小心。