+ tv = (TextView)findViewById(R.id.tv);
+ Log.v("WhereAmI", "created UI, about to start update task");
+ mHandler.postDelayed(updateClock, 2000);
+ Log.v("WhereAmI", "created UI, update task created");
+ }
+
+ private Handler mHandler = new Handler();
+
+ private Runnable updateClock = new Runnable () {
+ public void run() {
+ long millis = System.currentTimeMillis();
+ Log.v("updateClock", "executing");
+ // new TimedUpdateTask().execute(5); // for delayed execution
+ tv.setText(Long.toString(millis));
+ mHandler.postDelayed(this, 2000);
+ }
+ };
+
+ private class TimedUpdateTask extends AsyncTask<Integer, Void, String> {
+ @Override
+ protected String doInBackground(Integer... howlong) {
+ Log.v("TimedUpdateTask", "starting");
+ try {
+ Thread.sleep(1000 * howlong[0]);
+ } catch (InterruptedException e) {
+ Log.e("TimedUpdateTask", "sleep interrupted");
+ }
+ Log.v("TimedUpdateTask", "about to return");
+ return (Integer.toString(howlong[0]) + " seconds passed");
+ }
+
+ @Override
+ protected void onPostExecute(String str) {
+ Log.v("TimedUpdateTask", "callback executing");
+ tv.setText(str);
+ }