내 목록보기에 chronometer이 있습니다. 문제는 때로는 다른 탭으로 이동했거나 목록보기 항목을 스크롤하여 볼 수 없거나 심지어 Home
버튼을 누른 후에도 누수가 발생하여 매초마다 OnChronometerTickListener
이 실행되는 것을 볼 수 있다는 것입니다. 실제로 볼 때만 실행해야하므로 리소스 낭비 인 것 같습니다.목록보기의 크로노 미터가 누출되는 경우가 있음
이 동작을 피하는 방법이 있습니까? 가끔씩 만 발생한다는 점에 유의하십시오.
public class TimerLayout extends LinearLayout {
private static final String LOG_TAG = "TimerLayout";
Button btn_endTimer;
Button btn_cancelTimer;
Chronometer cmt_timer;
Runnable updateTimerThread;
Handler handler;
public TimerLayout(Context context, AttributeSet attrs) {
super(context,attrs);
setOrientation(LinearLayout.VERTICAL);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.timer, this, true);
cmt_timer = (Chronometer) getChildAt(0);
btn_endTimer = (Button) ((ViewGroup) getChildAt(1)).getChildAt(0);
btn_cancelTimer = (Button) ((ViewGroup) getChildAt(1)).getChildAt(1);
btn_endTimer.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View view){
cmt_timer.stop();
}
});
btn_cancelTimer.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View view){
cmt_timer.stop();
}
});
cmt_timer.setOnChronometerTickListener(new OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer arg0) {
if(BuildConfig.DEBUG){Log.d(LOG_TAG,"onChronometerTick.objectid=" + System.identityHashCode(TimerLayout.this));}
}
});
}
public void init(Date startTime){
cmt_timer.stop();
if(startTime!=null){
Date now = new Date();
long elapsedTime = now.getTime() - startTime.getTime();
cmt_timer.setBase(SystemClock.elapsedRealtime() - elapsedTime);
cmt_timer.start();
}
}
}
나는 그것을 시작하는 내 cursorAdaptor
의 bindView()
방법이 클래스의 init
메서드를 호출합니다.