Slide 1

Slide 1 text

)BOEMFSẸ5ISFBE᧣໹๹ Johnny Sung 2013/08/22 ၞ᭸ḝ緒 1 Thursday, August 22, 13

Slide 2

Slide 2 text

໹ᜐᚕ • I'm an Android developer. Also learning iOS development. • Information Management in Shih Hsin University • 相關作品: • Good! 愛點兒 • 世新廣播電台 • 主要語⾔言: • Obj-C / Java / C# / PHP 2 Thursday, August 22, 13

Slide 3

Slide 3 text

(PPEᛔᨬᚑ 3 Thursday, August 22, 13

Slide 4

Slide 4 text

ᕴ᙮༃ᴶᨘᴈ 4 Thursday, August 22, 13

Slide 5

Slide 5 text

5 Thursday, August 22, 13

Slide 6

Slide 6 text

6 Thursday, August 22, 13

Slide 7

Slide 7 text

ዧ᩼ 7 Thursday, August 22, 13

Slide 8

Slide 8 text

8 Thursday, August 22, 13

Slide 9

Slide 9 text

9 "/3"DUJWJUZ/PU3FTQPOEJOH http://developer.android.com/training/articles/perf-anr.html Thursday, August 22, 13

Slide 10

Slide 10 text

.VMUJ5ISFBEJOHၞ᭸ḝ緒 ↟3VOOBCMF ↟5ISFBE ↟)BOEMFS ↟.FTTBHF 10 Thursday, August 22, 13

Slide 11

Slide 11 text

11 Thursday, August 22, 13

Slide 12

Slide 12 text

3VOOBCMF 12 Thursday, August 22, 13

Slide 13

Slide 13 text

13 Thursday, August 22, 13

Slide 14

Slide 14 text

