异步任务
我已经创建了一个异步任务是这样的:异步任务
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内部处理,但之后添加此行,在错误出现因为当我第四次单击开始按钮时,每个线程只能创建一个活套,并致电taskAllcheck.execute();
。
请把异步线程想象成一个UI线程,它有一个内置的处理程序来更新你的UI。无论如何,这是一条线索。所以现在已经清除了,我没有看到你在哪里写了checkall()
函数。检查所有函数需要是异步任务在后台调用的本地方法。它不能成为你的主课堂中的一种方法。如果是这种情况,那么就没有任何异步任务的意义。所以请将checkall()
函数添加到您的异步任务中。
接下来,在异步任务中不需要活套。数据的处理由以下处理:
this.publishProgress(“Show the dialog”);
请确保你传入任何你想要的东西。可以是int
,string
,boolean
,array
或任何东西都可以在这里处理。因此,明智地使用实施。
现在,相应地在onProgressUpdate()
的内部进行设置,因此也请检查是否要执行UI线程中的某些内容,如方法或其他内容。这可以用这种方法完成。
现在进行我已告诉您的更改。请回到我身边,我会更好地与你合作。如果我们能指出问题。保重。
感谢Peter的编辑。我会牢记在心。 – medampudi
checkall()方法做什么? “无法创建处理程序...”异常通常发生在您尝试执行只允许在后台线程中执行的操作时发生。 – Egor
checkall()只检查设置如开启或关闭蓝牙,gps在设备上或关闭,并根据它在数据库中更新状态 –
这就是我所说的。也许,这些是必须在UI线程上执行的操作。你可以将它们放到activity.runOnUIThread()方法的Runnable中,这样你就可以克服Looper异常。 – Egor