Skip to content

Commit

Permalink
Make handler static, add note on how to compile in Eclipse.
Browse files Browse the repository at this point in the history
  • Loading branch information
jasonostrander committed Oct 13, 2013
1 parent dd58bc7 commit eaa604d
Show file tree
Hide file tree
Showing 11 changed files with 211 additions and 86 deletions.
38 changes: 28 additions & 10 deletions Chapter2/TimeTracker/src/com/example/TimeTrackerActivity.java
@@ -1,6 +1,10 @@
package com.example;

import java.lang.ref.WeakReference;

import android.annotation.TargetApi;
import android.app.Activity;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
Expand All @@ -16,13 +20,17 @@ public class TimeTrackerActivity extends Activity implements OnClickListener {
private TimeListAdapter mTimeListAdapter = null;
private long mStart = 0;
private long mTime = 0;

private TimeHandler mHandler;

/** Called when the activity is first created. */
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

// Create a handler to run the timer
mHandler = new TimeHandler(this);

// Initialize the Timer
TextView counter = (TextView) findViewById(R.id.counter);
Expand Down Expand Up @@ -102,16 +110,26 @@ private void resetTimer() {
mTime = 0;
}

private Handler mHandler = new Handler() {
private static class TimeHandler extends Handler {
WeakReference<TimeTrackerActivity> mActivityRef;

public TimeHandler(TimeTrackerActivity activity) {
mActivityRef = new WeakReference<TimeTrackerActivity>(activity);
}

@Override
public void handleMessage(Message msg) {
long current = System.currentTimeMillis();
mTime += current - mStart;
mStart = current;
TimeTrackerActivity activity = mActivityRef.get();
if (activity != null) {
long current = System.currentTimeMillis();
activity.mTime += current - activity.mStart;
activity.mStart = current;

TextView counter = (TextView) TimeTrackerActivity.this.findViewById(R.id.counter);
counter.setText(DateUtils.formatElapsedTime(mTime/1000));
TextView counter = (TextView) activity.findViewById(R.id.counter);
counter.setText(DateUtils.formatElapsedTime(activity.mTime/1000));

mHandler.sendEmptyMessageDelayed(0, 250);
};
};
sendEmptyMessageDelayed(0, 250);
}
}
}
}
3 changes: 3 additions & 0 deletions Chapter3/TimeTracker/src/com/example/TimeTrackerActivity.java
Expand Up @@ -3,12 +3,14 @@
import java.util.ArrayList;
import java.util.List;

import android.annotation.TargetApi;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.os.Build;
import android.os.Bundle;
import android.os.IBinder;
import android.os.StrictMode;
Expand All @@ -35,6 +37,7 @@ public class TimeTrackerActivity extends FragmentActivity implements OnClickList
private TimerService mTimerService = null;

