Создание объекта класса Android Activity - PullRequest
2 голосов
/ 01 августа 2009

У меня есть класс, который расширяет Activity, и я пытаюсь создать объект этого класса в обычном Java-классе, но это вызывает у меня исключение:

Can't create handler inside thread that has not called looper.prepare

Что я делаю не так?

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 01 августа 2009

Вы должны прочитать основы приложения приложений для Android

Я не могу вспомнить пример, когда вам нужно было бы создать объект деятельности самостоятельно. Вы должны использовать вызов Context.startActivity (), чтобы начать действие.

В любом случае, чтобы ответить на ваш вопрос - действие реализует очередь сообщений (с использованием обработчика), где сообщения могут отправляться в рабочий поток действия для выполнения определенных задач. Это означает, что поток, выполняющий код Activity, остается в ожидании этих сообщений (примером таких сообщений является ответ пользователя на пользовательский интерфейс вашего приложения). Для этого вам нужно использовать поток Looper, который «зацикливается» (или, в некотором смысле, ждет), чтобы сообщения продолжали действовать. Основным потоком для вашего приложения, который также отображает пользовательский интерфейс для вашего приложения, является зацикленный поток.

Если по какой-то причине у вас возникла необходимость создать объект действия вручную, вам следует переосмыслить способ проектирования приложения. Использование startActivity - это все, что требуется.

1 голос
/ 01 августа 2009

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

Я однажды пытался раздувать GUI в отдельный поток для производительности причины. Я не трогал окно в этот момент, но при надувании я получил то же сообщение об ошибке, и я просто побежал Looper.prepare () в моей теме и все было хорошо.

Looper запускает цикл сообщений потока. Если ты не позвонишь Looper.prepare () (а затем Looper.loop ()) в потоке, в этом потоке не будет цикла сообщений, поэтому не может иметь обработчики объектов, которые принимают Сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...