2010-05-17 1 views
1

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

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

ответ

1
  1. Нет
  2. Нет

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

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

0

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

Произнесите обои просто есть мяч движущуюся по экрану, это будет выборочный метод запуска():

boolean isAnimating; 

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

} 

Таким образом, ваш метод работы будет продолжать работать неопределенно долго.