2013-04-30 1 views
0

Я попытался найти четкий ответ, но не смог найти его, поэтому попросил его здесь. Извините, если это вопрос nOOb.Является ли просмотр инфляции кэшированным в действии

Мой вопрос: имеет ли Android кеш инфляцию за пределами действия?

Я написал пример приложения, в котором есть 2 мероприятия

Activity A активность B

Справедливый есть кнопка, которая запускает B. B имеет довольно сложную схему.

B имеет заглушку просмотра, и я настроил инфразвук theViewStub (который в основном отображает весь макет).

Когда я определил, сколько времени потребуется для разметки B. Первый раз он занял примерно 100 мс. Дальнейшие инфляции составляли 15-20 мс. Странная часть была после нескольких итераций, случайным образом B снова забирает 100 мс для раздувания.

Я также проверил, что моя сложная деятельность (B) становится разрушен и создан снова (как я ударил назад от B и запустить B снова из A)

Я не мог найти ничего в Android код базы, которые могли бы объясните мне, почему это происходит.

Не могли бы вы рассказать мне, где происходит это кеширование.

Здесь представлены журналы ComplexActivity onCreate и onDestroy. Я использую назад нажмите, чтобы уничтожить свою деятельность

04-30 13:32:09.879: I/testInflation(19298): onCreate setting up content view 
04-30 13:32:09.895: I/testInflation(19298): onCreate content view set. Time took = 15 ms. 
04-30 13:32:09.895: I/testInflation(19298): onCreate inflating ui 
04-30 13:32:10.004: I/testInflation(19298): onCreate ui inflated. Time took = 108 ms. Total time into method = 123 ms. 
04-30 13:32:12.450: I/testInflation(19298): activity destroyed 
04-30 13:32:12.903: I/testInflation(19298): onCreate setting up content view 
04-30 13:32:12.911: I/testInflation(19298): onCreate content view set. Time took = 13 ms. 
04-30 13:32:12.911: I/testInflation(19298): onCreate inflating ui 
04-30 13:32:12.926: I/testInflation(19298): onCreate ui inflated. Time took = 13 ms. Total time into method = 26 ms. 
04-30 13:32:13.958: I/testInflation(19298): activity destroyed 
04-30 13:32:14.379: I/testInflation(19298): onCreate setting up content view 
04-30 13:32:14.395: I/testInflation(19298): onCreate content view set. Time took = 11 ms. 
04-30 13:32:14.395: I/testInflation(19298): onCreate inflating ui 
04-30 13:32:14.403: I/testInflation(19298): onCreate ui inflated. Time took = 11 ms. Total time into method = 22 ms. 
04-30 13:32:15.223: I/testInflation(19298): activity destroyed 
04-30 13:32:15.622: I/testInflation(19298): onCreate setting up content view 
04-30 13:32:15.637: I/testInflation(19298): onCreate content view set. Time took = 11 ms. 
04-30 13:32:15.637: I/testInflation(19298): onCreate inflating ui 
04-30 13:32:15.645: I/testInflation(19298): onCreate ui inflated. Time took = 13 ms. Total time into method = 24 ms. 
04-30 13:32:16.692: I/testInflation(19298): activity destroyed 
04-30 13:32:17.934: I/testInflation(19298): onCreate setting up content view 
04-30 13:32:17.950: I/testInflation(19298): onCreate content view set. Time took = 11 ms. 
04-30 13:32:17.950: I/testInflation(19298): onCreate inflating ui 
04-30 13:32:17.965: I/testInflation(19298): onCreate ui inflated. Time took = 18 ms. Total time into method = 30 ms. 
04-30 13:32:19.020: I/testInflation(19298): activity destroyed 
04-30 13:32:23.825: I/testInflation(19298): onCreate setting up content view 
04-30 13:32:23.833: I/testInflation(19298): onCreate content view set. Time took = 12 ms. 
04-30 13:32:23.833: I/testInflation(19298): onCreate inflating ui 
04-30 13:32:23.848: I/testInflation(19298): onCreate ui inflated. Time took = 11 ms. Total time into method = 23 ms. 
04-30 13:32:26.622: I/testInflation(19298): activity destroyed 
04-30 13:32:27.145: I/testInflation(19298): onCreate setting up content view 
04-30 13:32:27.161: I/testInflation(19298): onCreate content view set. Time took = 15 ms. 
04-30 13:32:27.161: I/testInflation(19298): onCreate inflating ui 
04-30 13:32:27.231: I/testInflation(19298): onCreate ui inflated. Time took = 69 ms. Total time into method = 85 ms. 
04-30 13:32:28.200: I/testInflation(19298): activity destroyed 
04-30 13:32:28.645: I/testInflation(19298): onCreate setting up content view 
04-30 13:32:28.661: I/testInflation(19298): onCreate content view set. Time took = 11 ms. 
04-30 13:32:28.661: I/testInflation(19298): onCreate inflating ui 
04-30 13:32:28.747: I/testInflation(19298): onCreate ui inflated. Time took = 91 ms. Total time into method = 102 ms. 
+0

