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
相关产品推荐
相关产品推荐

