Активность, ФрагментДеятельность - PullRequest
0 голосов
/ 05 июня 2019

Есть ли в Android Activity несколько опций, чтобы узнать, сколько секунд было видно пользователю

Или я должен рассчитывать каждые секунды, которые были видимы, используя onCreate, onStart, onResume, onPause, onStop,onRestart, onDestroy

Ответы [ 3 ]

0 голосов
/ 05 июня 2019

Существует простой способ, если вам не нужна высокая точность

public class TestImpl implements Application.ActivityLifecycleCallbacks {
    ...
    ...
    @Override
    public void onActivityStarted(Activity activity) {
      //do something here,such as recording time,use differents tag .
    }

    @Override
    public void onActivityPaused(Activity activity) {
       //do something here,such as save the data to the database with your tag .
    }
}

last, загружайте данные в нужное время!

0 голосов
/ 05 июня 2019

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

Шаги

Внутри onResume запуск обработчика, как

public void onResume() {
  super.onResume()
  If(mHandler==null){
    mHandler = new Handler()
    mHandler.postDelayed(mRunnable, 1000)
  }
}



Runnable mRunnable = new Runnable() {
   public void run() {
       mCountSeconds++;
       mHandler.postDelayed(this, 1000);
   }
};

Теперь вы можете удалить обратный вызов внутри onDestroy

public void onDestroy() {
  super.onDestroy()

   // Here you can measure time in seconds simple access mCounterSeconds
  If(mHandler != null){ 
    mHandler.removeCallbacks(mRunnable)
  }
  //here you can save counter value into db, sharedprefs, file... 

}

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

0 голосов
/ 05 июня 2019

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

public abstract class BaseActivity extends Activity/AppCompatActivity {

    @Override
    protected void onPause() {
        super.onPause();
        //saveTime
    }

    ...
}

.

public abstract class MainActivity extends BaseActivity {

...

}
...