猿问

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

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对象为什么可以直接当字符串输出?

撒科打诨
浏览 198回答 2
2回答

杨魅力

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

潇湘沐

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的组合字符串"。你可以自己试一下。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答