Безопасен ли внутренний AsyncTask для доступа к полям частного члена внешнего класса Activity? - PullRequest
5 голосов
/ 16 января 2012

Безопасно ли для Android AsyncTask, который является внутренним классом Activity, читать поля приватных членов Activity в AsyncTask.doInBackground ()? Заранее спасибо.

Ответы [ 2 ]

8 голосов
/ 16 января 2012

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

В идеале doInBackground() AsyncTask должен иметь возможность работать независимо от его запускающего компонента (действия, службы и т. Д.). Я предлагаю вам создать конструктор на вашем AsyncTask и передать все, что нужно. Или же AsyncTask должен управляться динамическим фрагментом, который использует setRetainInstance(), и в этом случае (AFAIK) задача должна быть безопасной для доступа к частным элементам данных фрагмента , поскольку фрагмент никуда не денется.

0 голосов
/ 16 января 2012

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

...