有没有办法测试Message对象是否正在使用?

时间:2011-12-28 11:31:11

标签: android exception message

使用以下代码生成随机数 尽管调用了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();

导致了我原先报告的异常

1 个答案:

答案 0 :(得分:2)

这是一个有趣的问题。我在完全相同的上下文中遇到了同样的问题,即在“handleMessage(消息消息)”情况下。我相信这是因为您尝试回收的消息(“消息”)是声明的handleMessage(消息消息)方法的组成部分,并且将始终由该方法使用。 “message”不是您正在管理的局部变量,而是一个始终由handleMessage()方法使用的变量......

另见:https://groups.google.com/forum/?fromgroups#!topic/android-developers/9pHuc7lGunY 讨论为什么最好不要调用message.recycle()。