about DateTimeView

android notification 의 경우 등록된 시간이 표시됩니다. 이는 f/w 의 Notification_template_header 에 정의되어 있는 DateTimeView 에 의한 동작입니다. 이 view 는 시스템 시간이 변경되거나 타임 포맷이 변경될 경우에 자동으로 업데이트가 이루어집니다. 이와 관련한 코드를 살펴보겠습니다.

DateTimeView 내부에는 ReceiverInfo 클래스가 존재합니다. ReceiverInfo 는 Intent.ACTION_TIME_TICK 를 받는 BroadcastReceiver 를 내부적으로 가지고 있습니다. 이 BroadcastReceiver는 DateTimeView가 attach 될 때 (onAttachedToWindow), register 가 이루어집니다.

protected void onAttachedToWindow() {
 super.onAttachedToWindow();
 ReceiverInfo ri = sReceiverInfo.get();
 if (ri == null) {
 ri = new ReceiverInfo();
 sReceiverInfo.set(ri);
 }
 ri.addView(this);
 }

또한 ReceiverInfo 은 ThreadLocal 로 관리됩니다. 그래서 여러 객체를 생성하더라도 BroadcastReceiver 동작은 한 곳에서만 처리되게 됩니다.

private static final ThreadLocal<ReceiverInfo> sReceiverInfo = new ThreadLocal<ReceiverInfo>();
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.