Я разработал приложение для Android, которое состоит из FragmentActivity и нескольких фрагментов, которые вызывается при изменении вкладок. Каждый фрагмент связан с представлением. Логика фрагмента инкапсулирована в отдельные классы. Классы выполняют некоторые расчетные вычисления . Результаты этих вычислений должны быть показаны в нескольких текстовых представлениях фрагмента. Далее фрагмент содержит кнопку остановки, и вычисления классов должны реагировать после нажатия кнопки остановки.Android: утечка памяти из-за переменных-членов?
Мой вопрос теперь в том, как организовать доступ к этим элементам просмотра (текстовые представления и кнопка остановки) внутри классов. Безопасно ли передать переменную, связанную с каждым текстовым представлением, в качестве переменной-члена в соответствующий класс? Вот соответствующий код, который я использую.
class ClassAFragment extends Fragment
{
ClassA classA;
...
public View onCreateView(...)
{
Button stopButton = (Button) this.getActivity().findViewById (R.id.btnStop);
TextView timeLabel = (TextView) this.getActivity().findViewById (R.id.mTimeLabel);
this.classA = new ClassA();
this.classA.setAppElements(timeLabel, stopButton);
}
...
}
class ClassA
{
TextView mTimeLabel;
Button mStopButton;
public void setAppElements(TextView timeLabel, Button stopButton)
{
this.mTimeLabel = timeLabel;
this.mStopButton = stopButton;
this.mStopButton.setOnClickListener (this.mStopListener);
}
private void showCurrentProgress()
{
this.mTimeLabel.setText("some text");
}
public void stop()
{
// react upon stop button being clicked
}
OnClickListener mStopListener = new OnClickListener()
{
@Override
public void onClick (View v)
{
ClassA.this.stop();
}
};
...
}
Безопасен ли этот код в отношении утечек памяти? В официальной документации на Android я читал, что вы не должны передать любой объект, привязанный к контексту приложения, к переменной-члену (Handling Runtime Changes).
Большое спасибо за указание мне на LocalBroadcastManager. Теперь я использую эту конструкцию для обмена сообщениями между элементами моего приложения. – LaDude