Остановить поток загрузки изображений, когда деятельность заканчивается - PullRequest
0 голосов
/ 03 ноября 2011

В моем приложении активность запускает поток, который загружает изображения с сервера.Есть более 30 изображений.Во время загрузки пользователь может переключиться на другой вид деятельности.Поэтому я хочу, чтобы поток прекратил делать все, что он делает.Я использовал метод mThread.interrupt () в onDestroy (), но он не работал.Как это сделать?

Ответы [ 3 ]

0 голосов
/ 03 ноября 2011

Я могу предложить более простой и безопасный подход к этому

Используйте общее значение в вашем приложении; SharedPreferences или внутри контекста приложения Key = IsStopDownload Значение = Истина / Ложь

Part.1) в контексте приложения (MyApplication)

private boolean isAppActive = false;
public void setAppState(Context context, boolean state) {
    isAppActive = state;
    // note: you can also store this in SharedPreferences
}
public boolean getAppState(Context context) {
    return isAppActive;
    // note: you can also load this from SharedPreferences
}

part.2) Активность onResume и onPause являются гарантированными местами для определения состояния вашей активности.

onResume -> активность активна onPause -> активность не активна

Part.3) пусть ваш поток проверит состояние активности, и если он не активен, он может остановиться сам, что безопаснее, чем внешнее прерывание. потоки могут вести себя странно, когда прерываются извне, безопаснее разрывать цикл изнутри.

, например

((MyApplication)context.getApplicationContext()).getAppState(context);

если это ложно, поток останавливается

надеюсь, это поможет ...

---
Социальное кодирование @ AspiroTV

0 голосов
/ 03 ноября 2011

Прежде всего, вы, вероятно, намного лучше используете AsyncTask , чем Thread, поэтому лично я бы не стал использовать Thread вообще.По моему скромному мнению и небольшому опыту, в той ситуации, когда вы их используете, они растут и растут, пока у вас не появится спагетти-код.

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

Я бы указал на несколько причин, по которым вы должны использовать одну из них:

  • Служба не должна останавливатьсяпотому что деятельность уходит.
  • Услуги очень легко и быстро внедрить.И код уведомления для завершения также прост.
  • Вы загружаете изображения, и всегда лучше делать работу сразу, если можете, чтобы сэкономить пропускную способность и время соединения для пользователя и локально кешировать изображения.Раньше это было хуже, потому что сегодня сотовые телефоны являются полноценными компьютерами.Но это всегда важно для эффективности кода.Поэтому, ИМХО, вам нужно поддерживать как можно более маленькое / быстрое соединение.
  • Наконец, даже использование AsyncTask s внутри действия требует хитрого (простого, но все же хитрого) кода для отлова иотсоедините задачу, когда действие уходит, и проверьте наличие нулей, когда оно возвращается.Поскольку вы загружаете изображения, и это может занять некоторое время, и вполне возможно, что пользователь может потребовать изменения ориентации (перевести устройство в горизонтальное положение), вам понадобится .Поищите в стеке «поток изменения ориентации» для примеров.

Возможно, есть и другие причины, но они сейчас на моей голове.И конечно, это мое мнение.

0 голосов
/ 03 ноября 2011

Когда пользователь переключит действие, оно не будет уничтожено, но приостановлено, поэтому попытка вашего кода onPause () может сработать.

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