You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Automotive应用SignInTemplate输入框点击崩溃问题求助

解决Android Automotive SignInTemplate输入后点击崩溃问题

问题诊断

报错中的DeadObjectException表明渲染服务与应用的Binder跨进程连接意外断开。根源是每次调用onGetTemplate()时都重新创建InputCallback实例与整个SignInTemplate,导致输入框状态变更时,旧回调的Binder代理已失效,触发通信错误。

输入框为空时点击仅唤起键盘,未触发文本相关回调;输入字符后点击会触发输入状态重置,此时旧回调已被销毁,进而引发崩溃。

修复方案

将InputCallback与SignInTemplate的实例化逻辑移至onCreate()等初始化阶段,保持实例稳定性,避免每次重建模板时销毁旧的回调绑定:

// 类成员变量保存实例,避免重复创建
private InputCallback mInputCallback;
private SignInTemplate mSignInTemplate;

@Override
public void onCreate(@Nullable Intent intent) {
    super.onCreate(intent);
    
    // 初始化回调
    mInputCallback = new InputCallback() {
        @Override
        public void onInputSubmitted(@NonNull String text) {
            // 处理提交逻辑
        }

        @Override
        public void onInputTextChanged(@NonNull String text) {
            // 处理文本变更逻辑
        }
    };

    // 初始化登录模板
    InputSignInMethod inputSignInMethod = new InputSignInMethod
            .Builder(mInputCallback)
            .setHint("Enter Details")
            .build();

    mSignInTemplate = new SignInTemplate.Builder(inputSignInMethod)
            .addAction(new Action.Builder()
                    .setOnClickListener(ParkedOnlyOnClickListener.create(() -> {}))
                    .setTitle("Log In")
                    .build())
            .setTitle("Sign In")
            .build();
}

@NonNull
@Override
public Template onGetTemplate() {
    // 直接返回预创建的模板
    return mSignInTemplate;
}

关键说明

Android Automotive的模板渲染依赖跨进程通信,模板与回调对象需保持生命周期一致。若每次onGetTemplate()都生成新实例,会导致系统维护的输入连接引用失效,触发DeadObjectException。保持模板与回调的单例性,是避免此类跨进程通信错误的核心。

内容的提问来源于stack exchange,提问作者Manky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 22:53:11