убить ветку после возобновления основной активности? - PullRequest
0 голосов
/ 17 июня 2011

У меня есть эта проблема в Android. у меня есть основной вид деятельности, который вызывает поток с этим

   Runnable work = new Runnable() {

    public void run() {
        while (kill) {
            try {
                Thread.sleep(5000);
                connect();
                } catch (InterruptedException ex) {
                Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
            }
        }


    }
};

убить свой публичный логический элемент в MainActivity. Что я могу сделать, чтобы сохранить поток, чтобы, возобновив действие, я все еще мог убить поток?

Ответы [ 2 ]

1 голос
/ 17 июня 2011

Почему вы хотите убить тему в резюме?

Почему бы не запустить поток в части возобновления, затем поместить в блок finally, чтобы обработать тот факт, что connect() прерван, а затем, когда он запускается снова, вам просто нужно повторно подключиться и выполнить операцию.

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

У вас высокая вероятность быть прерванным, так что спроектируйте это.

Поток может быть прерван ОС, так что потом нечего сохранять и уничтожать.

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

Вы можете посмотреть на этот вопрос:

Удаленное обслуживание Android

0 голосов
/ 17 июня 2011

Я думаю, вы хотите сделать что-то ближе к тому, что предлагает это решение .

Однако, если вы действительно хотите продолжать делать это в Thread, тогда я предлагаю вам расширить новый класс с Thread и добавить метод с именем killMe().Это изменит (теперь private ) логический флаг kill.Затем в вашем onRetainNonConfigurationInstance() вы можете вернуть этот Thread и снова получить его в onResume.Если вы вернетесь и активность не будет прервана, тогда все в порядке, вы можете просто позвонить killMe() на существующий Thread.

Пример:

 @Override
  public Object onRetainNonConfigurationInstance() {
    return thread;
  }
...