Как я могу улучшить время загрузки ActivityManager моего приложения? - PullRequest
2 голосов
/ 28 мая 2011

Я написал приложение, которое обрабатывает много данных при запуске;время первого запуска приложения довольно медленное, но то же самое происходит и при последующих запусках.

Раньше я думал, что относительно не отвечающие время запуска (~ 7 секунд) были из-за обработки данных при первой загрузке - немногоотладка предложила около 2 секунд для холодной загрузки.Поэтому я переработал свои структуры данных, чтобы их было легче сериализовать в постоянное хранилище между запусками (чтобы он кешировал данные), и теперь он сохраняет состояние, когда приложение заканчивается примерно через 20 мс, а время загрузки составляет около 10-20 мс.Намного лучше.(ps он не использует встроенную сериализацию Java, так как файлы состояний теперь настолько просты, что их легче сохранить в простом, читаемом (и редактируемом) текстовом файле - хотя это все еще довольно быстро при перезагрузке из этого!)

Тем не менее, я все еще нахожу, что время запуска приложения составляет около 5 секунд - я посмотрел в aLogCat, который имеет запись:

I/ActivityManager(...) blah blah blah: +5s193ms

Так что более 5 секунд, чтобы загрузитьотносительно простой макет (несколько вложенных LinearLayouts и несколько TextViews - ничего особенного и никаких изображений) - по общему признанию, время с последующими запусками сокращается (я закрываю приложение и открываю его снова, оно ~ 700 мс; промыть и повторить для получения аналогичных результатов).

оооочень мой вопрос: как я могу улучшить время загрузки приложения?Я рад, что загрузка first занимает немного времени, чтобы обработать все - это нормально.Но есть ли способ сохранить вещь в памяти или, по крайней мере, перевести ее в восстанавливаемое состояние, чтобы то, что делает ActivityManager, не занимало так много времени?Мне бы хотелось, чтобы это было что-то, что я могу открыть (вероятно, привязанный к долгому поиску или подобному), сделать что-нибудь и закрыть это снова - таким образом это должно открыться быстро!

Заранее спасибо:)

Себ

Ответы [ 3 ]

2 голосов
/ 28 мая 2011

Запустите свою сверхпрочную начальную работу в фоновом потоке, который вы запускаете в onCreate. ( AsyncTask хорош для этого.) Создайте свой пользовательский интерфейс, чтобы показать что-то значимое (по крайней мере, неопределенный индикатор выполнения), когда нет данных. Когда данные загружены, опубликуйте Runnable (или реализуйте onPostExecute в AsyncTask), чтобы обновить пользовательский интерфейс до реальной вещи.

0 голосов
/ 28 мая 2011

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

0 голосов
/ 28 мая 2011

Как предполагает Тед, сделайте только минимум в потоке пользовательского интерфейса.Пять секунд для загрузки макета - это слишком много, а это означает, что существует какой-то метод запуска, который требует длительного времени (может быть, запрос баз данных или доступ к сети для заполнения длинного ListView?).обработка абсолютно необходима, затем используйте заставку (с надписью «Пожалуйста, подождите при загрузке данных» или аналогичной).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...