2016-09-19 4 views
0

Я пытаюсь отслеживать продолжительность сеанса пользователя (с помощью Mixpanel - но этот вопрос не о Mixpanel). Я отправляю событие «AppStart», когда пользователь запускает приложение, и я запускаю таймер. Я отправляю «AppStop», включая продолжительность таймера, когда пользователь останавливает приложение (кнопка «Назад», «История», «Домашняя кнопка» ...) Моя первая мысль заключалась в использовании обратных вызовов жизненного цикла активности, но мое приложение состоит из нескольких и я не хочу отправлять события для переключения между ними. Как бы вы решили этот вопрос?Отслеживание длительности сеанса в android

ответ

0

Если вы не один уже, создать Android Application класса, а также использовать registerActivityLifecycleCallbacks иметь следующий код запуска для всех ваших действий onResume, и еще один для всех ваших действий :

 @Override 
     public void onActivityResumed(Activity activity) { 
      if (counter == 0) { 
       sendEvent("app-start") 
      } 
      counter++; 
     } 

     @Override 
     public void onActivityPaused(Activity activity) { 
      counter--; 
      if (counter == 0) { 
       handler.postDelayed(new Runnable() { 
        public void run() { 
         if (counter == 0) { 
          sendEvent("app-stop"); 
         } 
        } 
       }, 1000); 
      } 
     } 

см.: https://developer.android.com/reference/android/app/Application.html#registerActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks)

+0

Это не работает: Допустим, вы переключитесь с Activity A на B: A приостанавливается, а затем ПОСЛЕ возобновления B. Ваш код отправит «приложение-старт» каждый раз, когда вы переключитесь на активность – stoefln

+0

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

+0

Ваш код все еще не работает. Отправляет запуск приложения каждый раз при переключении на другое действие. Что просто логично – stoefln