JFlubber! A Google Android Podcast Helper App
Straight from the Android Developers Blog, we bring you an article by Dick Wall [Google Developer Programs] on his mission to port an existing Java app over to the Android platform. He discusses a important point about reconsidering the choices that were made when the app was originally developed as a desktop application. In particular, he realizes the need to refactor his use of the java.util.Timer class since it isn't very efficient in a mobile environment with limited resources.
The original application is a Java Swing and SE application. It is like a stopwatch with a lap timer that we use when recording podcasts; when you start the recording, you start the stopwatch. Then for every mistake that someone makes, you hit the flub button. At the end you can save out the bookmarked mistakes which can be loaded into the wonderful Audacity audio editor as a labels track. You can then see where all of the mistakes are in the recording and edit them out.
In the original version, the timer code looked like this:
class UpdateTimeTask extends TimerTask { public void run() { long millis = System.currentTimeMillis() - startTime; int seconds = (int) (millis / 1000); int minutes = seconds / 60; seconds = seconds % 60; timeLabel.setText(String.format("%d:%02d", minutes, seconds)); } }And in the event listener to start this update, the following Timer() instance is used:
if(startTime == 0L) { startTime = evt.getWhen(); timer = new Timer(); timer.schedule(new UpdateTimeTask(), 100, 200); }Fortunately, the role of Timer can be replaced by the android.os.Handler class, with a few tweaks. To set it up from an event listener:
private Handler mHandler = new Handler(); ... OnClickListener mStartListener = new OnClickListener() { public void onClick(View v) { if (mStartTime == 0L) { mStartTime = System.currentTimeMillis(); mHandler.removeCallbacks(mUpdateTimeTask); mHandler.postDelayed(mUpdateTimeTask, 100); } } };private Runnable mUpdateTimeTask = new Runnable() { public void run() { final long start = mStartTime; long millis = SystemClock.uptimeMillis() - start; int seconds = (int) (millis / 1000); int minutes = seconds / 60; seconds = seconds % 60; if (seconds < 10) { mTimeLabel.setText("" + minutes + ":0" + seconds); } else { mTimeLabel.setText("" + minutes + ":" + seconds); } mHandler.postAtTime(this, start + (((minutes * 60) + seconds + 1) * 1000)); } };
For the full post, and more code, check out this article at the Android's Developer Blog and for more tips and an opportunity to ask questions, check out the Android Developers Group


Delicious
Digg
StumbleUpon
Propeller
Reddit
Magnoliacom
Newsvine
Furl
Facebook
Google
Yahoo
Technorati
Icerocket
[...] Straight from the Android Developers Blog, we bring you an article by Dick Wall [Google Developer Programs]…Find out more about this great item here [...]
[...] Read the rest of this great post here [...]
Post new comment