我在自定义视图中使用计时器任务,自定义视图用于活动,因此自定义视图引用Activity的上下文,自定义视图main方法如下所示:
public RushBuyCountDownTimerView(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
init();
}
private void init() {
View view = View.inflate(context, R.layout.view_countdowntimer, this);
tv_day_decade = (TextView) view.findViewById(R.id.tv_day_decade);
tv_day_unit = (TextView) view.findViewById(R.id.tv_day_unit);
}
public void start() {
if (timer == null) {
timer = new Timer();
clockTimeTask = new ClockTimeTask();
timer.schedule(clockTimeTask, 0, 1000);
}
}
class ClockTimeTask extends TimerTask {
@Override
public void run() {
handler.sendEmptyMessage(0);
}
}
public void stop() {
setVisibility(View.GONE);
context = null;
if (timer != null) {
timer.cancel();
timer = null;
}
if (clockTimeTask != null) {
clockTimeTask.cancel();
clockTimeTask = null;
}
}
在我的活动中,我在onStop()中调用方法stop():
@Override
protected void onStop() {
super.onStop();
if (mAdapter != null) {
mAdapter.stopFlashClock();
}
}
public void stopFlashClock() {
if (holder != null) {
holder.rbcvFalshPromoteTime.stop();
}
}
rbcvFalshPromoteTime是我的自定义视图。但是活动泄露,下面的图片是我在Android监视器中找到的结果。
Reference tree in andorid monitor
我该如何解决这个问题?我不能使用静态类,如果我可以使用WeakReference,如何编码呢?