使用以下代码生成随机数 尽管调用了message.recycle();在调用 sendMessage (...)
时,会引发一条说明 - “此消息已在使用中”的AndroidRuntimeException有没有办法测试Message是否已被使用?我在这里做错了什么?
RandomGenerator implements Runnable{
....
public void run(){
...
while(true){
synchronized(randomizer){
temp = randomizer.nextFloat() * scaleFactor;
}
Bundle bundleodata = new Bundle();
bundleodata.putFloat( null, temp );
synchronized(handler){
Message messedUp = Message.obtain(handler);
messedUp.setData(bundleodata);
handler.sendMessage(messedUp);
}
Thread.yield();
}
}
....
}
处理程序的主体重写handleMessage,如下所示
public void handleMessage( Message message ){
String strStuff = Float.valueOf( message.getData(null).getFloat() ).toString();
textVw.setText(strStuff);
message.recycle();
}
编辑: 所以在我删除'message.recycle();'之后异常不再被抛出。但是我仍然很好奇为什么现在不再抛出异常,因为删除了回收对象的调用。想法,任何人?
编辑: 更换电话
msg.recycle();
带
removeMessages(0);
获得了我想要的结果,即自动更新文本视图。但我凭经验来到这个阶段,而不是通过逻辑/分析。 如果我们能解决为什么
会很好msg.recycle();
导致了我原先报告的异常。
答案 0 :(得分:2)
这是一个有趣的问题。我在完全相同的上下文中遇到了同样的问题,即在“handleMessage(消息消息)”情况下。我相信这是因为您尝试回收的消息(“消息”)是声明的handleMessage(消息消息)方法的组成部分,并且将始终由该方法使用。 “message”不是您正在管理的局部变量,而是一个始终由handleMessage()方法使用的变量......
另见:https://groups.google.com/forum/?fromgroups#!topic/android-developers/9pHuc7lGunY 讨论为什么最好不要调用message.recycle()。