爲什麼一個後臺線程產卵自己的處理程序&尺蠖只是修改。我知道UI的組件,簡單來說:後臺線程爲什麼會催生自己的處理程序和活套
尺蠖:循環和執行在消息隊列任務
處理程序:發佈任務隊列
看看這個片段,我從文章了在互聯網上
public class MyActivityV2 extends Activity {
private Handler mUiHandler = new Handler();
private MyWorkerThread mWorkerThread;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWorkerThread = new MyWorkerThread("myWorkerThread");
Runnable task = new Runnable() {
@Override
public void run() {
for (int i = 0; i < 4; i++) {
try {
TimeUnit.SECONDS.sleep(2);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (i == 2) {
mUiHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(MyActivityV2.this,
"I am at the middle of background task",
Toast.LENGTH_LONG)
.show();
}
});
}
}
mUiHandler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(MyActivityV2.this,
"Background task is completed",
Toast.LENGTH_LONG)
.show();
}
});
}
};
// MyWorkerThread == HandlerThread
mWorkerThread.start();
mWorkerThread.prepareHandler();
// 2 starting of thread
mWorkerThread.postTask(task);
mWorkerThread.postTask(task);
}
@Override
protected void onDestroy() {
mWorkerThread.quit();
super.onDestroy();
}
}
//MyWorkerThread.java
class MyWorkerThread extends HandlerThread {
private Handler mWorkerHandler;
public MyWorkerThread(String name) {
super(name);
}
public void postTask(Runnable task){
mWorkerHandler.post(task);
}
public void prepareHandler(){
mWorkerHandler = new Handler(getLooper());
}
}
這是要麼我完全誤解代碼或缺乏Android的線程基礎。所以我很抱歉。
後臺線程基本上重複自己(兩次)。主要思想是通過後臺線程操縱UI組件。
看一看這樣的:
mWorkerHandler
爲什麼會在後臺線程創建自己的處理程序,如果它的操作界面的成分的問題,爲什麼不只是拿UI線程處理的參考,通過處理程序發佈runnable。
和
mWorkerHandler = new Handler(getLooper());
其創建其自己的彎針(後臺線程的尺蠖),這表明在後臺線程創建其自己的消息隊列。它不應該只是玩弄主線程的消息隊列而不是後臺線程。
在此先感謝。
你究竟想要達到什麼目的? – pskink
我的意思是,爲什麼代碼沒有引用UI線程的處理程序,因此,爲什麼後臺線程會創建自己的循環來修改UI線程的消息隊列呢? –
好的,你想從非UI線程更新UI或者什麼? – pskink