即时通讯课设Android端问题记录

转眼间,就已经是大四学生,目前正在写毕设。Android 端没有系统的学习过,都是哪里不会查哪里,基本靠度娘。所以,在此记录下课设开发过程中,Android 端遇到的问题。

在主线程刷新 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
    }
}

notifyItemMovednotifyItemInsertednotifyItemRemoved 元素的插入、移动、删除,仅仅是元素的结构性变化,只会改变元素的位置,但元素的数据依然被认为是最新的。所以如果想更新元素的数据,需要再调用 notifyItemChanged。(参考源码方法上的注解)

Original: https://www.cnblogs.com/flowers-bloom/p/16132215.html
Author: flowers-bloom
Title: 即时通讯课设Android端问题记录

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/591788/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球