2013-05-21 1 views
3

Я не совсем уверен, является ли следующий подход хорошим или ужасным. Было бы здорово, если бы кто-то более опытный мог добавить свои 2 цента :)Android Java: лучшая практика для общего кода в переопределениях для всех действий

У меня есть приложение с большим количеством мероприятий. В этом случае все они должны иметь возможность получать сообщения от динамически зарегистрированного приемника (в onCreate/Resume/Pause ....) с помощью LocalBroadcastManager и запускать AsnycTask для выполнения некоторой работы и отображения ProgressDialog. Необходимый код (приемник и AsnycTask) абсолютно одинаковый для всех видов деятельности.

Сообщения могут быть отправлены в любое время одной из служб.

Для этого я создал активность, которая реализует все, что (регистры и Разрегистрирует приемник в OnCreate/приостановить/возобновить et.c. и содержит этот AsyncTask)

Все другие виды деятельности должны расширить эту деятельность таким образом я не Не нужно беспокоиться о том, чтобы добавить дополнительный код во все свои методы onCreate/onResume/onPause, чтобы вызвать любые вспомогательные классы/методы (и забыть об этом).

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

спасибо!

+0

С точки зрения Java это нормально. Необязательно, сделайте абстрактный абстрактный класс. – PeterMmm

ответ

1

У меня был большой успех, используя класс BaseActivity, из которого простираются все другие действия в моем проекте. Из-за этого я еще не сталкивался с проблемами памяти.

Альтернативный подход будет заключаться в использовании общей функциональности в интерфейсах, а затем при необходимости ваши действия реализуют эти действия. Есть несколько действительно хороших обсуждений достоинств этих двух подходов здесь: Interface vs Base class

+0

Спасибо за ваш ответ!Я с облегчением слышу, что все в порядке :) Да, я использую оба интерфейса и базовый класс. – mx82

1

Добавление моих 2центов, я согласен с MattDavis, я всегда устанавливаю «BaseActivity», который я считаю очень полезным.

нет ничего плохого в переопределении onCreate, однако есть некоторые дополнительные опции.

  1. В вашем BaseActivity, вы можете установить метод до и после «OnCreate вещи», но по-прежнему внутри метода OnCreate. В моем, я использую «PreUILoad()» и «PostUILoad». Затем я могу переопределить эти методы, чтобы добавить что-либо до или после моего default onCreate, не закручивая onCreate.

  2. Еще лучшее решение - реализовать эту библиотеку, которая облегчает жизнь в 100 раз. Я просто установил свой «BaseForm» (Form extends activity), чтобы иметь свои элементы, а затем все остальное расширяет BaseForm. Во всех других Формах мне даже не нужно касаться onCreate, просто метод «Определить», который устанавливает все, и мне никогда не придется беспокоиться о том, чтобы возиться с onCreate. Информация здесь:

https://code.google.com/p/alternate-java-bridge-library/

Надеется, что это полезно.

+0

Большое спасибо за понимание, а также за ссылку. Извините, я не могу отметить оба ваших ответа в качестве ответов, поэтому я выбрал первый. – mx82