2012-05-14 6 views
1

Возможно ли создать переменную в стартовом действии (например: класс книги в действии 1) и иметь ее в любом месте приложения (например, класс книги в действии 3 , 4 & 5) без фактического прохождения.Доступ к переменной из любого места приложения (Android)

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

ответ

4

Вы можете создать статическую переменную. Пока он объявлен с соответствующим доступом (например, public), он будет непосредственно доступен для любой активности в том же процессе. (Это будет по умолчанию, вам нужно сделать дополнительную работу, чтобы получить активность в отдельный процесс.)

Обычно такие глобальные переменные разделяются на отдельный класс.

Однако имейте в виду, что если ваше приложение помещено в фоновый режим, есть вероятность, что процесс будет уничтожен и повторно создан. В этом случае любые данные, хранящиеся в статических переменных, будут потеряны. Альтернативы включают использование SharedPreferences, базы данных или ContentProvider.

+0

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

+0

@Raigex - Я думаю, я сказал наоборот: просто объявите класс для хранения ваших общих переменных. Вы можете сделать его одиночным классом или сделать все общие переменные статическими. Если вам нужно защитить данные от уничтожаемого процесса (в отличие от повторного создания его при повторном запуске приложения), вам нужно быть немного более осторожным. –

+0

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

1

Внедрите класс, например, с именем GlobalVariables, который расширяет Application.

public class GlobalVariables extends Application 

В вашем AndroidManifest.xml сделать это в теге приложения:

<application android:label="@string/YourAppName" android:icon="@drawable/YourIcon" 
       android:name=".activities.GlobalVariables."> 

Не забудьте путь пакета для объявления вашего класса (по аналогии вы делаете для добавления действия в файл манифеста).

Затем вы можете получить доступ к этому классу и его переменным или методам извне вашего приложения. Делайте это в OnCreate метод любой деятельности:

GlobalVariables globalVariables = (GlobalVariables) getApplicationContext(); 

Класс простиралась от применения (например, наши GlobalVariables здесь) будет создан с началом вашего приложения и будет доступна до тех пор, пока приложение будет уничтожено.

У вас может быть HashMap или что-то еще, где вы можете сохранить желаемую переменную в классе GlobalVariables. Переместите переменную из первого действия в GlovalVariables и вытащите ее из второго желоба, чтобы получить экземпляр для GlobalVariables. Например:

GlobalVariables globalVariables = (GlobalVariables) getApplicationContext(); 
+1

Проблема в том, что когда приложение находится в фоновом режиме, объект «Приложение» (и весь процесс) может быть уничтожен операционной системой. Расширение 'Application' не обеспечивает дополнительной защиты от этого по сравнению с простым одноэлементным или статическим классом. –

Смежные вопросы