Это можно исправить с помощью флага FLAG_ACTIVITY_NEW_TASK
:
Intent intent = new Intent(this, ApplicationActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Это потому, что вам нужно запустить новое задание, когда действие запускается вне контекста действия.Но я настоятельно рекомендую не запускать Activity из приложения onCreate()
.
. Android имеет 4 компонента: Activity, Service, ContentProvider и Broadcast.
Когда Android необходимо активировать один изэти компоненты из вашего приложения, он выглядит, если уже существует запущенный процесс с вашим приложением.Если нет, то Android запускает новый процесс, инициализирует его, а затем инициализирует ваш пользовательский экземпляр приложения.И затем он активирует один из необходимых компонентов.
Теперь давайте рассмотрим следующий сценарий: ваше приложение объявило провайдера контента в AndroidManifest.xml
, и Android вот-вот запустит ваше приложение, чтобы вы могли предоставить некоторые данные другому приоритетному приложению..
- Запрос контент-провайдера отправлен
- Ваше приложение не запущено, и Android запускает новый процесс для него.
- Ваш пользовательский экземпляр приложения создан
Application.onCreate()
. - Вы запускаете действие
- Ваш провайдер контента получает запрос
Кто-то просто хотел подключиться к вашему провайдеру контента,но ваше приложение запустило Activity вместо этого.То же самое касается запуска фонового сервиса и иногда широковещательных приемников
А также подумайте, не захотел ли какой-либо другой активности приложения A запустить операцию X из вашего приложения.Но в onCreate()
вы начали деятельность Y, а затем X также запускается Android.Затем пользователь нажимает назад.Что должно произойти?Его сложно ...
Запуск действий с Application
* onCreate
может привести к довольно странному взаимодействию с пользователем.Так что не делайте этого.
ОБНОВЛЕНИЕ: Поскольку Android гарантирует, что Приложение будет создано только один раз и перед любым другим компонентом, вы можете использовать следующий код для доступа к единственному приложению.экземпляр:
public class MyApplication extends Application
{
private static MyApplication s_instance;
public MyApplication()
{
s_instance = this;
}
public static MyApplication getApplication()
{
return s_instance;
}
}