在Android应用程序(API级别14及更高级别)中,该应用程序具有由不同活动使用的服务(它们使用本地绑定调用其功能),该服务计算60Hz的游戏元素的位置(坐标). [我有充分的理由在服务中进行计算,而不仅仅是直接在活动中进行计算].服务(用于游戏逻辑检查)和播放屏幕活动(用于绘图)中需要这些连续位置更新.
我的问题是:为此方案选择服务到活动通信的选项是什么?我希望在服务计算新位置的时间点与UI(活动)已知的时间点之间最小化延迟(以毫秒为单位,几乎没有任何延迟).
您可以假设所有事项(活动,服务)都在一个过程中.
我正在考虑一个解决方案,每个活动,每当它恢复时,告诉服务它的存在(并在onPause()活动告诉服务它们的不可用性),以便服务,当它计算新坐标时,可以简单地检查活动是否可见,如果是,则直接调用visibleActivity.someMethod().
据了解,.someMethod()内部将控制权移交给UI线程.
我建议这样做,因为我确信通过广播进行会破坏性能.
让我知道你的想法!
最佳答案
您的活动应该将AIDL中实施的监听器注册到服务中,并且服务应该在RemoteCallbackList中维护它们
原文链接:https://www.f2er.com/android/430742.html您的服务应该有两个这样的方法,由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();