/** Called when the activity is first created. */
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@Override
public void onCreate(Bundle savedInstanceState) {
Log.i(TAG, "onCreate");
Expand Down
35 changes: 25 additions & 10 deletions Chapter3/TimeTracker/src/com/example/TimerService.java
@@ -1,5 +1,7 @@
package com.example;

import java.lang.ref.WeakReference;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
Expand All @@ -12,6 +14,7 @@
import android.os.Message;
import android.text.format.DateUtils;
import android.util.Log;
import android.widget.TextView;

public class TimerService extends Service {
private static final String TAG = "TimerService";
Expand All @@ -21,6 +24,7 @@ public class TimerService extends Service {
private Notification mNotification = null;
private long mStart = 0;
private long mTime = 0;
private TimeHandler mHandler;

public class LocalBinder extends Binder {
TimerService getService() {
Expand All @@ -29,22 +33,33 @@ TimerService getService() {
}
private final IBinder mBinder = new LocalBinder();

private Handler mHandler = new Handler() {
private static class TimeHandler extends Handler {
WeakReference<TimerService> mServiceRef;

public TimeHandler(TimerService service) {
mServiceRef = new WeakReference<TimerService>(service);
}

@Override
public void handleMessage(Message msg) {
long current = System.currentTimeMillis();
mTime += current - mStart;
mStart = current;

updateTime(mTime);

mHandler.sendEmptyMessageDelayed(0, 250);
};
};
TimerService service = mServiceRef.get();
if (service != null) {
long current = System.currentTimeMillis();
service.mTime += current - service.mStart;
service.mStart = current;

service.updateTime(service.mTime);

sendEmptyMessageDelayed(0, 250);
}
}
}

@Override
public void onCreate() {
Log.i(TAG, "onCreate");
mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
mHandler = new TimeHandler(this);
}

@Override
Expand Down
@@ -1,10 +1,13 @@
package com.example;

import android.annotation.TargetApi;
import android.app.Application;
import android.os.Build;
import android.os.StrictMode;

public class TimeTrackerApplication extends Application {

@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@Override
public void onCreate() {
super.onCreate();
Expand Down
36 changes: 25 additions & 11 deletions Chapter4/TimeTracker/src/com/example/TimerService.java
@@ -1,5 +1,7 @@
package com.example;

import java.lang.ref.WeakReference;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
Expand All @@ -21,30 +23,42 @@ public class TimerService extends Service {
private Notification mNotification = null;
private long mStart = 0;
private long mTime = 0;

private TimeHandler mHandler;

public class LocalBinder extends Binder {
TimerService getService() {
return TimerService.this;
}
}
private final IBinder mBinder = new LocalBinder();

private Handler mHandler = new Handler() {
private static class TimeHandler extends Handler {
WeakReference<TimerService> mServiceRef;

public TimeHandler(TimerService service) {
mServiceRef = new WeakReference<TimerService>(service);
}

@Override
public void handleMessage(Message msg) {
long current = System.currentTimeMillis();
mTime += current - mStart;
mStart = current;

updateTime(mTime);

mHandler.sendEmptyMessageDelayed(0, 250);
};
};
TimerService service = mServiceRef.get();
if (service != null) {
long current = System.currentTimeMillis();
service.mTime += current - service.mStart;
service.mStart = current;

service.updateTime(service.mTime);

sendEmptyMessageDelayed(0, 250);
}
}
}

@Override
public void onCreate() {
Log.i(TAG, "onCreate");
mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
mHandler = new TimeHandler(this);
}

@Override
Expand Down
36 changes: 25 additions & 11 deletions Chapter5/TimeTracker/src/com/example/TimerService.java
@@ -1,5 +1,7 @@
package com.example;

import java.lang.ref.WeakReference;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
Expand All @@ -21,30 +23,42 @@ public class TimerService extends Service {
private Notification mNotification = null;
private long mStart = 0;
private long mTime = 0;

private TimeHandler mHandler;

public class LocalBinder extends Binder {
TimerService getService() {
return TimerService.this;
}
}
private final IBinder mBinder = new LocalBinder();

private Handler mHandler = new Handler() {
private static class TimeHandler extends Handler {
WeakReference<TimerService> mServiceRef;

public TimeHandler(TimerService service) {
mServiceRef = new WeakReference<TimerService>(service);
}

@Override
public void handleMessage(Message msg) {
long current = System.currentTimeMillis();
mTime += current - mStart;
mStart = current;

updateTime(mTime);

mHandler.sendEmptyMessageDelayed(0, 250);
};
};
TimerService service = mServiceRef.get();
if (service != null) {
long current = System.currentTimeMillis();
service.mTime += current - service.mStart;
service.mStart = current;

service.updateTime(service.mTime);

sendEmptyMessageDelayed(0, 250);
}
}
}

@Override
public void onCreate() {
Log.i(TAG, "onCreate");
mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
mHandler = new TimeHandler(this);
}

@Override
Expand Down
36 changes: 25 additions & 11 deletions Chapter6/TimeTracker/src/com/example/TimerService.java
@@ -1,5 +1,7 @@
package com.example;

import java.lang.ref.WeakReference;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
Expand Down Expand Up @@ -27,30 +29,42 @@ public class TimerService extends Service {
private long mStart = 0;
private long mTime = 0;
private long mTaskId = -1;

private TimeHandler mHandler;

public class LocalBinder extends Binder {
TimerService getService() {
return TimerService.this;
}
}
private final IBinder mBinder = new LocalBinder();

private Handler mHandler = new Handler() {
private static class TimeHandler extends Handler {
WeakReference<TimerService> mServiceRef;

public TimeHandler(TimerService service) {
mServiceRef = new WeakReference<TimerService>(service);
}

@Override
public void handleMessage(Message msg) {
long current = System.currentTimeMillis();
mTime += current - mStart;
mStart = current;

updateTime(mTime);

mHandler.sendEmptyMessageDelayed(0, 250);
};
};
TimerService service = mServiceRef.get();
if (service != null) {
long current = System.currentTimeMillis();
service.mTime += current - service.mStart;
service.mStart = current;

service.updateTime(service.mTime);

sendEmptyMessageDelayed(0, 250);
}
}
}

@Override
public void onCreate() {
Log.i(TAG, "onCreate");
mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
mHandler = new TimeHandler(this);
}

@Override
Expand Down

0 comments on commit eaa604d

Please sign in to comment.