I have this basic Preference
subclass that I have a Handler
in. It will fire every second but it will not stop if the custom Preference
is no more visible.
<PreferenceCategory
android:layout="@layout/pref_category_text"
android:title="@string/pref_category_stat_out_title">
<com.sunlux.smartpower.extended.preferences.ShowStatPreference android:key="@string/pref_key_show_stat" />
</PreferenceCategory>
public class ShowStatPreference extends Preference {
private long MEGABYTE = 1024L * 1024L;
private TextView bytesStat;
private Handler mHandler;
/**
* Timer for updating stat
*/
private final Runnable statRunnable = new Runnable() {
@Override
public void run() {
setStatSomething();
startStatTimer();
}
};
public ShowStatPreference(Context context) {
super(context);
}
public ShowStatPreference(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public ShowStatPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
setWidgetLayoutResource(R.layout.show_stat_preference);
mHandler = new Handler();
startStatTimer();
}
@Override
public void onBindViewHolder(PreferenceViewHolder holder) {
holder.itemView.setClickable(false); // disable parent click
bytesStat = (TextView) holder.findViewById(R.id.bytes);
super.onBindViewHolder(holder);
}
private void startStatTimer() {
mHandler.postDelayed(statRunnable, 1000);
}
private void setStatSomething(){
// do stuff
}
}
I could through listeners and send a message to make it stop when I change tab in the PagerAdapter
, or if app is closing.
Is this my only chose here?
Any idea?