安卓应用程序事件处理

4

在Android中,是否有一组标准的Listener/Observer/Observable类来管理应用程序事件?

我不是在谈论UI或其他Android API事件,而是自定义应用程序事件,例如GameOverEvent、LevelClearedEvent等。

是否有首选接口可实现/扩展,以便我可以实现以下内容:

public void addGameOverListener(GameOverListener listener)

1
我使用内置的IntentService类来处理事件。它通过意图请求异步地在主UI线程之外处理请求。每个意图都被添加到IntentService的队列中并按顺序处理。一个不错的入门教程可以在mobiletuts上找到。 - Jim Geurts
2个回答

3

很简单,您只需要创建自己的EventListener即可。

public interface onGameFinishedListener {

    public void onGameFinished(GameView gameView);

}

还有一些具有onGameFinished()方法的类

public abstract class GameView extends SurfaceView implements SurfaceHolder.Callback{

    List<onGameFinishedListener> listeners;
    public GameThread gameThread;
    protected int width;
    protected int height;
    public GameView(Context context) {
        super(context);
        width = 320;
        height = 480;
        listeners = new ArrayList<onGameFinishedListener>();
    }

    public abstract void init();
    public void registerGameFinishedListener(onGameFinishedListener listener) {
        listeners.add(listener);
    }
    protected void GameFinished(GameView gameView) {
        for (onGameFinishedListener listener : listeners) {
            synchronized(gameThread.getSurfaceHolder()) {
                listener.onGameFinished(gameView);
            }
        }
    }
}

然后在您希望在游戏结束时执行操作的活动或视图中实现onGameFinishedListener。

public class RocketActivity extends GameActivity implements onGameFinishedListener {

private final int MENU = 0;
private final int END = 1;
private final int CONFIRMATION = 2;
private RelativeLayout layout;
private RocketView rocketView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    layout = new RelativeLayout(this);
    rocketView = new RocketView(this);

    rocketView.registerGameFinishedListener(this);
    rocketView.init();
    layout.addView(rocketView);
    setContentView(layout);
}

@Override
public void onGameFinished(GameView gameView) {
    runOnUiThread(new Runnable() {

        @Override
        public void run() {
            showDialog(END);
        }
    });
}

不需要依赖Android来使用EventListener。 :)


一些注释:RocketView 是继承自 GameView 的视图。因此基本上它就是一个 GameView :) - Fugogugo
是的,那跟我现在的代码非常相似。但我想知道是否有标准的API可以添加/移除监听器和触发事件,而不是手动编写(尽管像你演示的那样很简单)。例如,在GWT中,他们提供了一个EventBus,所有的(反)注册和甚至触发都已经为您处理好了。感谢您的回复。 - George Armhold

1

你尝试过GreenRobot的EventBus吗?

它基本上是一个处理应用程序范围事件的标准实现的EventBus。它提供了相当不错的线程间通信。

GWT提供的内容非常相似。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接