Что возвращает System.nanoTime() в Android?
У меня есть куча мероприятий, связанных друг с другом, и так далее. Теперь во время одного занятия я хочу измерить прошедшее время. Как я понимаю, я бы использовал System.nanoTime()
чтобы найти время начала, пользователь делает некоторые вещи, а затем использует его еще раз, чтобы найти время окончания, вычесть два и вуаля мое затраченное время, затраченное на деятельность. Но предположим, что что-то происходит, когда моя деятельность выполняется: я уже создал время начала, но теперь пользователь получает телефонный звонок или что-то в этом роде, моя деятельность переводится в фоновый режим. Телефонный звонок заканчивается, и пользователь возвращается к активности. Таймер работал все время, даже когда приложение было в фоновом режиме? Таймер сбрасывается с тех пор, как я покинул приложение и вернулся к нему?
Кроме того, когда я начинаю System.nanoTime()
Возвращает ли оно время с начала этой конкретной деятельности или основной деятельности?
РЕДАКТИРОВАТЬ: Предположим, я установил первую отметку в определенной точке, затем приложение переходит в фоновый режим, затем возвращается на передний план, и я установил вторую отметку. В идеале я хочу, чтобы время прошло вместе с временем, проведенным в фоновом режиме; делает System.nanoTime()
достичь этого?
3 ответа
Вам нужно будет переопределить методы onPause() и onResume() в классе Activity, чтобы вы могли поставить таймер на паузу. и резюме в onResume.
Вы должны поместить System.nanoTime() в onResume()
static long nanoTime()
:
Возвращает текущую метку времени наиболее точного таймера, доступного в локальной системе.
Вы не используете "Таймер" (т. Е. Объект с любым состоянием) для представления прошедшего времени, вы просто держитесь долго. Как вы указали, в какой-то момент в будущем вы снова вызовете System.nanoTime() и вычтете, чтобы найти истекшее время.
Если вы хотите исключить время, потраченное вне этой деятельности, как, например, в вашем вопросе, вам нужно будет использовать onPause()
а также onResume()
чтобы помочь вам управлять расчетами. Или, если вы переключаетесь на какой-либо объект таймера, используйте эти методы, чтобы приостановить и возобновить таймер.
Вы можете "запустить" свой "таймер" там, где, по вашему мнению, имеет смысл. Если это когда пользователь инициирует какое-либо действие (например, нажатие кнопки), добавьте его в OnClickListener. Если это просто для измерения продолжительности пути какого-либо метода / кода, сделайте это в начале этого.
В соответствии с документом
System.nanoTime()
возвращает текущее значение наиболее точного доступного системного таймера в наносекундах.
Так что это не таймер. Он просто возвращает системное время в нано секундах. Это не имеет отношения к деятельности.
Если вы хотите измерить время жизни, найдите время в onCreate и onDestroy. И если вы хотите, чтобы время знало, сколько времени занятие было на переднем плане, получите время в onResume и onPause.