У меня была куча кода в активности, которая отображает текущий график некоторых внешних данных. Поскольку код активности становился чем-то загроможденным, я решил извлечь этот код и создать класс 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
-derived было простым. Но был некоторый код управления жизненным циклом, связанный с созданием и уничтожением таймеров и прослушивателей событий, используемых этим графиком (я не хотел, чтобы эта вещь была опроса в фоновом режиме, если активность была приостановлена, например).
Исходя из фона MS Windows, я как бы ожидал найти переопределяемые методы onCreate()
и onDestroy()
или что-то подобное, но я не нашел ничего подобного в LinearLayout (или любом из его унаследованных элементов). Чтобы оставить весь этот код инициализации в Activity, а затем передать его в представление, казалось, он победил исходную цель инкапсуляции всего этого кода в многоразовое представление.
В результате я добавил два дополнительных общедоступных метода: start()
и stop()
. Я делаю эти вызовы из действий onResume()
и onPause()
соответственно.
Это похоже на работу, но мне кажется, что я использую клейкую ленту здесь. Кто-нибудь знает, как это обычно делается? Я чувствую, что мне что-то не хватает...