1. 程式人生 > 其它 >即時通訊課設Android端問題記錄

即時通訊課設Android端問題記錄

前言

轉眼間,就已經是大四學生,目前正在寫畢設。Android 端沒有系統的學習過,都是哪裡不會查哪裡,基本靠度娘。所以,在此記錄下課設開發過程中,Android 端遇到的問題。

重新整理UI

在主執行緒重新整理 UI 是沒有問題的,但往往我們有時需要在非主執行緒裡重新整理 UI,這時你會發現,直接進行重新整理是不生效的。

首先,如果你不知道當前執行緒到底是屬於主執行緒還是子執行緒,可以使用 Looper.getMainLooper() == Looper.myLooper() 進行判斷。

判斷出當前執行緒是子執行緒後,進行重新整理 UI 的方法有:

1.通過 Handler 的方式通知主執行緒去重新整理 UI

比如 handler.post(),或者 sendMessage 方式。

該方法需要注意,如果 Handler 是在主執行緒,則可以直接使用,如果是子執行緒,則需要獲取主執行緒的 Looper 和 Queue,即 Handler handler = new Handler(Looper.getMainLooper())

2.主動到主執行緒裡重新整理 UI,比如

runOnUiThread(new Runnable() {
    public void run() {
        //更新UI
    }
}

列表元素更新

notifyItemMovednotifyItemInserted

notifyItemRemoved 元素的插入、移動、刪除,僅僅是元素的結構性變化,只會改變元素的位置,但元素的資料依然被認為是最新的。所以如果想更新元素的資料,需要再呼叫 notifyItemChanged。(參考原始碼方法上的註解)