Android——多线程、线程通信、handler机制

Android------多线程、线程通信、handler机制

  • 模拟网络请求,会阻塞主线程
java 复制代码
    private String getStringForNet() {
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < 100; i++) {
            stringBuilder.append("字符串" + i);
        }
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return stringBuilder.toString();
    }
  • 常规做法(会导致页面无法交互)
java 复制代码
    public void handleStart(View view) {
        String str = getStringForNet();
        tv_content.setText(str);
    }
  • 使用多线程
java 复制代码
    public void handleStart(View view) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                String str = getStringForNet();
                tv_content.setText(str);//会有问题
            }
        });

        thread.start();
    }

这样,我们的主线程不会阻塞,在执行这个任务后,页面也可以正常交互,但是在子线程中不能操纵页面,所以 tv_content.setText(str)会有问题,所以我们需要进程通信。

  • 线程通信

在Activity中定义一个Handler

java 复制代码
    private Handler mHandler = new Handler(Looper.myLooper()) {
        @Override
        public void handleMessage(@NonNull Message msg) {
            super.handleMessage(msg);
            if (msg.what == 0) {
                String strData = (String) msg.obj;
                tv_content.setText(strData);
                ToastUtil.show(ThreadActivity.this,"任务完成");
            }
        }
    };

通过 mHandler 发送消息

java 复制代码
            @Override
            public void run() {
                String str = getStringForNet();

                Message message = new Message();
                message.what = 0;
                message.obj = str;
                mHandler.sendMessage(message);
            }
  • Handler 异步通信系统
  • handler 多线程通信机制

    案例代码
相关推荐
OriginCoding7 分钟前
用 AI Agent 协作完成一个 Android TOTP 应用:从需求边界到 v1.0.0
android·ai编程
杉氧3 小时前
React 灵魂:深入剖析 Hooks 与副作用(Side Effects)陷阱
android·前端·react native
又见情义3 小时前
RK3568 + RTL8211F 网络唤醒(WOL)功能适配全记录
android·网络·驱动开发
用户0934077735144 小时前
HarmonyOS WPS Open SDK 实践:registerApp 鉴权与就绪门禁
android·typescript·harmonyos
jike_20264 小时前
会议离线录音APP:无网络记录能力对比
android·智能手机·语音识别
always_TT5 小时前
【Python 字符串格式化:format() 方法】
android·开发语言·python
恋猫de小郭5 小时前
AI 时代,一个优化 Flutter 的重复代码工具 Deslop
android·前端·flutter
RisunJan5 小时前
Android 面试知识点整理
android·面试·职场和发展
脚踏实地,坚持不懈!6 小时前
Android ANR 内核底层全解析:从一次触摸到“应用无响应”
android·linux
xhBruce6 小时前
强制使用桌面模式 - SECONDARY_HOME -android-15.0.0_r23
android·launcher3