【问题标题】:Android Looper confusionAndroid Looper 混淆
【发布时间】:2011-10-10 08:14:27
【问题描述】:

Android 抱怨下面的代码需要调用 Looper.prepare。我曾尝试添加 Looper.prepare,但代码在第六次执行后崩溃,让我相信它并不像我想象的那么简单。任何建议将不胜感激。顺便说一句,我将这段代码包装在 AsyncTask 中,因为在执行查询时我需要一个进度微调器。如果有更简单的,请告诉我。

private class doSearch extends AsyncTask<String, String, Cursor> {

    @Override
    protected Cursor doInBackground(String... searchstring) {

        [...]           
        CursorLoader loader = new CursorLoader(SearchActivity.this, codes, projection, mWhere, null, null);
        Cursor cursor = loader.loadInBackground();

        return cursor;
}

【问题讨论】:

标签: android looper android-cursorloader


【解决方案1】:

这通常意味着你正在做一些与 UI 相关的事情,或者从另一个(后台)线程而不是主线程调用处理程序的 sendMessage 函数

【讨论】:

  • 谢谢,我明白了。您有修复它的建议吗?
【解决方案2】:

您已经在 AsyncTask 中。 Async Task Loader 将创建另一个植根于线程池中的 AsyncTask。 AsyncTask 必须在 UI 线程上构建。他们将使用它来获取所需的 Looper。如果您要自己编写一个异步任务并希望以串行方式消除此游标加载,请使用非异步游标检索方式。或者摆脱您的 AsyncTask 并扩展 CursorLoader 并覆盖 DeliverResult(Cursor) 方法以充当您的回调。这类似于 AsyncTask 中的 onPostExecute

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 2011-03-31
    • 2011-12-08
    • 2015-04-05
    • 2012-05-15
    相关资源
    最近更新 更多