DOC PREVIEW
SDSU CS 696 - Threads

This preview shows page 1-2-14-15-29-30 out of 30 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 30 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 30 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 30 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 30 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 30 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 30 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 30 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

CS 696 Mobile Phone Application DevelopmentFall Semester, 2009Doc 10 ThreadsOct 1, 2009Copyright ©, All rights reserved. 2009 SDSU & Roger Whitney, 5500 Campanile Drive, San Diego, CA 92182-7700 USA. OpenContent (http://www.opencontent.org/opl.shtml) license defines the copyright on this document.References2The Busy Coder's Guide to Android Development, V2.1, Mark L. Murphy3Code QualityFormating & Names4 public void cal(){ //messageText01.setText(messageText.getText()); Double billAmount = null; Double tipPercent = null; Double totalAmount = null; if(messageText.getText().toString().length() < 1) { clr(); } else {Names5 messageText = (EditText) findViewById(R.id.edit); messageText01 = (EditText) findViewById(R.id.EditText01); messageText02 = (EditText) findViewById(R.id.EditText02); cal = (Button) findViewById(R.id.Cal); clr = (Button) findViewById(R.id.Clear);6Threads7Activity code runs in UI thread8Do not interact with Views in your threads9Android Background ToolsJava threadsHandlerMessagesRunnablesAsyncTaskServicesHandler10Attached to thread it is created inProcesses Message objectsRunnable objectsMain UsesSchedule messages/runnables to be executed as in the futureEnqueue an action to be performed on a different threadHandler Scheduling11post(Runnable)postAtTime(Runnable, long)postDelayed(Runnable, long)sendEmptyMessage(int)sendMessage(Message)sendMessageAtTime(Message, long)sendMessageDelayed(Message, long)ProgressBar Example12Just shows a progress bar progressingExample from The Busy Coder's Guide to Android Development, V2.1, Mark L. MurphyThreadExample13public class ThreadExample extends Activity { ProgressBar progressView; boolean isRunning = false; Handler handler = new Handler() { public void handleMessage(Message empty) { progressView.incrementProgressBy(5); } }; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); progressView = (ProgressBar) findViewById(R.id.progress); } public void onStop() { super.onStop(); isRunning = false; }Example from The Busy Coder's Guide to Android Development, V2.1, Mark L. MurphyThreadExample14 public void onStart() { super.onStart(); progressView.setProgress(0); Thread background = new Thread(new Runnable() { public void run() { try { for (int i = 0; i < 20 && isRunning; i++) { Thread.sleep(1000); handler.sendMessage(handler.obtainMessage()); } } catch (Throwable t) {// just end } } }); isRunning = true; background.start(); }}Sending Text Messages to the future15Rather than use a thread usesendMessageDelayedSends data in the message using BundleSending Text The Hard Way16public class ThreadExample extends Activity { Handler handler = new Handler() { public void handleMessage(Message word) { String text = word.getData().getString("key"); Toast.makeText(ThreadExample.this, text, Toast.LENGTH_SHORT).show(); } }; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void onStart() { super.onStart(); String[] text = { "Bat", "cat", "dat", "fat", "hat", "mat" }; for (int i = 0; i < text.length; i++) { Bundle data = new Bundle(); data.putString("key", text[i]); Message word = new Message(); word.setData(data); handler.sendMessageDelayed(word, 1000 * (i + 1)); } }}Read the documentation to find the easy wayProgress Dialog17Displays a Progress DialogUses Message what to transmit dataThreadExample18public class ThreadExample extends Activity { ProgressDialog waitDialog; private static final int WAIT_DIALOG_KEY = 0; Handler handler = new Handler() { public void handleMessage(Message command) { if (command.what == 0) showDialog(WAIT_DIALOG_KEY); else waitDialog.dismiss(); } }; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }ThreadExample19 protected Dialog onCreateDialog(int id) { switch (id) { case WAIT_DIALOG_KEY: { waitDialog = new ProgressDialog(this); waitDialog.setMessage("Please wait while loading..."); waitDialog.setIndeterminate(true); waitDialog.setCancelable(true); return waitDialog; } } return null; } public void onStart() { super.onStart(); Message on = new Message(); on.what = 0; handler.sendMessageDelayed(on, 1000); Message off = new Message(); off.what = 1; handler.sendMessageDelayed(off, 8000); }}20AsyncTaskAsyncTask21Replaces threads & MessagesAndroid 1.5Subclass AsyncTaskonPreExecute()Run in UI threadDone firstdoInBackground(Params...)Run in seperate threadpublishProgress(Progress...)Call in doInBackground() to register progressonProgressUpdate(Progress...)Run in UI threadCalled by publisheProgressonPostExecute(Result)Run in UI threadRun after doInBackground endsRules22The AsyncTask sublcass instance must be created on the UI threadexecute(Params...) Starts the taskMust be invoked on the UI threadDo not call manuallyonPreExecute(), onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...)The task can be executed only onceAsyncTask Types23private class SampleTask extends AsyncTask<Params, Progress, Result>ParamsType of argument for doInBackground()execute()ProgressType of argument for publishProgress()onProgressUpdate()ResultReturn type for doInBackground()Type of argument for onPostExecute()How it Works24UI Thread Background Threadprivate class SampleTask extends AsyncTask<Params, Progress, Result>new SampleTask().execute(paramsType);onPreExecute()doInBackground(Params... stuff){blahpublishProgress(progressType);blahreturn x;}onProgressUpdate(Progress... values)onPostExecute(Result result)Example25Loops in the background and displays ToastThreadExample26public class ThreadExample extends Activity { private class SampleTask extends AsyncTask<String, String, Void> { protected Void doInBackground(String... words) { for (String word : words) { publishProgress(word); SystemClock.sleep(1000); } return (null); } protected void onPostExecute(Void unused) { Toast.makeText(ThreadExample.this, "Done", Toast.LENGTH_SHORT) .show(); }ThreadExample27 protected void onPreExecute() { Toast.makeText(ThreadExample.this, "Start",


View Full Document

SDSU CS 696 - Threads

Download Threads
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Threads and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Threads 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?