class GetWebPicture implements Runnable { @Override public void run() { // ........ } } 14 Thursday, August 22, 13

Slide 15

Slide 15 text

5ISFBE 顧名思義,它就叫執⾏行緒 15 Thursday, August 22, 13

Slide 16

Slide 16 text

16 Thursday, August 22, 13

Slide 17

Slide 17 text

5ISFBEᠹᢶᐠᤍ᪽ ↟ၣᮈṞ5ISFBE +BWBᡰᢶ᧣ ↟ᓝ᫳Ṟ)BOEMFS5ISFBE "OESPJEᴰᢶ᧣ 常駐型 HandlerThread留到後⾯面再說 17 Thursday, August 22, 13

Slide 18

Slide 18 text

18 new Thread(new Runnable() { @Override public void run() { // ...... } }).start(); Thursday, August 22, 13

Slide 19

Slide 19 text

new Thread() { @Override public void run() { // .... } }.start(); 19 Thursday, August 22, 13

Slide 20

Slide 20 text

Main Thread(UI Thread) 20 Thursday, August 22, 13

Slide 21

Slide 21 text

Main Thread(UI Thread) 20 Thursday, August 22, 13

Slide 22

Slide 22 text

new Thread() { @Override public void run() { // .... } }.start(); Thread1 Main Thread(UI Thread) 20 Thursday, August 22, 13

Slide 23

Slide 23 text

new Thread() { @Override public void run() { // .... } }.start(); Thread1 Main Thread(UI Thread) 20 Thursday, August 22, 13

Slide 24

Slide 24 text

new Thread() { @Override public void run() { // .... } }.start(); Thread1 Main Thread(UI Thread) runOnUiThread(new Runnable() { public void run() { // ...... } }); 20 Thursday, August 22, 13

Slide 25

Slide 25 text

new Thread() { @Override public void run() { // .... } }.start(); Thread1 Main Thread(UI Thread) runOnUiThread(new Runnable() { public void run() { // ...... } }); 20 Thursday, August 22, 13

Slide 26

Slide 26 text

)BOEMFS5ISFBE 是⼀一種常駐型的Thread 21 Thursday, August 22, 13

Slide 27

Slide 27 text

mThread = new HandlerThread("name"); mThread.start(); mThreadHandler = new Handler(mThread.getLooper()) { public void handleMessage(android.os.Message msg) { switch (msg.what) { case START_SERVER: // ..... break; case STOP_SERVER: // ..... break; default: break; } } }; 在onCreate()之中 22 Thursday, August 22, 13

Slide 28

Slide 28 text

在onDestroy()之中 if (mThread != null) mThread.quit(); 寫在Service裡⾯面不錯⽤用 23 Thursday, August 22, 13

Slide 29

Slide 29 text

Main Thread(UI Thread) onCreate() onResume() onPause() onDestroy() 24 Thursday, August 22, 13

Slide 30

Slide 30 text

HandlerThread1 Main Thread(UI Thread) onCreate() onResume() onPause() onDestroy() mThread = new HandlerThread("name"); mThread.start(); 24 Thursday, August 22, 13

Slide 31

Slide 31 text

HandlerThread1 Main Thread(UI Thread) onCreate() onResume() onPause() onDestroy() mThread = new HandlerThread("name"); mThread.start(); if (mThread != null) mThread.quit(); 24 Thursday, August 22, 13

Slide 32

Slide 32 text

HandlerThread1 Main Thread(UI Thread) onCreate() onResume() onPause() onDestroy() mThread = new HandlerThread("name"); mThread.start(); if (mThread != null) mThread.quit(); (Idle) (Running) (Running) (Idle) (Idle) 24 Thursday, August 22, 13

Slide 33

Slide 33 text

)BOEMFS 25 Thursday, August 22, 13

Slide 34

Slide 34 text

26 Thursday, August 22, 13

Slide 35

Slide 35 text

Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch (msg.what) { case 0: // ....... break; case 1: // ....... break; case 2: // ....... break; default: break; } } }; 27 Thursday, August 22, 13

Slide 36

Slide 36 text

.FTTBHF 28 Thursday, August 22, 13

Slide 37

Slide 37 text

.FTTBHFᲘᙈ᠓᤼ᜡᤎᵵᬞ 29 Thursday, August 22, 13

Slide 38

Slide 38 text

ᠭ᤼෪值 ᤼༾ề ႚᶡ᤼ᴣᑺᨼ 3VOOBCMF 30 Thursday, August 22, 13

Slide 39

Slide 39 text

31 Thursday, August 22, 13

Slide 40

Slide 40 text

obtainMessage(int what); obtainMessage(int what, int arg1, int arg2); obtainMessage(int what, int arg1, int arg2, Object obj); obtainMessage(int what, Object obj); ፇᙺᙛ 記得加上.sendToTarget()才會發送 sendEmptyMessage(int what) 32 Thursday, August 22, 13

Slide 41

Slide 41 text

http://developer.android.com/reference/android/os/Handler.html ࿠᳔ᓝᠭ᧣.FUIPE 33 Thursday, August 22, 13

Slide 42

Slide 42 text

ᚕᬟᓡᒊ෪ᖀჱᔕ .FTTBHF)BOEMFSፖᙚ႞ᚕᅄᕔᴉᏝᦅᇇ 34 Thursday, August 22, 13

Slide 43

Slide 43 text

ᢶኼᢶ๞᳓᧣ፖ᎚Ħ 35 Thursday, August 22, 13

Slide 44

Slide 44 text

ᢶ 36 Thursday, August 22, 13

Slide 45

Slide 45 text

SVO0O6J5ISFBE 37 Thursday, August 22, 13

Slide 46

Slide 46 text

runOnUiThread(new Runnable() { public void run() { // ...... } }); 38 Thursday, August 22, 13

Slide 47

Slide 47 text

ᜊᚕዤජ᤼᷀ᡰᘿሳ 39 Thursday, August 22, 13

Slide 48

Slide 48 text

https://github.com/android/platform_frameworks_base/blob/master/core/java/android/app/Activity.java // Reference from Activity.java /** * Runs the specified action on the UI thread. If the current thread is the * UI thread, then the action is executed immediately. If the current thread * is not the UI thread, the action is posted to the event queue of the UI * thread. * * @param action * the action to run on the UI thread */ public final void runOnUiThread(Runnable action) { if (Thread.currentThread() != mUiThread) { mHandler.post(action); } else { action.run(); } } 40 Thursday, August 22, 13

Slide 49

Slide 49 text

41 Thursday, August 22, 13

Slide 50

Slide 50 text

2" 42 Thursday, August 22, 13

Slide 51

Slide 51 text

Follow me on Blog 43 Thursday, August 22, 13

Slide 52

Slide 52 text

Follow me on Facebook 44 Thursday, August 22, 13