Java Android处理程序在Eclipse中被Looper反复调用,而不是Looper在使用后丢弃消息

Java Android处理程序在Eclipse中被Looper反复调用,而不是Looper在使用后丢弃消息,java,android,eclipse,looper,Java,Android,Eclipse,Looper,我想我可能是无意中打开了一些我在Eclipse中不想打开的设置。我正在开发一款android游戏,在游戏逻辑中,当某些事件发生时,我会向主活动发送消息以显示某些内容 我有以下课程: public class GameMessageHandler extends Handler { public static final int DO_SOMETHING = 0; private final WeakReference<MyActivity> myActivity;

我想我可能是无意中打开了一些我在Eclipse中不想打开的设置。我正在开发一款android游戏,在游戏逻辑中,当某些事件发生时,我会向主活动发送消息以显示某些内容

我有以下课程:

public class GameMessageHandler extends Handler {

    public static final int DO_SOMETHING = 0;

    private final WeakReference<MyActivity> myActivity;

    public GameMessageHandler(MyActivity myActivity) {

        this.myActivity = new WeakReference<MyActivity>(myActivity);

    }

    @Override
    public void handleMessage(Message msg) {

        if (myActivity != null) {

            MyActivity activity = myActivity.get();

            if (msg.what == DO_SOMETHING) {
                //even if the caller only called this one time, this keeps executing forever
                activity.doSomething();

            }
        }
    }
}

public class GameEventListenerAndroid implements GameEventListener {

    private Handler handler;

    public GameEventListenerAndroid(GameMessageHandler gameMessageHandler){
        this.handler = gameMessageHandler;
    }

    @Override
    public void playerTookSomeAction() {
        //this only gets called one time
        handler.sendEmptyMessage(GameMessageHandler.DO_SOMETHING);
    }

}
公共类GameMessageHandler扩展处理程序{
公共静态final int DO_SOMETHING=0;
私人最终WeakReference myActivity;
公共GameMessageHandler(MyActivity MyActivity){
this.myActivity=新WeakReference(myActivity);
}
@凌驾
公共无效handleMessage(消息消息消息){
如果(myActivity!=null){
MyActivity=MyActivity.get();
如果(msg.what==做某事){
//即使调用方只调用了一次,它也会一直执行
活动。doSomething();
}
}
}
}
公共类GameEventListenerAndroid实现GameEventListener{
私人经办人;
public GameEventListenerAndroid(GameMessageHandler GameMessageHandler){
this.handler=gameMessageHandler;
}
@凌驾
public void playerTookSomeAction(){
//这只会被调用一次
sendEmptyMessage(GameMessageHandler.DO_SOMETHING);
}
}
知道这个逻辑是有效的,因为我现在试图运行的是我多次看到它工作后保存的备份,但正如我所说的,由于某种原因,
循环器一直以每秒一百万次的速度使用同一条消息调用消息处理程序,并且从不丢弃该消息以转到其他内容

非常感谢您的帮助

检查点:

  • activity.doSomething()
    不会发送消息
    GameMessageHandler.DO\u SOMETHING
  • 不会重复调用playerTookSomeAction()

  • 只是把它格式化得更好,以防有人觉得很无聊

    你倒过来了。当侦听器发送消息GameMessageHandler.DO\u SOMETHING时,将调用activity.doSomething()。此外,playerTookSomeAction只被调用一次,但循环器使用message DO_something重复调用消息处理程序。