Android: подсчитайте количество запусков приложений - PullRequest
2 голосов
/ 08 августа 2011

Мне нужно посчитать, сколько раз пользователь запускает приложение. Я сохраняю значение в общем предпочтении и помещаю логику счета в onCreate().

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

Это необходимо, или достаточно просто проверить null пакет, переданный на onCreate()? В любом случае, почему?

Ответы [ 5 ]

3 голосов
/ 08 августа 2011

Вы можете позвонить getCategories(), чтобы выяснить, включает ли он категорию LAUNCHER.

1 голос
/ 08 августа 2011

A null регистрация onCreate() должна работать просто отлично. Нет необходимости устанавливать отдельный флаг в onSaveInstanceState(). Хотя есть одна возможная проблема.

Скажите, что пользователь поместил ваше приложение в фоновом режиме (нажав клавишу home). Процесс подачи заявки в конечном итоге будет убит. Когда пользователь перезапустит приложение, вы получите соответствующий Bundle объект в onCreate() с установленным флагом. Пользователь может предотвратить увеличение вашего счетчика, просто создав фоновое изображение для вашего приложения.

Если фоновая обработка может быть проблемой, вы можете попробовать что-то вроде:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    if (getLastNonConfigurationInstance() == null) {
        counter++;
    }
}

public Object onRetainNonConfigurationInstance() {
    return new Object();
}

Я уже использовал приведенный выше код, и он работает на Eclair, FroYo и Gingerbread. Похоже, getLastNonConfigurationInstance() и onRetainNonConfigurationInstance() были помечены как устаревшие в Honeycomb, поэтому я не уверен, как это будет работать, если вы настроите таргетинг на Honeycomb.

1 голос
/ 08 августа 2011

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

Просто добавьте идею, надеюсь, она даст вам еще немного собственного!

0 голосов
/ 09 августа 2011

Прежде всего, спасибо всем за ваши ответы. Все они так или иначе помогли.

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

Самым близким, что я получил, было подсчет количества onResume() вызовов, а затем вычитание из него в onPause() в зависимости от возврата isFinishing(). Этот подход, однако, не учитывает кнопку «Домой», среди прочего, пользователь может скрывать приложения.

Я обновлю этот ответ, если когда-нибудь найду способ сделать это надежно.

0 голосов
/ 08 августа 2011

В методе onCreate включите проверку в Activity#getCallingActivity. Возвращается null, если приложение не было запущено из другого действия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...