Service 推送 / Stub·Proxy 对调

真实场景:车载 HMI 不会用轮询拿车辆数据。页面打开先用拉取拿到初始值避免空白;对于车速、告警这类实时变化的数据,通过订阅注册回调,由 CarService 服务端发生变化后主动推送更新 UI。设置、配置这类很少变动的数据,使用单次拉取即可。

1、总览流程图

2、关键:Stub / Proxy 怎么「对调」

拉:问一句

bash 复制代码
HMI --ICarService.Proxy--> Binder --ICarService.Stub--> CarService
                           getSpeed()

推:报一句(座位对调)

bash 复制代码
CarService --Listener.Proxy--> Binder --Listener.Stub--> HMI
                         onSpeedChanged(85)

对调 = 换了一条「谁打给谁」的接口;通道仍是 Binder。

3、最小代码示意

AIDL

bash 复制代码
// 推送用的「回拨接口」
interface ICarSpeedListener {
    void onSpeedChanged(int speed);
}

interface ICarService {
    int getSpeed();
    void registerSpeedListener(ICarSpeedListener listener);
    void unregisterSpeedListener(ICarSpeedListener listener);
}

Client:留下接听 Stub

bash 复制代码
ICarSpeedListener.Stub speedListener = new ICarSpeedListener.Stub() {
    public void onSpeedChanged(int speed) {
        // 常在 Binder 线程 → 切主线程再改 UI
        mainHandler.post(() -> updateSpeedUi(speed));
    }
};

// 连接成功后
carService.registerSpeedListener(speedListener);

Server:当 Proxy 去打

bash 复制代码
RemoteCallbackList<ICarSpeedListener> listeners = ...;

void notifySpeed(int speed) {
    int n = listeners.beginBroadcast();
    for (int i = 0; i < n; i++) {
        listeners.getBroadcastItem(i).onSpeedChanged(speed);
        // ↑ Server 调的是 Listener.Proxy
    }
    listeners.finishBroadcast();
}

4、总结

Service「推送」并不神秘:

Client 用 Listener.Stub 注册回拨

Server 保存后用 Listener.Proxy 反向调用

还是 Binder,只是 Stub/Proxy 角色对调

会讲这三句,回调这块就算过关了。

相关推荐
千里马学框架1 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone1 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc1 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼1 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone1 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen1 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone1 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui