У меня была группа кода в действии, которая отображает текущий график некоторых внешних данных. Поскольку код активности становился все более загроможденным, я решил извлечь этот код и создать класс GraphView
:
public class GraphView extends LinearLayout {
public GraphView(Context context, AttributeSet attrs) {
super(context, attrs);
LayoutInflater inflater = (LayoutInflater)
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.graph_view, this, true);
}
public void start() {
// Perform initialization (bindings, timers, etc) here
}
public void stop() {
// Unbind, destroy timers, yadda yadda
}
.
.
.
}
Переместить материал в этот новый LinearLayout
-обработанный класс было просто. Но был некоторый код управления жизненным циклом, связанный с созданием и уничтожением таймеров и прослушивателей событий, используемых этим графиком (я не хотел, чтобы этот опрос проводился в фоновом режиме, если действие было приостановлено, например).
Исходя из фона MS Windows, я ожидал найти переопределяемые onCreate()
и onDestroy()
методы или что-то подобное, но я не нашел ничего подобного в LinearLayout (или любом из его унаследованных членов). Необходимость оставить весь этот код инициализации в Activity, а затем передать его в представление, казалось, побеждала первоначальную цель инкапсуляции всего этого кода в представление многократного использования.
В итоге я добавил два дополнительных публичных метода в мое представление: start()
и stop()
. Я делаю эти вызовы из методов деятельности onResume()
и onPause()
соответственно.
Кажется, это работает, но я чувствую, что здесь я использую клейкую ленту. Кто-нибудь знает, как это обычно делается? Я чувствую, что что-то упустил ...