У меня есть проект, который использует AsyncTask
для выполнения работы в фоновом режиме.
Этот проект также использует класс в качестве универсального держателя для статических значений, таких как ключи базы данных, но также для одного или двух полезных объектов для всего проекта. Допустим, этот класс называется public class Constants
.
Я хочу получить доступ к одному из этих объектов из AsyncTask
, и я не знаю, нужно ли мне его копировать или нет.
На самом деле я не получаю ошибок или сбоев, но я получаю некоторые отзывы пользователей, сообщающие о сбоях, которые я не могу воспроизвести, поэтому я догадываюсь, что с этим что-то не так.
Моя текущая обработка такова:
onStart() {// somewhere in the UI thread
new MyTask(Constants.theObject).execute(); // (1)
}
// ...
class MyTask extends AsyncTask<...> {
MyObjectType object;
MyTask(MyObjectType theObjectInstance) {
object = theObjectInstance; // (2)
// ...
doInBackground() { // (3)
// ...
}
В (1)
, Constants.theObject
- статический объект, созданный при запуске приложения
В (2)
я получаю ссылку на существующий статический объект Constants.theObject
В (3)
мы больше не в потоке пользовательского интерфейса, и я хочу получить доступ к Constants.theObject
(который также может использоваться в основном потоке)
.
Я думаю, что есть три возможных случая.
- этот код некрасив, я должен сделать иначе
- с этим кодом все в порядке, отзывы пользователей не об этом
- этот код вполне подходит, но я должен сделать копию
Constants.theObject
, если я хочу использовать его в doInBackground
; в противном случае может произойти сбой
Надеюсь, вы мне поможете! Большое спасибо за чтение.