package com.pinecone.technology.mcommerce.learning.android.chapter06.handler; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.widget.TextView; import com.pinecone.technology.mcommerce.learning.android.chapter06.R; public class TestHandlersDriverActivity extends Activity { public static final String tag = "TestHandlersDriverActivity"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.c06_handler_test02); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); // from activity inflater.inflate(R.menu.c06_menu_handler, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { appendMenuItemText(item); if (item.getItemId() == R.id.menu_clear) { this.emptyText(); return true; } if (item.getItemId() == R.id.menu_test_thread) { this.testThread(); return true; } if (item.getItemId() == R.id.menu_test_defered_handler) { this.testDeferedHandler(); return true; } return true; } private TextView getTextView() { return (TextView) this.findViewById(R.id.text1); } public void appendText(String abc) { TextView tv = getTextView(); tv.setText(tv.getText() + "\n" + abc); } private void appendMenuItemText(MenuItem menuItem) { String title = menuItem.getTitle().toString(); TextView tv = getTextView(); tv.setText(tv.getText() + "\n" + title); } private void emptyText() { TextView tv = getTextView(); tv.setText(""); } private DeferWorkHandler th = null; private void testDeferedHandler() { if (th == null) { th = new DeferWorkHandler(this); this.appendText("Creating a new handler"); } this.appendText("Starting to do deferred work by sending messages"); th.doDeferredWork(); } Handler statusBackHandler = null; Thread workerThread = null; private void testThread() { if (statusBackHandler == null) { statusBackHandler = new ReportStatusHandler(this); workerThread = new Thread(new WorkerThreadRunnable( statusBackHandler)); workerThread.start(); return; } if (workerThread.getState() != Thread.State.TERMINATED) { Log.d(tag, "thread is new or alive, but not terminated"); } else { Log.d(tag, "thread is likely dead. starting now"); // you have to create a new thread. // no way to resurrect a dead thread. workerThread = new Thread(new WorkerThreadRunnable( statusBackHandler)); workerThread.start(); } } }