高频率的Android服务与活动之间的沟通:最佳选择?

前端之家收集整理的这篇文章主要介绍了高频率的Android服务与活动之间的沟通:最佳选择?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Android应用程序(API级别14及更高级别)中,该应用程序具有由不同活动使用的服务(它们使用本地绑定调用功能),该服务计算60Hz的游戏元素的位置(坐标). [我有充分的理由在服务中进行计算,而不仅仅是直接在活动中进行计算].服务(用于游戏逻辑检查)和播放屏幕活动(用于绘图)中需要这些连续位置更新.

我的问题是:为此方案选择服务到活动通信的选项是什么?我希望在服务计算新位置的时间点与UI(活动)已知的时间点之间最小化延迟(以毫秒为单位,几乎没有任何延迟).

您可以假设所有事项(活动,服务)都在一个过程中.

我正在考虑一个解决方案,每个活动,每当它恢复时,告诉服务它的存在(并在onPause()活动告诉服务它们的不可用性),以便服务,当它计算新坐标时,可以简单地检查活动是否可见,如果是,则直接调用visibleActivity.someMethod().
据了解,.someMethod()内部将控制权移交给UI线程.

我建议这样做,因为我确信通过广播进行会破坏性能.

让我知道你的想法!

最佳答案
您的活动应该将AIDL中实施的监听器注册到服务中,并且服务应该在RemoteCallbackList中维护它们

您的服务应该有两个这样的方法,由onResume / onPause中的活动调用

public void registerListener(IYourListenerInterface listener) {
     callbackList.register(listener);
}


public void unregisterListener(IYourListenerInterface listener) {
     callbackList.unregister(listener);
}

当您需要发送消息时:

int numOfListeners = callbackList.beginBroadcast();

for (int i = 0; i < numOfListeners; i++) {
    try {
        callbackList.getBroadcastItem(i).whatever();
    } catch (RemoteException e) {
        //ignore,listener probably gone
    }
}
callbackList.finishBroadcast();

猜你在找的Android相关文章