@@ -128,7 +128,7 @@ public void setReferenceTime(long referenceTime) {
128
128
/*
129
129
* Instantiate a new runnable with the new reference time
130
130
*/
131
- mUpdateTimeTask = new UpdateTimeRunnable ( this , mReferenceTime );
131
+ initUpdateTimeTask ( );
132
132
133
133
/*
134
134
* Start a new schedule.
@@ -186,10 +186,15 @@ protected void onVisibilityChanged(View changedView, int visibility) {
186
186
}
187
187
188
188
private void startTaskForPeriodicallyUpdatingRelativeTime () {
189
+ if (mUpdateTimeTask .isDetached ()) initUpdateTimeTask ();
189
190
mHandler .post (mUpdateTimeTask );
190
191
isUpdateTaskRunning = true ;
191
192
}
192
193
194
+ private void initUpdateTimeTask () {
195
+ mUpdateTimeTask = new UpdateTimeRunnable (this , mReferenceTime );
196
+ }
197
+
193
198
private void stopTaskForPeriodicallyUpdatingRelativeTime () {
194
199
if (isUpdateTaskRunning ) {
195
200
mUpdateTimeTask .detach ();
@@ -247,26 +252,30 @@ private SavedState(Parcel in) {
247
252
referenceTime = in .readLong ();
248
253
}
249
254
}
250
-
251
- private static class UpdateTimeRunnable implements Runnable {
252
255
253
- private long mRefTime ;
254
- private final WeakReference <RelativeTimeTextView > weakRefRttv ;
255
-
256
- UpdateTimeRunnable (RelativeTimeTextView rttv , long refTime ){
257
- this .mRefTime = refTime ;
256
+ private static class UpdateTimeRunnable implements Runnable {
257
+
258
+ private long mRefTime ;
259
+ private final WeakReference <RelativeTimeTextView > weakRefRttv ;
260
+
261
+ UpdateTimeRunnable (RelativeTimeTextView rttv , long refTime ) {
262
+ this .mRefTime = refTime ;
258
263
weakRefRttv = new WeakReference <>(rttv );
259
264
}
260
265
266
+ boolean isDetached () {
267
+ return weakRefRttv .get () == null ;
268
+ }
269
+
261
270
void detach () {
262
271
weakRefRttv .clear ();
263
272
}
264
273
265
- @ Override
266
- public void run () {
274
+ @ Override
275
+ public void run () {
267
276
RelativeTimeTextView rttv = weakRefRttv .get ();
268
- if (rttv == null ) return ;
269
- long difference = Math .abs (System .currentTimeMillis () - mRefTime );
277
+ if (rttv == null ) return ;
278
+ long difference = Math .abs (System .currentTimeMillis () - mRefTime );
270
279
long interval = INITIAL_UPDATE_INTERVAL ;
271
280
if (difference > DateUtils .WEEK_IN_MILLIS ) {
272
281
interval = DateUtils .WEEK_IN_MILLIS ;
@@ -277,7 +286,7 @@ public void run() {
277
286
}
278
287
rttv .updateTextDisplay ();
279
288
rttv .mHandler .postDelayed (this , interval );
280
-
281
- }
289
+
290
+ }
282
291
}
283
292
}
0 commit comments