Обычно это просто, нужно просто позвонить:
AsyncQueryHandler handler = new AsyncQueryHandler(getContentResolver()) {
@Override
protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
// finished
}
}
// call on background
handler.startQuery(1, null, builder.build(), projection, selection, args, sort);
и все.Но это можно вызвать только в рамках действия.
Мое приложение - это виджет, и мне нужно обновить его из фона.Нет потока пользовательского интерфейса, только фоновое обновление службы удаленного адаптера.Как только я пытаюсь создать AsyncQueryHandler
в фоновом режиме, он выдает исключение:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
at android.os.Handler.<init>(Handler.java:121)
at android.widget.Toast.<init>(Toast.java:68)
at android.widget.Toast.makeText(Toast.java:231)
Хорошо, но когда я вызываю Looper.prepare()
перед созданием AsyncQueryHandler
, то снова происходит сбой при попытке вызоваметод onQueryComplete
, потому что поток «обновления виджета» уже завершен:
W/MessageQueue: Handler (android.os.Handler) {b27f7cf} sending message to a Handler on a dead thread
java.lang.IllegalStateException: Handler (android.os.Handler) {b27f7cf} sending message to a Handler on a dead thread
at android.os.MessageQueue.enqueueMessage(MessageQueue.java:543)
at android.os.Handler.enqueueMessage(Handler.java:643)
at android.os.Handler.sendMessageAtTime(Handler.java:612)
Так как правильно использовать AsyncQueryHandler на фоне, внутри виджета (служба удаленных просмотров)?У кого-нибудь есть пример?