Рассмотрим исходный код 1002 * onResume()
, который выполняется каждый раз, когда вызывается super.onResume()
:
protected void onResume() {
if (DEBUG_LIFECYCLE) Slog.v(TAG, "onResume " + this);
getApplication().dispatchActivityResumed(this);
mActivityTransitionState.onResume();
mCalled = true;
}
, где mActivityTransitionState.onResume()
вызывает resetViews()
с дальнейшими действиями над представлениями в окне.Таким образом, хотя вы испытали, что это работает, все вызовы методов тратят время процессора и, по сути, избыточны, что приводит к выводу, что 1-й подход неэффективен.
С другой стороны, намерение использоватьmyOnResumeCode()
без вызова super.onResume()
позволяет избежать ненужных вызовов методов и является более оптимизированным решением.
Более того, 600 строк кода - это довольно большой объем.Если эти строки выполняются в главном потоке, пользовательский интерфейс замораживается, что делает приложение менее отзывчивым.Лучше выполнять вычисления в фоновом потоке и публиковать изменения представления в основном потоке.
Я не слышу страха НЕ вызывать super в моем коде.
Кажется, это неправильное понимание того, для чего предназначены методы жизненного цикла Activity
.Эти методы являются обратными вызовами, которые система использует для информирования слушателей о происходящих в ней событиях.И вы получили такое уведомление, как только onResume()
был вызван системой.Если вы удалите super.onResume()
, вы получите исключение, это четко указано в связанном исходном коде и является единственным запросом, который система «хочет» выполнить Ativity
при вызове ее onResume()
.Это относится ко всем остальным методам жизненного цикла - для информирования ОС.Системе все равно, если Activity
вызовет их снова, «вручную».Пока Activity
находится на переднем плане, вы можете вызывать onResume()
столько, сколько хотите, тратя процессорное время и делая ваше приложение менее отзывчивым для пользователей.
Опять переопределенный onResume()
является обратным вызовом ("слушатель ") и не может влиять на поведение системы в отличие, например, от метода finish()
, который воздействует на поведение системы, говоря:" Эй, система, я все сделал и хочу быть убитым тобой ".Такие методы могут рассматриваться как запросы к системе.
Обновление
Они даже говорят вам, куда поместить код вашего приложения?
Вы можете разместить свой код везде, где хотите.Система просто информирует вас через вызовы методов жизненного цикла, когда, скажем, ваш контент виден пользователю или скрыт.Таким образом, это вопрос размещения вашего кода в разумном «месте» в соответствии с событиями жизненного цикла.
Означает ли это состояние, что можно напрямую вызывать onResume ()?Есть такие строго установленные запреты, высказанные против этого.
Это бессмысленно, но работает, как вы засвидетельствовали. "Вы не должны есть мясо в пятницу" , но кто сказал, что вы не можете?:)