异步任务

时间:2011-11-01 09:49:42

标签: android

我创建了一个这样的异步任务:

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}}。

1 个答案:

答案 0 :(得分:-1)

请将异步线程视为具有内置处理程序以更新UI的UI线程。无论如何,它都是一个线索。所以现在已经清除,我看不到你实际编写checkall()函数的位置。 check all函数需要是异步任务在后台调用的本地方法。它不能成为主类中的方法。如果是这种情况,则无需进行异步任务。所以请将checkall()函数添加到异步任务中。

接下来,异步任务中不需要looper。数据处理由以下人员处理:

  

this.publishProgress(“显示对话框”);

请确保传递任何你想要的东西。可以在此处理intstringbooleanarray或其他任何内容。所以明智地使用实现。

现在,相应地在onProgressUpdate()内部进行操作,因此请检查是否需要执行UI线程中的某些操作,例如方法或其他内容。这可以用这种方法完成。

现在进行我告诉你的更改。请回复我,我会更好地与您合作。如果我们能够找出问题所在。小心。