在自定义视图

时间:2016-11-25 03:52:57

标签: android memory-leaks timer

我在自定义视图中使用计时器任务,自定义视图用于活动,因此自定义视图引用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,如何编码呢?​​

0 个答案:

没有答案