Подтвердить что ты не робот

Фрагменты, setRetainInstance (true) и потоковые библиотеки

Здесь, Dianne говорит, что старые методы сохранения объектов через onRetainNonConfigurationInstance() теперь устарели из-за того, что вы можете сохранить экземпляры фрагментов в результате изменений конфигурации.

И здесь, в API Demos для фрагментов, он показывает, как использовать этот метод для поддержки потоков после конфигурации изменение.

Я вижу, что во время изменения конфигурации, когда Фрагмент не может быть привязан к какой-либо активности, и поток выполняется, когда он работает, он может вызвать wait(), чтобы он не пытался доставлять результаты во время действия не прилагается. Я нахожу это очень полезным и отличным способом смягчить одну из самых проблемных проблем с ориентацией на Android.

Однако, если вы используете поточную библиотеку (например, библиотеку API, которая использует исполнитель потока), где у вас нет доступа к wait() для указанных потоков, как мы можем использовать эту новую функцию для наше преимущество?

Как мы можем гарантировать, что сообщения не будут доставлены, пока активность не будет присоединена?

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

Кроме того, обратите внимание: я просмотрел API LoaderManager, и, похоже, было бы полезно, чтобы данные загружались, когда показывалось действие, но не для какого-либо события, например, для входа в систему с помощью кнопки, и т.д.

4b9b3361

Ответ 1

Вы можете обойти эту проблему, используя утилиту concurrency более высокого уровня, такую ​​как Latch, на которую вы могли бы ожидать, что все ваши потоки ожидают до тех пор, пока не будет присоединена новая активность (как раз перед тем, как они попытаются получить доступ к очереди сообщений для доставки их результат).

Как только действие будет подключено, вы можете освободить Защелку, позволяя всем потокам доставлять свои результаты.