我正在實現我自己的SurfaceView,其中包含一個Thread對象,其目的是將各種圖形對象繪製到Canvas。在我的SurfaceView的構造函數中,我設置了要繪製的對象,並且Thread對象(當前)僅根據需要將它們放置到Canvas。HandlerThread如何處理消息?
我現在需要改變我的SurfaceView的構造函數創建的對象之一(對象是位圖)用戶執行特定的操作(即Thread對象正在運行)之後。這意味着應用程序的GUI線程和執行線程對象的線程之間的通信。我發現了this頁面,詳細介紹了HandlerThread類的使用,非常適合我需要實現的功能。不過,我需要確定這個類是如何工作的,以確保沒有內存一致性錯誤。
下面是我自己的類的僞代碼剝離出來清晰了很多:
public MyThread extends Thread {
boolean _run = true;
public void run(){
// Create HandlerThread object
// Create Looper object
// Create Handler object
while (_run){
// DRAW the Bitmap in this loop
}
}
public boolean handleMessage(Message message){
/*
ALTER the Bitmap here as required
*/
}
}
public MyThread extends Thread {
boolean _run = true;
public void run(){
// Create HandlerThread object
// Create Looper object
// Create Handler object
while (_run){
// DRAW the Bitmap in this loop
}
}
public boolean handleMessage(Message message){
/*
ALTER the Bitmap here as required
*/
}
}
據我瞭解的handleMessage()
方法由同一個線程執行run()
方法執行。但是因爲handleMessage()
ALTERS位圖,而run()
繪製位圖。在線程返回到run()
方法之前,我能確定handleMessage()
將完整完成嗎?