3

尝试在服务中调用 asynctask 的构造函数时遇到问题。

我收到了这个错误

Can't create handler inside thread that has not called Looper.prepare().

我应该在 UIThread 中调用 AsyncTask 吗?

奇怪的是,它在 Jellybean 中工作,但在 ICS 中崩溃。

 @Override
 public void onCreate(){
    super.onCreate();
    WebRequest wr = new WebRequest(this.serviceURL, this);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
        wr.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, processType, newMap);
    else
        wr.execute(processType, newMap);
 }
4

1 回答 1

1

从那个异常看来,您不是从 UI 线程调用它。AsyncTask 只能从 UI 线程调用。据我记得,IntentService 不在 ui 线程上运行,您正在扩展它(?)。所以你不需要使用 AsyncTask。但如果你真的想要,你可以从 Handler 中的 UI 线程做一些事情。

private static final Handler handler = new Handler();

private final Runnable action = new Runnable() {
    @Override
    public void run() {
        WebRequest wr = new WebRequest(this.serviceURL, this);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
            wr.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, processType, newMap);
        else
            wr.execute(processType, newMap);
    }
};

@Override
public void onCreate(){
    super.onCreate();
    handler.post(action);
}
于 2013-04-19T11:11:39.177 回答