Android Looper путаница - PullRequest
0 голосов
/ 21 июля 2011

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

Ответы [ 2 ]

0 голосов
/ 21 июля 2011

Вы уже в AsyncTask. Async Task Loader собирается создать еще одну AsyncTask, которая укоренена в вашем пуле потоков. AsyncTasks должны быть построены на потоке пользовательского интерфейса. Они будут использовать это, чтобы захватить Лупер. Если вы собираетесь написать асинхронную задачу самостоятельно и хотите отразить эту нагрузку курсора в последовательном режиме, используйте не асинхронный способ извлечения курсора. Или избавьтесь от AsyncTask, расширьте CursorLoader и переопределите метод deliveryResult (Cursor), чтобы он выполнял функцию обратного вызова. Это будет похоже на onPostExecute в AsyncTask

0 голосов
/ 21 июля 2011

Обычно это означает, что вы делаете что-то, связанное с пользовательским интерфейсом, или вызываете функцию sendMessage обработчика из другого (фонового) потока, чем основной поток

...