为了账号安全,请及时绑定邮箱和手机立即绑定

以下代码请问是什么意思?求大佬解释!

以下代码请问是什么意思?求大佬解释!

撒科打诨 2021-11-09 11:07:16
fileinfo是我自己声明的一个对象,我知道调用这一句之后代码会跳转到private Handler handler=new Handler(){public void handleMessage(android.os.Message msg) {switch (msg.what) {case MSG_INIT:FileInfo fileinfo=(FileInfo)msg.obj;Log.d("22222", "INIT: "+fileinfo);//启动一个下载任务mTask=new DownLoadTask(DownloadService.this, fileinfo);mTask.download();break;default:break;}};};这里,但是Log.d("22222", "INIT: "+fileinfo);这一句却可以正常执行,我的FileInfo对象为什么可以直接当字符串输出?
查看完整描述

2 回答

?
杨魅力

TA贡献1811条经验 获得超6个赞

Message.sendToTarget() ---> Message.target.sendMessage(), 这里target是个Handler,所以你说的消息是发送到这个Message内部持有的Handler对象,加入他的MessageQueue。所以你要找到赋给该Message Handler的地方,在它的handleMessage里就可以看到处理了。至于在什么地方赋的值,可以看在什么地方调用了Message.obtain(Hanlder)或者Handler.obtainMessage()这类的函数

查看完整回答
反对 回复 2021-11-14
?
潇湘沐

TA贡献1816条经验 获得超6个赞

handler.obtainMessage(MSG_INIT, fileInfo).sendToTarget();
相对于
Message msg = new Message();
msg.what = MSG_INIT ;
msg.obj = fileInfo;
handler..sendMessage(msg);

Message msg 对象可以复用。如果没有就会创建一个Message msg,有的话就用已创建好的。

而Log.d("22222", "INIT: "+fileinfo);

为什么可以这样写?这样写打印出来的是什么?
Log.d的第二个参数是String,"INIT: "+fileinfo会被转成一个String。

这里等价于
"INIT: "+fileinfo.toString()
所有的类都继承于Object,如果没有重写Object的toString()方法,那么fileinfo.toString()打印的是fileinfo这个对象的
"对象实现类的类名+@+hashCode的组合字符串"。
你可以自己试一下。



查看完整回答
反对 回复 2021-11-14
  • 2 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信