Как оптимизировать работу Android с более чем 50 тыс. строк кода

#java #android #performance #static

#java #Android #Производительность #статический

Вопрос:

Одно из моих первых приложений для Android, которое я разработал, дошло до того, что основное действие содержит более 50 тыс. кодов строк, в качестве моего первого приложения я не уделял особого внимания правильному управлению своей деятельностью и методами, и в качестве нового проекта я решил исправить это и упорядочить код приложения.

Каков был бы наилучший и рекомендуемый способ сделать это? на данный момент я просто переношу большинство методов в служебные классы и вызываю их, когда мне нужно, как: ClassA.method(логическое значение, логическое значение).

Может ли использование такого количества статических методов из служебных классов повлиять на производительность? (Обычно я вызываю методы без создания класса) Есть ли лучший способ обойтись без статических методов в служебных классах?

Ответ №1:

Каков был бы наилучший и рекомендуемый способ сделать это?

Ну, моя первая реакция — подумать о том, чтобы начать все сначала. Отбросьте нынешний беспорядок и начните с нуля. С правильным объектно-ориентированным дизайном и так далее.

Может ли использование такого количества статических методов из служебных классов повлиять на производительность?

В целом это не должно влиять на производительность. Но есть и другие проблемы, связанные с чрезмерным использованием статики.

Есть ли лучший способ обойтись без статических методов в служебных классах?

ДА. Объектно-ориентированный подход, при котором функциональность была проанализирована и учтена в OO-дизайне, а затем реализована в виде классов Java, которые создаются и используются соответствующим образом. Это часто также включает в себя использование шаблонов проектирования OO.


Довольно часто первая попытка написать большую программу на новом языке программирования или в новой среде оказывается немного запутанной. Вы учитесь и, скорее всего, совершите большие ошибки.

Когда вы дойдете до точки, где это делается, и оглянетесь на код, он может выглядеть ужасно. Но вопрос в том, что с этим делать. Возможны следующие варианты:

  • Оставь это в покое. Если это сработает, этого может быть достаточно. Вы можете сделать заметку для себя, чтобы что-то предпринять по этому поводу позже. (Есть поговорка, которая может быть уместна по этому поводу: «Какашку не отполируешь».)
  • Попробуй это исправить. За исключением того, что это большая работа, и конечный результат ваших усилий по исправлению все равно может быть довольно второсортным с точки зрения … критерии, которые важны для вас.
  • Выбросьте его и начните все сначала. Написание кода во второй раз часто намного проще и быстрее, чем в первый раз. Вы должны собрать «хорошие фрагменты», то есть идеи и, возможно, часть кода с вашей первой попытки. Но будьте избирательны.

Сказав выше, вы, возможно, еще не готовы исправить код. Как я уже отмечал, лучший способ реализовать Java-код — использовать шаблоны проектирования и проектирования OO. И лучший способ написать конкретное приложение для Android может привести к тому, что вам не придется писать большие объемы кода Java.

Если вы еще недостаточно изучили, возможно, еще слишком рано переписывать ваше приложение. В качестве альтернативы вы можете рассматривать перезапись как еще одно учебное упражнение.

Комментарии:

1. «В целом не должно быть влияния на производительность. Но есть и другие проблемы, связанные с чрезмерным использованием статики. » каковы другие проблемы?

2. Возможность тестирования … особенно если вы используете статические методы с отслеживанием состояния. Кроме того, статические методы имеют тенденцию размывать границы абстракции, отделяя функциональность от объектов. Однако они не всегда плохи… но на самом деле, вы должны читать это из книг по дизайну OO и шаблонам проектирования.

Ответ №2:

Использование композиции в том виде, в каком вы используете служебные классы, — неплохая идея. Это не должно сильно влиять на производительность, если вообще что-либо делать, только потому, что вы вызываете через другой класс. Но что это сделает, так это сделает код более удобным для обслуживания, поскольку вы можете разделить свой код на блоки с высокой степенью согласованности.

Если есть часть основного действия, которую вы можете распознать, что у нее есть своя ответственность (помимо обязанностей основного действия), вы также можете предоставить этой функциональности свой собственный класс и, возможно, попытаться выяснить, должен ли он быть типом компонента в Android.

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