Всем добрый вечер. В процессе разработки приложения есть большая необходимость передачи каких либо переменных из одной Активити в другую. Я использовал всегда стандартный метод: Intent intent = new Intent(First.this, Second.class); intent.putExtra("key",from_to); startActivity(intent); И далее получение: String from_to = getIntent().getExtras().getString("key", "null"); Но данный метод мне откровенно осточертел, и я решил делать это через static преременные так: static String from_to; Где то: from_to = "Hello dear Android"; И в другой активити: String from_to = First.from_to; Но теперь меня мучает вопрос: чем же это может обернуться для меня?! Заранее всем спасибо!
Ответ
Половина из написанного откровенная чушь не совсем верна. Если все делать по человечачьи то ужасов навроде #сборщикмусораубил или #нарвалсянаnullpointer можно избежать.
В Android есть такой класс Application, который является естественным синглтоном. Как пишется в умной книжке:
When your Application implementation is registered in the manifest, it will be
instantiated when your application process is created. As a result your
Application implementation is by nature a singleton and should be implemented as
such to provide access to its methods and member variables.
Надо всего лишь создать свой собственный Application типа:
public class MyApplication extends Application {
private static MyApplication singleton;
private static MyVar myPreciousStaticVariable;
// Returns the application instance
public static MyApplication getInstance() {
return singleton;
}
public final void onCreate() {
super.onCreate();
singleton = this;
}
}
Правильно задекларировать в манифесте и вперед.
Нужные статические переменные (без фанатизма - то есть за минусом контекстов, юай элементов и проч. сумасшедшины) пихаем в MyApplication с правильной инициализацией в Application.onCreate() или в конструкторе (не забываем про lazy-init!), обкладываем статику геттерами (при необходимости и сеттерами) и все.
Далее в более менее любом месте проги делаем так:
myVar=MyApplication.getInstance().getMyPreciousStaticVariable();
Update
С освобождением ресурсов в Application это действительно проблема. Поскольку в Application нет явного колбэка вызываемого при закрытии. Немного утешает, что Application создается еще до момента создания любой из компонент приложения - Activity, Service, Receiver и проч. так что вы не сможете в Application явным образом создать эти объекты. А общее правило при создании объекта гласит - уничтожай там же где и создал. Так что создаем скажем в Activity.onCreate() - стало быть уничтожаем в Activity.onDestroy() и т.д. В общем хранение синглтон объектов в Application имеет свои ограничения - я согласен. В любом случае Application будет выгружен последним и все что останется после него будет убрано сборщиком мусора - не совсем кошерно, конечно.
Комментариев нет:
Отправить комментарий