Android-конструкторы - PullRequest
       12

Android-конструкторы

3 голосов
/ 13 марта 2012

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

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

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

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

new MyActivity(some parameters);

, чтобы запустить конструктор, который заканчивается примерно так:

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

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

Простите, если я ошибся в синтаксисе, я просто набрал его:)

Ответы [ 2 ]

1 голос
/ 13 марта 2012

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

0 голосов
/ 13 марта 2012

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

...