Является ли мой способ делать темы в Android правильно? - PullRequest
1 голос
/ 18 мая 2010

Я пишу живые обои и разветвляю две отдельные темы в моем основном сервисе обоев. Один обновляет, а другой рисует. У меня сложилось впечатление, что как только вы вызовете thread.start (), он обо всем позаботится за вас, но после некоторых проб и ошибок кажется, что если я хочу, чтобы мое обновление и рисование потоков продолжали работать, я должен вручную сохранить вызывать их методы run ()? Другими словами, вместо того, чтобы вызывать start () в обоих потоках и забывать, я должен вручную установить отложенное событие обработчика, которое вызывает thread.run () как для обновления, так и для рисования потоков каждые 16 миллисекунд. Это правильный способ иметь длинную нить?

Кроме того, для уничтожения потоков я просто устанавливаю их в качестве демонов, а затем обнуляю их. Этот метод в порядке? Большинство примеров, которые я вижу, используют какой-то тип join () / interrupt () в цикле while ... Я не понимаю этого ...

Ответы [ 2 ]

1 голос
/ 18 мая 2010
  1. Нет
  2. Нет

Для # 1, я считаю, что ваши темы заканчиваются. Когда метод run () оставлен, поток считается завершенным. Если вы хотите, чтобы поток работал «навсегда», вам нужно повторить свои действия.

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

0 голосов
/ 18 июня 2012

Как сказал Янн, если вы продолжаете перезапускать свои потоки, это означает, что вы, вероятно, не выполняете цикл правильно.

Скажем, на ваших обоях просто движется шарик по экрану, это будет метод пробного запуска ():

boolean isAnimating;

public void run() {
  isAnimating = true;
  while(isAnimating) {
     moveBall();
     isAnimating = isWallpaperVisible(); // or whatever conditions apply to not keep animating
  }

}

Таким образом, ваш метод запуска будет работать бесконечно.

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