Зачем расширять класс приложения?

Зачем расширять класс Application ?

Что в нем для меня?

Почему ты бы так поступил?

Я читал, что его можно использовать для глобальных переменных, это все, другие приложения?

Solutions Collecting From Web of "Зачем расширять класс приложения?"

Оффлайн, я не могу думать о реальном сценарии, в котором продление Приложения либо предпочтительнее другого подхода, либо необходимо что-то сделать. Если у вас есть дорогостоящий, часто используемый объект, вы можете его инициализировать в IntentService, когда обнаруживаете, что объект в настоящее время отсутствует. Само приложение запускается в потоке пользовательского интерфейса, а IntentService работает в своем потоке.

Я предпочитаю передавать данные с Activity на Activity с явным намерениями или использовать SharedPreferences. Существуют также способы передачи данных из фрагмента в его родительскую активность с использованием интерфейсов.

Введение:

Введите описание изображения здесь

  1. Если мы рассматриваем файл apk на нашем мобильном устройстве, он состоит из множества полезных блоков, таких как Activity s, Service s и другие.
  2. Эти компоненты не общаются друг с другом регулярно и не забывают, что у них есть свой жизненный цикл. Которые указывают, что они могут быть активны одновременно и неактивны в другой момент.

Требования:

  1. Иногда нам может потребоваться сценарий, когда нам нужно получить доступ к переменной и ее состояниям во всем Application независимо от того, какую Activity использует пользователь,
  2. Например, пользователю может потребоваться доступ к переменной, в которой хранится его информация о персонале, такая как имя, к которому необходимо получить доступ через Application ,
  3. Мы можем использовать SQLite, но создаем Cursor и закрываем его снова и снова, это не хорошо для производительности,
  4. Мы могли бы использовать Intent s для передачи данных, но его неуклюжая и сама деятельность может не существовать при определенном сценарии в зависимости от доступности памяти.

Использование класса приложения:

  1. Доступ к переменным в Application ,
  2. Вы можете использовать Application для запуска определенных вещей, таких как аналитика и т. Д., Так как класс приложения запускается до запуска Activity s или Services s,
  3. Существует переопределенный метод, называемый onConfiguration() измененный, который запускается при изменении конфигурации приложения (по горизонтали и вертикали и наоборот),
  4. Есть также событие, называемое onLowMemory() , которое запускается, когда устройство Android остается низким в памяти.

Класс приложения – это объект, который имеет полный жизненный цикл вашего приложения. Это ваш самый высокий уровень как приложение. Пример возможного использования:

  • Вы можете добавить то, что вам нужно, когда приложение запускается, переопределяя onCreate в классе Application.
  • Хранить глобальные переменные, которые переходят из Activity в Activity. Как и Asynctask.

    и т.д

Иногда вы хотите хранить данные, такие как глобальные переменные, к которым необходимо получить доступ из нескольких видов деятельности – иногда везде в приложении. В этом случае объект Application поможет вам.

Например, если вы хотите получить базовые данные аутентификации для каждого HTTP- запроса, вы можете реализовать методы для данных аутентификации в объекте приложения.

После этого вы можете получить имя пользователя и пароль в любом из следующих действий:

 MyApplication mApplication = (MyApplication)getApplicationContext(); String username = mApplication.getUsername(); String password = mApplication.getPassword(); 

И, наконец, не забудьте использовать объект Application как одноэлементный объект:

  public class MyApplication extends Application { private static MyApplication xxx; public MyApplication getInstance(){ return singleton; } @Override public void onCreate() { super.onCreate(); singleton = this; } } 

Fore больше информации. Нажмите эту ссылку

Класс Application – это синглтон, к которому вы можете получить доступ из любой деятельности или где-либо еще, у вас есть объект Context.

Вы также получаете немного жизненного цикла.

Вы можете использовать метод onCreate приложения для создания дорогостоящих, но часто используемых объектов, таких как помощник аналитики. Затем вы можете получить доступ к этим объектам и использовать их везде.

