Professional Documents
Culture Documents
Concurrency and Synchronization Parts6 and 7 PDF
Concurrency and Synchronization Parts6 and 7 PDF
Synchronization: Part 6
Douglas C. Schmidt
d.schmidt@vanderbilt.edu
www.dre.vanderbilt.edu/~schmidt
mechanisms
Handler
Message
Message Runnable
Looper
Message Handler
Message
Background
Message Thread B
Message
Message
Async
UI Thread Task
(main thread)
2
Android Concurrency & Synchronization D. C. Schmidt
See developer.android.com/training/articles/perf-anr.html
3 for more on ANRs
Android Concurrency & Synchronization D. C. Schmidt
android-developers.blogspot.com/2009/05/painless-threading.html
4 has more
Android Concurrency & Synchronization D. C. Schmidt
Looper
Message
Message
Message
Message
Message
UI Thread
(main thread)
See developer.android.com/training/multiple-threads/communicate-ui.html
5
Android Concurrency & Synchronization D. C. Schmidt
Looper
• Handlers, Messages, & Message Handler
Runnables
Message
• Allows an app to spawn threads Background
Thread B
that perform background Message
UI Thread
(main thread)
www.vogella.com/articles/AndroidBackgroundProcessing/article.html
6 has more
Android Concurrency & Synchronization D. C. Schmidt
Looper
• Handlers, Messages, & Message Handler
Runnables
Message
• AsyncTask Background
Message Thread B
• Allow an app to run background
operations & publish results Message
on the UI thread without Message
manipulating threads or Async
handlers UI Thread
(main thread)
Task
www.vogella.com/articles/AndroidBackgroundProcessing/article.html
7 has more
Android Concurrency & Synchronization D. C. Schmidt
Message
Looper
Message
Message
Message
The UI Thread has a
Looper, but Loopers Message
can also be used in Message
non-UI threads
Thread
8
developer.android.com/reference/android/os/Looper.html has more info
Android Concurrency & Synchronization D. C. Schmidt
msg.target.
dispatchMessage(msg);
...
}
...
9
Android Concurrency & Synchronization D. C. Schmidt
10
Android Concurrency & Synchronization D. C. Schmidt
msg.target.
dispatchMessage(msg);
...
}
Note inversion of control ...
11
Android Concurrency & Synchronization D. C. Schmidt
...
frameworks/base/core/java/android/os/Looper.java
12 has the source code
Android Concurrency & Synchronization D. C. Schmidt
developer.android.com/reference/java/lang/Thread.html
13 has more info
Android Concurrency & Synchronization D. C. Schmidt
Looper.loop();
}
developer.android.com/reference/android/os/Looper.html
14 has more info
Android Concurrency & Synchronization D. C. Schmidt
developer.android.com/reference/android/os/Looper.html
15 has more info
Android Concurrency & Synchronization D. C. Schmidt
developer.android.com/reference/android/os/Looper.html
16 has more info
Android Concurrency & Synchronization D. C. Schmidt
17
Android Concurrency & Synchronization D. C. Schmidt
18
developer.android.com/reference/android/os/HandlerThread.html has more info
Android Concurrency & Synchronization D. C. Schmidt
19
frameworks/base/core/java/android/os/HandlerThread.java has the source code
Android Concurrency & Synchronization D. C. Schmidt
Looper
Message Handler
Message
Thread1
20
Android Concurrency & Synchronization D. C. Schmidt
Looper
• Other Threads can communicate
by exchanging Messages & Message Handler
Runnables via a Thread’s Message
Handler(s)
Message Thread3
Message
Message
Thread1
developer.android.com/reference/android/os/Handler.html
21 has more info
Android Concurrency & Synchronization D. C. Schmidt
22
Android Concurrency & Synchronization D. C. Schmidt
23
Android Concurrency & Synchronization D. C. Schmidt
24
Android Concurrency & Synchronization D. C. Schmidt
Thread1 Thread3
25
Android Concurrency & Synchronization D. C. Schmidt
Thread1 Thread3
frameworks/base/core/java/android/os/Handler.java
26 has source code
Android Concurrency & Synchronization D. C. Schmidt
developer.android.com/reference/android/os/Handler.html
27 has more info
Android Concurrency & Synchronization D. C. Schmidt
developer.android.com/reference/android/os/Handler.html
28 has more info
Android Concurrency & Synchronization D. C. Schmidt
Summary
• Android apps have a UI Thread Message
Queue
• The UI Thread is a Looper
Message
Looper
Message
Message
Message
Message
Message
UI Thread
(main thread)
29
Android Concurrency & Synchronization D. C. Schmidt
Summary
• Android apps have a UI Thread Message
Queue
• App components in the same
process use the same UI Thread
• User interaction, system
callbacks, & lifecycle methods
are handled in the UI Thread Message
Looper
Message
Message
Message
Message
Message
UI Thread
(main thread)
30
Android Concurrency & Synchronization D. C. Schmidt
Summary
• Android apps have a UI Thread Message
Queue
• App components in the same
process use the same UI Thread
• Don’t access widgets in the UI
toolkit from non-UI Thread or
block the UI Thread Message
Looper
• Long-running operations should
execute in background Thread(s) Message
Message
Message
Message
Message
UI Thread
(main thread)
31
Android Concurrency & Synchronization D. C. Schmidt
Summary
• Android apps have a UI Thread Message
Queue
Background
Thread A
• App components in the same
process use the same UI Thread Handler
• Don’t access widgets in the UI
toolkit from non-UI Thread or Message
Looper
• UI & background threads will
need to communicate via Message Handler
UI Thread
(main thread)
32
Android Concurrency & Synchronization D. C. Schmidt
Summary
• Android apps have a UI Thread Message
Queue
Background
Thread A
• App components in the same
process use the same UI Thread Handler
• Don’t access widgets in the UI
toolkit from non-UI Thread or Message
Looper
• UI & background threads will
need to communicate via Message Handler
33
Android Concurrency &
Synchronization: Part 7
Douglas C. Schmidt
d.schmidt@vanderbilt.edu
www.dre.vanderbilt.edu/~schmidt
Looper
Message Handler
Message
Background
Message Thread B
Message
Message
Async
UI Thread Task
(main thread)
35
Android Concurrency & Synchronization D. C. Schmidt
Runnable
Handler
1. Handler.post
(new Runnable(){
public void run()
{ /* … */ }});)
Background
Thread
UI Thread
(main thread)
36
Android Concurrency & Synchronization D. C. Schmidt
Handler
1. Handler.post
(new Runnable(){
public void run()
{ /* … */ }});)
Background
3. run()
Thread
2. handleMessage()
UI Thread
(main thread)
37
Android Concurrency & Synchronization D. C. Schmidt
41
developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable)
Android Concurrency & Synchronization D. C. Schmidt
Handler
Message
UI Thread
(main thread)
42
developer.android.com/reference/android/os/Handler.html#handleMessage(android.os.Message)
Android Concurrency & Synchronization D. C. Schmidt
• Message.obtain() Message
• etc.
Message parameters include
• int arg1, arg2
• int what
• Object obj
• Bundle data
UI Thread
(main thread)
43
developer.android.com/reference/android/os/Handler.html#obtainMessage(int, int)
Android Concurrency & Synchronization D. C. Schmidt
UI Thread
(main thread)
44
Android Concurrency & Synchronization D. C. Schmidt
46
Android Concurrency & Synchronization D. C. Schmidt
47
Android Concurrency & Synchronization D. C. Schmidt
Async
Task
UI Thread
(main thread)
developer.android.com/reference/android/os/AsyncTask.html
48 has AsyncTask info
Android Concurrency & Synchronization D. C. Schmidt
Async
Task
UI Thread
(main thread)
frameworks/base/core/java/android/os/AsyncTask.java
49 has the source code
Android Concurrency & Synchronization D. C. Schmidt
Async
Task
UI Thread
(main thread)
frameworks/base/core/java/android/os/AsyncTask.java
50 has the source code
Android Concurrency & Synchronization D. C. Schmidt
52
Android Concurrency & Synchronization D. C. Schmidt
53
Android Concurrency & Synchronization D. C. Schmidt
54
Android Concurrency & Synchronization D. C. Schmidt
Summary
• Posting Runnables is simple, but not Message
Queue
particularly flexible
Message Runnable
Looper
Message Handler
Message
Background
Message Thread B
Message
Message
UI Thread
(main thread)
55
Android Concurrency & Synchronization D. C. Schmidt
Summary
• Posting Runnables is simple, but not Message
Queue
Background
particularly flexible Thread A
Message Runnable
Looper
Message Handler
Message
Background
Message Thread B
Message
Message
UI Thread
(main thread)
56
Android Concurrency & Synchronization D. C. Schmidt
Summary
• Posting Runnables is simple, but not Message
Queue
Background
particularly flexible Thread A
Looper
for more thread synchronization Message Handler
& schedulting Message
Background
Message Thread B
Message
Message
UI Thread
(main thread)
57