Войти
AndroidФорумОбщее

Глобальные объекты в Java+Android (2 стр)

Страницы: 1 2 3 Следующая »
#15
13:14, 2 апр. 2013

[Deadly]
В С++ подход другой.
Как между Activity данные передавать?

Вот у меня грузится Activity А. В этом активити я отображаю какую-то инфу, плюс гружу данные D с диска.
Теперь пользователь что-то нажал и создалось Activity B.
В этом Activity B мне надо получать данные D.
Как?

#16
13:37, 2 апр. 2013

@!!ex
Ну у тебя Activity B в любом случае происходит/обрабатыватся от А....
Создай некий класс в котором ты будешь хранить данные ( самые самые) и передавай как класс Activity B

#17
13:38, 2 апр. 2013

[Deadly]
> передавай как класс Activity B
Как?

#18
13:41, 2 апр. 2013

Поскольку в андроиде нет никакой гарантии, что когда ты перейдеш в активити В, твоя активити А все ещё будет жива, то часто используют сериализацию и передают данные через Intent (putExtra, getExtra...) либо полностью сохраняют все на диск а при появлении новой активности загружают все по-новой с диска (но обычно конечно так не поступают с большими данными, да и надобности в простых приложениях такой обычно нет). Можно ещё хранить состояние всей системы в отдельном сервисе и обращаться к нему из активностей. Но вообще в играх я бы посоветовал отказаться от андроидовских Activity и реализовать всю смену игровых экранов в одной активности. Если для отрисовки используются стандартные средства (Canvas) то использовать разные View, если OpenGL - реализовать систему экранов в своем движке.

#19
13:43, 2 апр. 2013

FedeX
> Но вообще в играх я бы посоветовал отказаться от андроидовских Activity и
> реализовать всю смену игровых экранов в одной активности.
+1

#20
13:43, 2 апр. 2013

FedeX
> Поскольку в андроиде нет никакой гарантии, что когда ты перейдеш в активити В,
> твоя активити А все ещё будет жива
Куда же она денется? Activity верхнего уровня будет жить, пока живы порожденные ей Activity.

FedeX
> реализовать всю смену игровых экранов в одной активности.
Изобретать свой велосипед, когда есть четко работающий встроенный механизм... это странно, как минимум.

#21
13:50, 2 апр. 2013

@!!ex
> Куда же она денется?
почитай про Activity lifecycle - андроид может уничтожить любой не-foreground активити твоего приложения если недостаточно памяти. При возвращении по стеку экранов активити будет восстановлена из своего состояния (правда если в ней было реализовано сохранение своего состояния в onSaveInstanceState)

просто "Activity" в андроеде это не то что мы привыкли понимать под словом "окно" или "экран". Это именно обособленная активность пользователя не связанная с другими активностями

#22
13:51, 2 апр. 2013

@!!ex
> Велосипед изобретать очень не хочется.
Вот код

Вот что я на нём делал

Изобрести етот велосипед хватило неделю ( до этого я на java не программировал, только на си)... Всё с одним Activity

#23
13:55, 2 апр. 2013

FedeX
Хм. Спасибо за инфу.
Значит буду через отдельные View делать.

[Deadly]
Без обид, но у тебя не сделано ничего. Загрузка и скролл карты за день пишутся.
В рамках обсуждаемой темы твой код не актуален, так как в твоем видео полностью отсутствует мультиоконность, для которой и удобный отдельные Activity.

#24
15:15, 2 апр. 2013

ещё, конечно, если у тебя уже сделано через активити, можешь переместить свой "god-singleton" (шучу) в класс унаследованный от Application (не забудь прописать его в манифесте) - этот класс по-идее живет все время пока существует хотя-бы одна активность или сервис (на деле он остается жить даже и дальше пока андроиду не начинает нехватать памяти - поэтому в onDestroy главной или последней активности лучше вызвать в нем какой-то свой метод типа "recycleUsedResources" в котором и обнулить ссылку на твой обьект. Вообще, так как ты хотел тоже можно, ведь даже если активность уничтожается за нехваткой памяти - на деле уничтожается только ее окно (то-есть все вьюшки, контролы, связанные с ними битовые карты и т.п.) - сам обьект, если не ошибаюсь, остается в памяти.

#25
15:19, 2 апр. 2013

FedeX
> если у тебя уже сделано через активити
У меня уже сделано через активити и static поля.
Я как раз хочу переписать нормально. Поэтому и поднял тему.

#26
15:30, 2 апр. 2013

ну вот вроде перемещение в Application и будет немного правильнее, из любой активности ты сможешь взять getApplication и преобразовать к своему типу. У Application есть несколько полезных событий, которые можно использовать (например onLowMemory, onTerminate) и контекст (глобальный - с ним правда надо тоже осторожно чтоб небыло утечек памяти потому как этот контекст существует все время пока существует приложение).

Кстати, чтоб проверить будет ли корректно работать твое приложение в условиях нехватки памяти в андриде 4.х добавили девелоперскую опцию в настройках - System->Developer Options->Don't keep activities. Поидее все что нужно это корректно перезагружать все вьюшки при onRestoreInstanceState

#27
15:34, 2 апр. 2013

Судя по документации Appliction - это и есть глобальный объект для управления всем в приложении. То есть создан как раз для того, о чем тема.

#28
20:54, 2 апр. 2013

@!!ex
Вот советуют https://code.google.com/p/roboguice/wiki/ProvidedInjections

#29
20:58, 5 апр. 2013

@!!ex
Тред не читай @ сразу отвечай. Если решишь проблему - скажи, пожалуйста, решение.

Если бы передо мной встала такая задача и надо было бы решать её быстро, то я, пожалуй, использовал какой-нибудь Entity-класс, который бы брал данные из SharedPreferences. Ну т.е.:

class People{
  void load(Context context){
    property = //загрузка из shared preferences всех свойств
  }

  void save(Context context){
    //сохранение всех свойств в Shared Preferences
  }
  //Тут стандартный для Java-bean'ов код
  void setProperty(int property){}
  int    getProperty(){};
}

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

Страницы: 1 2 3 Следующая »
AndroidФорумОбщее

Тема в архиве.