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



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

我有以下课程:

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);
}
}

我知道这个逻辑是有效的,因为我现在试图运行的是我看到它多次工作后保存的备份,但正如我所说的,现在发生的事情是由于某种原因,Looper每秒不断调用具有相同消息的消息处理程序一百万次,并且从不丢弃该消息来转移到其他地方。

非常感谢您的帮助!

检查点:

  1. activity.doSomething()不会发送消息GameMessageHandler.DO_SOMETHING
  2. playerTookSomeAction()不重复调用

只要把它格式化得更好,以防有人觉得无聊!

最新更新