簡體   English   中英

使用Android處理程序使用單獨的處理程序

[英]Using android handler using a separate handler

在以下情況下,我對處理程序的用法有疑問

我有一個活動課,如下所示:

public class MyActivity extends Activity {

    ...
    ...

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)  {
       ...
    }
}

和一個BluetoothClientConnection類,如下所示

public class BTClientConnection extends Thread {
    public void run {
        ...
    }
}

現在,我想使用處理程序更新UI。 我應該怎么做? 我是否應該創建一個公共處理程序變量並直接從我的BluetoothClientConnection代碼中引用它? 這是最佳實踐嗎,因為我將直接與MyActivity類結合使用。

來自Gennadii Saprykin的答案應該是最終代碼

public class MyActivity extends Activity {

    ...
    private ActivityHandler activityhandler = new ActivityHandler();

    static class ActivityHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {            

        } 
        ...
    }

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)  {
       ...
       BTClientConnection btClientConnection = new BTClientConnection(..);
       btClientConnection.start();
    }
}

public class BTClientConnection extends Thread {
    private static final Handler UI_HANDLER = new Handler(Looper.getMainLooper());

    public void run {
        Message message = new Message();
        UI_HANDLER.sendMessage(message);
    }
}

通過這種方式在后台Thread內創建一個UI Handler

private static final Handler UI_HANDLER = new Handler(Looper.getMainLooper());

那么你可以send郵件或post一個Runnable於UI線程。 要在活動中處理消息,您可以在活動中創建另一個處理程序,並覆蓋handleMessage方法,如下所示:

    @Override
    public void handleMessage(Message inputMessage) {
        if (message.what == YOUR_MESSAGE_CODE) {
           ...
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM