2012-06-18 3 views
0

В моем приложении для Android у меня есть класс, который расширяет Thread, который работает, когда есть установленное интернет-соединение (3G/WIFI).Правильный способ завершения экземпляра класса?

Когда приложение загружается, если подключение к Интернету установлено, я создаю экземпляр класса, как это:

MyThread thread = new MyThread(); // (it calls its own start() method) 

В потоке, если соединение потеряно, я хочу уничтожить Thread. Мне сказали не запускать finalize(), как бы я его уничтожил, так что thread == null правда?


Edit: Причина, я спрашивал был, позже, я хотел бы, чтобы перезапустить поток, в случае подключения возвращается, и проверьте, чтобы увидеть, если (thread == null) было бы легко. Я мог бы просто использовать флаг, чтобы указать, что поток нужно перезапустить или проверить, не было ли оно прервано. Спасибо за полезные комментарии.

+2

Просто вернетесь из потока, сборщик мусора будет заботиться о нем – GETah

+1

, когда теряется связь, вызов 'прерывания()' на вашем Thread. – Sajmon

+0

создайте флаг и установите его в true, когда ваш поток запущен. Если вы хотите остановить, просто установите для него значение false. Таким образом, вы можете быть уверены, что поток не будет продолжать работать в фоновом режиме. оставить его для сборщика мусора. – Orlymee

ответ

1

Как правило, вы не являетесь подклассом Thread. Вы создаете Runnable и передаете его в объект Thread, или еще лучше, ExecutorService.

Но вам не нужно беспокоиться о очистке после того, как резьба будет завершена, и она будет автоматически обрабатываться сборщиком мусора. Если вы хотите, чтобы ваша собственная локальная ссылка была нулевой, просто удалите ее самостоятельно или, еще лучше, не держитесь за нее.

new Thread(new Runnable() { 
    public void run() { 
     // put your stuff here 
    } 
}).start(); 
1

Попробуйте это,

  1. thread of execution will live until it has finished executing its run() method, то он либо переходит к dead stat е или в thread pool.

  2. Его всегда лучше контролировать метод run() с использованием boolean variable.

    например:

    boolean isRunning = true; 
    
        new Thread(new Runnable() 
    
         { 
    
        public void run() 
    
         { 
    
        while(isRunning) 
    
         { 
    
          // Keep doing your work here.... 
    
           if (!isRunning){ 
    
             break; 
            } 
    
    
           } 
    
        } 
    

    }).start();

+0

Обратите внимание, что для булевского флага требуется синхронизация, чтобы обеспечить видимость в обоих потоках. – wolfcastle

+0

Благодарим за помощь. – StackOverflowed

Смежные вопросы