【安卓开发】学习笔记和资料

张开发
2026/4/21 21:26:53 15 分钟阅读

分享文章

【安卓开发】学习笔记和资料
【课程笔记】转载的笔记以下为链接https://gitee.com/xiaweifeng/StudyAndroidBasichttps://gitee.com/xiaweifeng/StudyAndroidBasic【技术知识点梳理】【Hander】【Hander技术简单介绍】1. 子线程通知主线程更新 UI最常用// 主线程创建 Handler Handler handler new Handler(Looper.getMainLooper()) { Override public void handleMessage(Message msg) { super.handleMessage(msg); // 这里一定是主线程可以安全更新 UI if (msg.what 1) { tv_text.setText(加载完成); } } }; // 子线程做耗时操作 new Thread(new Runnable() { Override public void run() { // 模拟网络请求 try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } // 子线程发送消息给主线程 Message message new Message(); message.what 1; // 消息标识 handler.sendMessage(message); } }).start();import android.os.Bundle import android.os.Handler import android.os.Looper import android.os.Message import android.widget.TextView import androidx.appcompat.app.AppCompatActivity class MainActivity : AppCompatActivity() { private lateinit var tvText: TextView // 1. 创建 Handler主线程 Handler private val mHandler object : Handler(Looper.getMainLooper()) { override fun handleMessage(msg: Message) { super.handleMessage(msg) // 4. 在这里处理消息 → 主线程可以安全更新 UI when (msg.what) { 1 - { tvText.text 子线程发消息过来啦当前数字${msg.arg1} } 2 - { tvText.text 任务完成 } } } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) tvText findViewById(R.id.tv_text) // 2. 开启子线程做耗时操作 Thread { for (i in 1..5) { Thread.sleep(1000) // 模拟耗时 // 3. 子线程发消息给 Handler val msg Message.obtain() msg.what 1 // 消息标识 msg.arg1 i // 带简单 int 数据 mHandler.sendMessage(msg) } // 循环结束发结束消息 val endMsg Message.obtain() endMsg.what 2 mHandler.sendMessage(endMsg) }.start() } override fun onDestroy() { super.onDestroy() // 防止内存泄漏移除所有消息 mHandler.removeCallbacksAndMessages(null) } }【Handler Looper Message关系是什么】【Messagequeue 的数据结构是什么为什么要用这个数据结构】【如何在子线程中创建 Handler?】

更多文章