@Robert Спасибо за фиксацию выхода logcat. – ReadyToLearn

+0

Android не убивает вашу активность, когда вы нажимаете назад, она сохраняется в памяти до тех пор, пока система не исчерпает память, а затем и только тогда действие будет удалено. Существует способ заставить убивать активистов каждый раз, когда вы нажимаете назад, если у вас есть устройство Android4 +, перейдите в Настройки-> Параметры разработчика-> Не выполняйте действия, и убедитесь, что это отмечено –

+0

@jucas это правда, даже если Я проверил Activity onDestroy? – ReadyToLearn

ответ

0

андроида: launchMode инструкция о том, как должна быть запущена деятельность. Существует четыре режима, которые работают вместе с флажками активности (константы FLAG_ACTIVITY_ *) в объектах Intent, чтобы определить, что должно произойти, когда действие призвано обрабатывать намерение. К ним относятся:

"стандарт"

"SingleTop"

"singleTask"

"SingleInstance" Режим

по умолчанию является "стандартным".

с «стандартными» и «однократными» действиями с одной стороны, а действия «singleTask» и «singleInstance» - с другой. Действие со стандартным режимом запуска «стандартное» или «однократное» может быть создано несколько раз. Экземпляры могут принадлежать любой задаче и могут быть расположены в любом месте стека действий. Как правило, они запускаются в задачу, которая называется startActivity() (если объект Intent не содержит команду FLAG_ACTIVITY_NEW_TASK, в этом случае выбрана другая задача - см. Атрибут taskAffinity).

Напротив, действия «singleTask» и «singleInstance» могут только начинать задание. Они всегда находятся в корне стека активности. Кроме того, устройство может удерживать только один экземпляр активности за один раз - только одна такая задача.

Таким образом, по умолчанию он является стандартным, чем он будет использовать активность из задней стопки. Читайте об андроиде активности. и когда активность идет из задней стеки и все. Это занимает меньше времени, когда u снова запускает активность, потому что у нее много много объектов в куче

В соответствии с этими документами, когда активность выставляется из стека ... она будет уничтожена. http://developer.android.com/guide/components/tasks-and-back-stack.html

Но ваша деятельность происходит в разное время, когда u запускает ее. Это связано с тем, что сборщик мусора системы работает в определенный промежуток времени и очищает выделенную память от объекта. Итак, после запуска Activity A вы перейдете в ACtivity B. Теперь вы нажимаете кнопку «Назад»: это означает, что «Активность B» выйдет из стека и вскоре будет уничтожена. Но вы начинаете эту деятельность до запуска сборщика мусора. Вот почему это занимает меньше времени

Сделайте одно, запустите System.gc() at on destroy .... или напишите finish() в onPause() ... ur Активность займет почти одно и то же время, чтобы раздуть макет ,

+0

Разве это не действие, которое было уничтожено. В этот момент нет заднего стека. A-> B -> (назад, что привело к уничтожению и выбросу B) -> A – ReadyToLearn

+0

Я напечатал «этот» указатель активности, и он всегда давал мне новую активность всякий раз, когда я снова запускал эту деятельность. – ReadyToLearn

+0

На самом деле дело в том, что когда u начнет активность B из Activity A..it начнет действие B, а Activity A будет в задней части. В этом случае, если u нажимает кнопку «Назад», чем «Активность B», будет уничтожена, а предыдущая активность стека (то есть «Активность A») выйдет вперед. На этот раз он будет вызывать метод onRestart() для Activity A. –

Смежные вопросы