Наилучшее использование класса приложения. Пример. Предположим, вам нужно перезапустить диспетчер аварийных сообщений при завершении загрузки.

 public class BaseJuiceApplication extends Application implements BootListener { public static BaseJuiceApplication instance = null; public static Context getInstance() { if (null == instance) { instance = new BaseJuiceApplication(); } return instance; } @Override public void onCreate() { super.onCreate(); } @Override public void onBootCompleted(Context context, Intent intent) { new PushService().scheduleService(getInstance()); //startToNotify(context); } 

Не ответ, а наблюдение : имейте в виду, что данные в расширенном объекте приложения не должны привязываться к экземпляру действия, так как возможно, что у вас есть два экземпляра одного и того же действия, выполняемых одновременно (один в Передняя часть и одна не видна) .

Например, вы обычно запускаете свою деятельность через пусковую установку, а затем «сворачиваете» ее. Затем вы запускаете другое приложение (например, Tasker), которое запускает другой экземпляр вашей активности, например, чтобы создать ярлык, потому что ваше приложение поддерживает android.intent.action.CREATE_SHORTCUT. Если затем создается ярлык и этот вызов, создающий ярлык, активирует действие объекта приложения, тогда действие, выполняющееся в фоновом режиме, начнет использовать этот модифицированный объект приложения, как только он будет возвращен на передний план.

Я вижу, что на этот вопрос отсутствует ответ. Я расширяю Application потому что я использую реализацию Билла Пью Синглтона ( см. Ссылку ), и некоторые из моих синглетов нуждаются в контексте. Класс Application выглядит следующим образом:

 public class MyApplication extends Application { private static final String TAG = MyApplication.class.getSimpleName(); private static MyApplication sInstance; @Contract(pure = true) @Nullable public static Context getAppContext() { return sInstance; } @Override public void onCreate() { super.onCreate(); Log.d(TAG, "onCreate() called"); sInstance = this; } } 

И синглтоны выглядят так:

 public class DataManager { private static final String TAG = DataManager.class.getSimpleName(); @Contract(pure = true) public static DataManager getInstance() { return InstanceHolder.INSTANCE; } private DataManager() { doStuffRequiringContext(MyApplication.getAppContext()); } private static final class InstanceHolder { @SuppressLint("StaticFieldLeak") private static final DataManager INSTANCE = new DataManager(); } } 

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

Совет. Обновление шаблона Singleton для Android Studio экономит много времени.

Вы можете обращаться к переменным в любой класс, не создавая объекты, если его расширяет приложение. Их можно назвать глобально, и их состояние сохраняется до тех пор, пока приложение не будет убито.

Начните с создания класса, расширяющего Android android.app.Application. Android создает экземпляр этого класса при запуске приложения, то есть при запуске DVM-процесса для запуска вашего apk. В качестве примера того, как работает приложение, давайте предположим, что мы создаем какой-то тип игры. В нашем игровом приложении будет несколько экранов – каждый экран в этом случае будет Activity. Игроки игры генерируют очки на каждом экране, и их оценка должна отслеживаться на многих экранах нашей гипотетической игры. Чтобы отслеживать игровой счет пользователя во многих действиях, составляющих игру, нам нужно место для хранения игрового счета на время игры – это до тех пор, пока выполняется процесс приложения.

Использование расширяющегося приложения просто делает ваше приложение уверенным для любой операции, которую вы хотите на протяжении всего периода работы вашего приложения. Теперь это могут быть любые переменные и предположим, что если вы хотите получить некоторые данные с сервера, вы можете поместить свою асинтезу в приложение, чтобы она извлекалась каждый раз и непрерывно, чтобы вы автоматически обновляли данные. Используйте эту ссылку Для большего знания ….

http://www.intridea.com/blog/2011/5/24/how-to-use-application-object-of-android

Я думаю, что вы можете использовать класс Application для многих вещей, но все они связаны с вашей необходимостью делать некоторые вещи до того, как начнутся какие-либо из ваших действий или служб. Например, в моем приложении я использую пользовательские шрифты. Вместо того, чтобы звонить

Typeface.createFromAsset()

Из каждой операции, чтобы получить ссылки на мои шрифты из папки «Активы» (это плохо, потому что это приведет к утечке памяти, поскольку вы сохраняете ссылку на активы каждый раз, когда вы вызываете этот метод), я делаю это из onCreate() в Мой класс приложения:

 private App appInstance; Typeface quickSandRegular; ... public void onCreate() { super.onCreate(); appInstance = this; quicksandRegular = Typeface.createFromAsset(getApplicationContext().getAssets(), "fonts/Quicksand-Regular.otf"); ... } 

Теперь у меня также есть метод, определенный следующим образом:

 public static App getAppInstance() { return appInstance; } 

и это:

 public Typeface getQuickSandRegular() { return quicksandRegular; } 

Итак, из любого места в моем приложении все, что мне нужно сделать, это:

 App.getAppInstance().getQuickSandRegular() 

Еще одно использование для класса Application для меня – проверить, подключено ли устройство к Интернету, перед действиями и службами, для которых действительно требуется соединение, и предпринять необходимые действия.