2015-05-15 2 views
1

У меня очень важная инициализация, которую нужно сделать при запуске приложения. Я нашел лучший способ сделать это, чтобы поместить этот код внутри onCreate() класса, который расширяет класс Application.Приложение onCreate() НЕ получает вызов каждый раз

class ApplicationDemo extends Application{ 

@Override 
public void onCreate(){ 
super.onCreate(); 
Log.d("LOG", "Inside onCreate()"); 
} 

} 

Проблема

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

В чем проблема? Как я могу обеспечить, чтобы определенный код запускался каждый раз, когда запускается мое приложение, и прежде чем что-либо еще будет выполнено?

+1

Когда вы помещаете свое приложение в фоновый режим, оно не автоматически убивается и не требует повторного создания при запуске действия. Итак, что вы подразумеваете под «каждый раз, когда мое приложение запускается» - каждый раз, когда приложение создается или каждый раз, когда действие возобновляется (подсказка: 'onResume()')? – laalto

+0

Вы закрываете приложение? – Karim

+0

@laalto Это просто означает, что «каждый раз, когда пользователь открывает приложение из значка запуска». Класс onCreate() класса Application не получает вызов каждый раз. –

ответ

4

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

Я уверен, что после того, как вы закрыли ваше приложение, оно действительно просто выходит на задний план, ожидая, что его снова выведут на передний план. (Он не создается снова, вы только повторно используете то, что уже создали.)

Попробуйте убедиться, что вы действительно killed the process of your application перед повторным его открытием; чтобы убедиться, что вы действительно закрыли &, снова закройте его, а не просто выполните простой фон переднего плана.

+0

Это хорошее объяснение. Итак, каков был бы лучший способ запуска куска кода при каждом запуске приложения (до запуска любого другого кода)? –

+1

вы можете добавить этот код на первом экране, который запускается в приложении, например Splash Screen. – Sam

+0

@Aritra вы можете создать абстрактный класс ProjectBaseActivity (расширение Activity), запустить код в onResume и наследовать все ваши другие действия от него. – simekadam

0

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

-1

Вы должны в AndroidManifest.xml в теге «приложения» установлено поле андроид: имя =

UPD автор отредактированный вопрос с моими утверждениями «ApplicationDemo.».

+0

Все это делается в реальном приложении. Это серьезно не может быть причиной проблемы. –

+0

Может быть, классное приложение должно быть общедоступным? – curioushikhov

0

Приложение или действие могут существовать, даже если его пользовательский интерфейс не отображается. Обратный вызов onCreate() вызывается только тогда, когда объект создается заново.

Это просто означает, что «каждый раз, когда пользователь открывает приложение из значка пусковой установки».

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

Конечно, там может быть до запуска кода, такие как onCreate() из Application и onCreate() в Activity поэтому он не всегда будет первым, что нужно бежать, но он будет гарантированно работать каждый раз, когда вы запускаете из меню.

+0

Да, я знаю об этом решении. Но я не могу поместить этот код в onResume активности запуска, так как эта активность будет появляться в потоке приложения много раз и этот код будет запускаться снова и снова. Но я хочу, чтобы этот код запускался только один раз. –

+0

«Но я хочу, чтобы этот код запускался только один раз» конфликтует с «каждый раз, когда пользователь открывает приложение из значка средства запуска». Только один раз за что? – laalto

+0

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

1

Это звучит как проблема жизненного цикла Android. Я включил ссылку о приостановки и возобновления деятельность

http://developer.android.com/training/basics/activity-lifecycle/pausing.html

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

Здесь вы можете либо переместить код в onResume(), либо оставить его в onCreate(), но убедитесь, что выход из приложения убивает процесс. что можно сделать, поставив

getActivity().finish(); 
System.exit(0); 

в любом пути, который направляет пользователь на домашний экран (onBackPressed(), кнопки выхода и т.д.)

для начала, попробуйте поставить бревно заявление в onResume и наблюдайте, как их зовут.

Надеюсь, это поможет.

0

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

Вы можете использовать

onResume() {} 

запустить что-то каждый раз, когда активность будет вызываться снова.

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