CS 696 Mobile Phone Application Development
               Fall Semester, 2009
                 Doc 10 Threads
           ...
References




The Busy Coder's Guide to Android Development, V2.1, Mark L. Murphy




                                   ...
Code Quality




     3
Formating & Names

public void cal(){
    //messageText01.setText(messageText.getText());
    Double billAmount = null;
  ...
Names




messageText = (EditText) findViewById(R.id.edit);
messageText01 = (EditText) findViewById(R.id.EditText01);
mess...
Threads




   6
Activity code runs in UI thread




               7
Do not interact with Views in your threads




                     8
Android Background Tools



Java threads                  Services
Handler
   Messages
   Runnables
AsyncTask




        ...
Handler
                 Attached to thread it is created in

                 Processes
                    Message objec...
Handler Scheduling



post(Runnable)
postAtTime(Runnable, long)
postDelayed(Runnable, long)
sendEmptyMessage(int)
sendMess...
ProgressBar Example

           Just shows a progress bar progressing




                                                ...
ThreadExample
                       public class ThreadExample extends Activity {
                            ProgressBar...
ThreadExample
    public void onStart() {
        super.onStart();
        progressView.setProgress(0);

        Thread ba...
Sending Text Messages to the future

Rather than use a thread use
sendMessageDelayed

Sends data in the message using Bund...
Sending Text The Hard Way
               public class ThreadExample extends Activity {
                    Handler handler...
Progress Dialog

Displays a Progress Dialog
Uses Message what to transmit data




                                 17
ThreadExample

public class ThreadExample extends Activity {
    ProgressDialog waitDialog;
    private static final int W...
ThreadExample
    protected Dialog onCreateDialog(int id) {
          switch (id) {
          case WAIT_DIALOG_KEY: {
    ...
AsyncTask




    20
AsyncTask
                  Replaces threads & Messages
                  Android 1.5

Subclass AsyncTask

onPreExecute()
...
Rules


The AsyncTask sublcass instance must be created on the UI thread

execute(Params...)
   Starts the task
   Must be...
AsyncTask Types
private class SampleTask extends AsyncTask<Params, Progress, Result>



             Params
              ...
How it Works
      private class SampleTask extends AsyncTask<Params, Progress, Result>

             UI Thread           ...
Example



Loops in the background and displays Toast




                                 25
ThreadExample


public class ThreadExample extends Activity {

    private class SampleTask extends AsyncTask<String, Stri...
ThreadExample
         protected void onPreExecute() {
              Toast.makeText(ThreadExample.this, "Start", Toast.LEN...
Just For Fun

Dynamically update
List View




                          28
The Task
                   public class ThreadExample extends ListActivity {
                        private class Sample...
The Activity


    private ArrayAdapter<String> listAdapter;

    public void onCreate(Bundle savedInstanceState) {
      ...
Upcoming SlideShare
Loading in …5
×

CS 696 Mobile Phone Application Development Fall Semester ...

1,521 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,521
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
13
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

CS 696 Mobile Phone Application Development Fall Semester ...

  1. 1. CS 696 Mobile Phone Application Development Fall Semester, 2009 Doc 10 Threads Oct 1, 2009 Copyright ©, 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.
  2. 2. References The Busy Coder's Guide to Android Development, V2.1, Mark L. Murphy 2
  3. 3. Code Quality 3
  4. 4. Formating & Names public void cal(){ //messageText01.setText(messageText.getText()); Double billAmount = null; Double tipPercent = null; Double totalAmount = null; if(messageText.getText().toString().length() < 1) { clr(); } else { 4
  5. 5. Names 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); 5
  6. 6. Threads 6
  7. 7. Activity code runs in UI thread 7
  8. 8. Do not interact with Views in your threads 8
  9. 9. Android Background Tools Java threads Services Handler Messages Runnables AsyncTask 9
  10. 10. Handler Attached to thread it is created in Processes Message objects Runnable objects Main Uses Schedule messages/runnables to be executed as in the future Enqueue an action to be performed on a different thread 10
  11. 11. Handler Scheduling post(Runnable) postAtTime(Runnable, long) postDelayed(Runnable, long) sendEmptyMessage(int) sendMessage(Message) sendMessageAtTime(Message, long) sendMessageDelayed(Message, long) 11
  12. 12. ProgressBar Example Just shows a progress bar progressing 12 Example from The Busy Coder's Guide to Android Development, V2.1, Mark L. Murphy
  13. 13. ThreadExample public 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; } 13 Example from The Busy Coder's Guide to Android Development, V2.1, Mark L. Murphy
  14. 14. ThreadExample 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(); } } 14
  15. 15. Sending Text Messages to the future Rather than use a thread use sendMessageDelayed Sends data in the message using Bundle 15
  16. 16. Sending Text The Hard Way public 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)); } 16 Read the documentation to find the easy way }
  17. 17. Progress Dialog Displays a Progress Dialog Uses Message what to transmit data 17
  18. 18. ThreadExample public 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); } 18
  19. 19. ThreadExample 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); } } 19
  20. 20. AsyncTask 20
  21. 21. AsyncTask Replaces threads & Messages Android 1.5 Subclass AsyncTask onPreExecute() Run in UI thread Done first doInBackground(Params...) Run in seperate thread publishProgress(Progress...) Call in doInBackground() to register progress onProgressUpdate(Progress...) Run in UI thread Called by publisheProgress onPostExecute(Result) Run in UI thread Run after doInBackground ends 21
  22. 22. Rules The AsyncTask sublcass instance must be created on the UI thread execute(Params...) Starts the task Must be invoked on the UI thread Do not call manually onPreExecute(), onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...) The task can be executed only once 22
  23. 23. AsyncTask Types private class SampleTask extends AsyncTask<Params, Progress, Result> Params Type of argument for doInBackground() execute() Progress Type of argument for publishProgress() onProgressUpdate() Result Return type for doInBackground() Type of argument for onPostExecute() 23
  24. 24. How it Works private class SampleTask extends AsyncTask<Params, Progress, Result> UI Thread Background Thread new SampleTask().execute(paramsType); onPreExecute() doInBackground(Params... stuff){ blah publishProgress(progressType); onProgressUpdate(Progress... values) blah return x; } onPostExecute(Result result) 24
  25. 25. Example Loops in the background and displays Toast 25
  26. 26. ThreadExample public 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(); } 26
  27. 27. ThreadExample protected void onPreExecute() { Toast.makeText(ThreadExample.this, "Start", Toast.LENGTH_SHORT) .show(); } protected void onProgressUpdate(String... word) { Toast.makeText(ThreadExample.this, word[0], 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" }; new SampleTask().execute(text); } } 27
  28. 28. Just For Fun Dynamically update List View 28
  29. 29. The Task public class ThreadExample extends ListActivity { private class SampleTask extends AsyncTask<Void, String, Void> { String[] items = { "Gautama Buddha", "Kalki", "Krishna", "Kurma", "Matsya", "Narasimha", "Parashurama", "Rama", "Vamana", "Varaha" }; protected Void doInBackground(Void... notused) { for (String word : items) { publishProgress(word); SystemClock.sleep(2500); } return (null); } protected void onPostExecute(Void unused) { Toast.makeText(ThreadExample.this, "Done", Toast.LENGTH_SHORT) .show(); } protected void onProgressUpdate(String... word) { listAdapter.add(word[0]); } } 29 Based on an example from The Busy Coder's Guide to Android Development, V2.1, Mark L. Murphy
  30. 30. The Activity private ArrayAdapter<String> listAdapter; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); listAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>()); setListAdapter(listAdapter); new SampleTask().execute(); } } 30

×