2012-03-13 3 views
3

Итак, через некоторое время программирование приложений для Android (1 загружено на рынок, есть 3k + активные установки с рейтингом 4,7), я начал задаваться вопросом, как я могу сделать приложение еще более потрясающим. Я понял, что я действительно не мог добавить какие-либо новые и изменяющиеся в мире функции, поэтому я начал проверять производительность и как оптимизировать практически все, как найти лучший коэффициент использования процессора/памяти и т. Д.Конструкторы Android

В любом случае, я выяснил, что onCreate будет работать в случае поворота экрана, что вполне логично, но есть некоторые (большие) вычисления, которые, безусловно, не нужно повторять после каждого поворота. Один из них - итерация через csv с 6500 строками, имеющими 4 столбца, 2 из которых всегда содержит некоторые данные, 2 из которых не всегда. 2-й столбец с данными будет использоваться для адаптера автозаполнения, другой 2 является необязательным для функции, но его все равно нужно инициализировать. В настоящее время это работает в asynctask, запущенном в конце onCreate, и занимает около 3 секунд на моем HTC Desire S, у которого неплохой процессор, поэтому более низкие бюджетные устройства будут иметь более длительное время инициализации после каждого поворота, который конечно, я не хочу ... Это не приведет к сбою пользовательского интерфейса, но автозаполнения не будет, пока не закончится секундная пауза.

SO: мой вопрос: могу ли я сделать это в каком-то отдельном методе, например, в конструкторе (например, в стандартном java), или это плохая практика, потому что особый жизненный цикл действий? Я имею в виду, я создаю свою деятельность так, как будет работать «конструктор», и сразу после этого будет запущен мой onCreate. В случае вращения мой «конструктор» не будет запускаться снова, но onCreate будет. Стабильность по-прежнему будет моей целью nr1. Или, есть ли хороший способ сделать это? Что-то, что создано именно так, о чем я не помню? Я действительно хочу многого улучшить в этом вопросе, и я был бы очень признателен за помощь в этом, желательно от тех, у кого есть опыт в этом, но любая помощь приветствуется! :)

Например, если я хочу, чтобы сделать новую деятельность таким образом, я хотел бы сделать это что-то вроде этого:

new MyActivity(some parameters); 

около того пробеги конструктора, который заканчивается что-то вроде этого:

startActivity(new Intent(context, MyActivity.class)); 

Таким образом, конструктор запускается, мои переменные будут инициализированы (не подключаются к какому-либо виду и т. Д.), И после этого моя активность может запускать переменную onCreate в любое время.

пардон, если Im неправильно синтаксис, я просто fasttyped его :)

ответ

1

Вы должны отделить эту логику от вашей деятельности. Существует много способов сделать это, но конечная цель состоит в том, чтобы ваш синтаксический анализ csv выполнялся в другом классе, и этот класс должен предоставить информацию о том, были ли данные уже проанализированы. Итак, в onCreate вы вызываете свой класс для получения данных. Если он уже существует, вы сразу же получаете свои кешированные данные. Если это первый раз, когда метод вызывается или по какой-то причине ваш кеш был очищен, вы анализируете свой файл csv и выполняете любые вычисления, которые вам нужны.

+0

Я решил отделить эту логику до инициализатора Activity – hundeva

0

вы можете взглянуть на onRetainNonConfigurationInstance, который может вернуть объект, доступ к которому вы можете получить после того, как ваша деятельность была воссоздана .. поэтому вы просто вернете объект, содержащий все обработанные результаты onCreate, и в следующий раз, когда вы проверите, есть getLastNonConfigurationInstance() - и не пересчитывать все.

+0

, поэтому, если я правильно ее понимаю, я могу отметить некоторые переменные этим методом, поэтому он не получит уничтожены, но пощажены и могут быть переоценены в любое время? – hundeva

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