//子线程
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();
}
message.target 它的主线程 handler 不是同一个,所以你收不到
代码看上去合法
无法确定为什么主线程没有收到消息
添加打印语句检查是否有异常发生
在消息被接收之前检查日志是否有send语句被打印
这表明消息已经被发送但在主线程没有收到之前被更新