gpt4 book ai didi

Android 服务到 Activity 的高频通信 : best option?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:48:04 25 4
gpt4 key购买 nike

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

我的问题是:对于这种情况,服务到 Activity 通信的选项是什么?我想最大限度地减少服务计算新位置的时间点与 UI( Activity )已知的时间点之间的毫秒延迟(最好,几乎没有延迟)。

您可以假设一切( Activity 、服务)都在一个流程中。

我正在考虑一个解决方案,其中每个 Activity ,无论何时恢复,都会告诉服务它的存在(并且在 onPause() 中, Activity 告诉服务它们不可用),以便服务在计算新坐标时,可以简单的检查一个activity是否可见,如果可见,直接调用visibleActivity.someMethod()。据了解,.someMethod() 在内部将控制权交给了 UI 线程。

我提出这个建议,因为我确信通过广播会降低性能。

让我知道你的想法!

最佳答案

您的 Activity 应注册在 AIDL 中实现的监听器服务和服务应将它们维护在 RemoteCallbackList

您的服务应该有两个这样的方法,以便您的 Activity 在 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 服务到 Activity 的高频通信 : best option?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13818071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com