private Runnable r1 = new Runnable()
{
public void run()
{
// to do list
}
};
斯斯有三種,thread 有兩種,一次性跟常駐性
========================
1. 一次性 thread
Thread t1 = new Thread(r1);
t1.start();
========================
2. 常駐性 thread
private Handler boss;
private HandlerThread worker;
// 把她製造出來,啟動,待命
worker = new HandlerThread(“name”);
worker.start();
// 綁到一個 handler 身上,簡單說,thread 跟 handler 的關係就像是藝人跟經紀人
boss = new Handler(worker.getLooper());
// 務必要確定在 getLooper() 前先讓 thread 跑起來
// 發一個通告 (work, runnable) 給藝人要先透過他的經紀人
boss.post(r1);
// we usually create thread in onCreate() status
// also that we should terminate the thread when app into onDestroy() status
// 我們通常在 app 第一次執行時的 onCreate 狀態就把 thread 找來
// 同理,app 爆炸 (onDestroy) 之前要喊 塊陶阿!!,不對,是要把 thread 結束掉
@Override
protected void onDestroy()
{
super.onDestroy();
// remove the work from thread
if(boss != null)
{
boss.removeCallbacks(r1);
}
// terminate the thread
if (worker != null)
{
worker.quit();
}
}
=========================
透過 handler 指派工作有兩種方法
一個是
mThreadHandler.post(r1);
另外一種是
mThreadHandler.sendemptyMessage(go_away);
// 建立基於 main thread (UI thread) 的 handler
private Handler mUI_handler = new Handler();
// 另外一種形態,在裡面新增一個 method 可用來處理訊息
private Handler mUI_handler = new Handler()
{
@Override
public void handleMessage(message msg)
{
switch(msg.what)
{
case go_away:
// do something
break;
}
}
};
其中 case 內容如果要直接用變數名稱那當然要事先宣告
private static final int go_away = 3345678;
如果需要夾帶參數就要用 obtainMessage
mUI_handler.obtainMessage(go_away, arg1, arg2).sendToTarget();
anyway…玩法很多
話說 ICS 後很多事情都變很嚴格
這大概算是必要之惡