REAQ 2023-02-01 18:29 采纳率: 75%
浏览 24
已结题

安卓子线程中,Handler绑定主线程Looper后,发送Message,主线程未收到

安卓子线程中,Handler绑定主线程Looper后,发送Message,主线程未收到
  //子线程
 public static void reqImg(String url){
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                        URL Url=new URL(url);
                        Bitmap bitmap = BitmapFactory.decodeStream(Url.openStream());
                        Handler handler=new Handler(Looper.getMainLooper());
                        Message msg=handler.obtainMessage(com.example.xingyi.ui.Handler.TOOL_BAR_IMG,bitmap);
                        handler.sendMessage(msg);
                        Log.d("http","send");
                }catch (Exception e){
                    Log.e("http",e.getMessage());
                }
            }
        }).start();

//主线程
 @Override
    public void handleMessage(@NonNull Message msg) {
        super.handleMessage(msg);
        switch (msg.what){
            case TOOL_BAR_IMG:    // 静态整型常量
                BitmapDrawable drawable=new BitmapDrawable((Bitmap) msg.obj);
                fragment.getToolbarLayout().setBackground(drawable);
                Log.d("http","rec");      //打印接收标志
                break;
    
            default:
                Toast.makeText(context, "MessageCodeError", Toast.LENGTH_SHORT).show();
        }

img


没有打印rec,说明没接收到

子线程在Handler构造时调用Looper的静态方法获取主线程Looper,然后直接发送,主线程的Handler初始化了并绑定了主线程的Looper
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”
  • 写回答

3条回答 默认 最新

  • Halifax ‎ 2023-02-01 19:03
    关注

    message.target 它的主线程 handler 不是同一个,所以你收不到

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月9日
  • 已采纳回答 2月1日
  • 创建了问题 2月1日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来