Android Automotive应用搜索框输入后点击崩溃问题求助
Android Automotive应用SearchTemplate软键盘点击崩溃问题
问题现象
- 应用使用SearchTemplate组件,搜索框输入字符后,点击搜索框区域或放大镜图标,应用直接崩溃
- 点击搜索框的清空X按钮无异常;搜索框为空时点击仅会获取焦点,不会崩溃
错误日志
D/InputMethodManager: showSoftInput() view=androidx.car.app.activity.renderer.surface.TemplateSurfaceView{f2a6fbc VFE...... .F...... 0,0-1024,768 #7f0900ae app:id/template_view_surface aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT E/CarApp.Act: Connection lost android.os.DeadObjectException at android.os.BinderProxy.transactNative(Native Method) at android.os.BinderProxy.transact(BinderProxy.java:571) at androidx.car.app.activity.renderer.IRendererCallback$Stub$Proxy.onCreateInputConnection(IRendererCallback.java:297) at androidx.car.app.activity.BaseCarAppActivity$2.lambda$registerRendererCallback$1(BaseCarAppActivity.java:178) at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda6.invoke(Unknown Source:4) at androidx.car.app.activity.ServiceDispatcher.fetch(ServiceDispatcher.java:116) at androidx.car.app.activity.BaseCarAppActivity$2.lambda$registerRendererCallback$2$androidx-car-app-activity-BaseCarAppActivity$2(BaseCarAppActivity.java:176) at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda4.onCreateInputConnection(Unknown Source:4) at androidx.car.app.activity.renderer.surface.TemplateSurfaceView.onCreateInputConnection(TemplateSurfaceView.java:160) at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:1928) at android.view.inputmethod.InputMethodManager.restartInput(InputMethodManager.java:1858) at androidx.car.app.activity.renderer.surface.TemplateSurfaceView.onStartInput(TemplateSurfaceView.java:210) at androidx.car.app.activity.BaseCarAppActivity$2.lambda$onStartInput$7$androidx-car-app-activity-BaseCarAppActivity$2(BaseCarAppActivity.java:213) at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda8.run(Unknown Source:2) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7870) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003) E/CarApp.Act: Remote exception (host render service) android.os.DeadObjectException at android.os.BinderProxy.transactNative(Native Method) at android.os.BinderProxy.transact(BinderProxy.java:571) at androidx.car.app.activity.renderer.surface.ISurfaceListener$Stub$Proxy.onSurfaceDestroyed(ISurfaceListener.java:181) at androidx.car.app.activity.renderer.surface.SurfaceHolderListener.lambda$notifySurfaceDestroyed$2$androidx-car-app-activity-renderer-surface-SurfaceHolderListener(SurfaceHolderListener.java:103) at androidx.car.app.activity.renderer.surface.SurfaceHolderListener$$ExternalSyntheticLambda1.invoke(Unknown Source:4) at androidx.car.app.activity.ServiceDispatcher.lambda$dispatchNoFail$1(ServiceDispatcher.java:90) at androidx.car.app.activity.ServiceDispatcher$$ExternalSyntheticLambda1.invoke(Unknown Source:2) at androidx.car.app.activity.ServiceDispatcher.fetchNoFail(ServiceDispatcher.java:153) at androidx.car.app.activity.ServiceDispatcher.dispatchNoFail(ServiceDispatcher.java:89) at androidx.car.app.activity.renderer.surface.SurfaceHolderListener.notifySurfaceDestroyed(SurfaceHolderListener.java:102) at androidx.car.app.activity.renderer.surface.SurfaceHolderListener.surfaceDestroyed(SurfaceHolderListener.java:78) at android.view.SurfaceView.notifySurfaceDestroyed(SurfaceView.java:1981) at android.view.SurfaceView.updateSurface(SurfaceView.java:1157) at android.view.SurfaceView.setVisibility(SurfaceView.java:345) at androidx.car.app.activity.BaseCarAppActivity.lambda$onStateChanged$3$androidx-car-app-activity-BaseCarAppActivity(BaseCarAppActivity.java:399) at androidx.car.app.activity.BaseCarAppActivity$$ExternalSyntheticLambda3.run(Unknown Source:4) at androidx.car.app.utils.ThreadUtils.runOnMain(ThreadUtils.java:39) at androidx.car.app.activity.BaseCarAppActivity.onStateChanged(BaseCarAppActivity.java:385) at androidx.car.app.activity.BaseCarAppActivity.$r8$lambda$dw3rK9QfgsUWuk2bAICsaK01RZs(Unknown Source:0) at androidx.car.app.activity.BaseCarAppActivity$$ExternalSyntheticLambda5.onChanged(Unknown Source:4) at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133) at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:151) at androidx.lifecycle.LiveData.setValue(LiveData.java:309) at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50) at androidx.car.app.activity.CarAppViewModel.lambda$onError$0$androidx-car-app-activity-CarAppViewModel(CarAppViewModel.java:185) at androidx.car.app.activity.CarAppViewModel$$ExternalSyntheticLambda2.run(Unknown Source:4) at androidx.car.app.utils.ThreadUtils.runOnMain(ThreadUtils.java:39) at androidx.car.app.activity.CarAppViewModel.onError(CarAppViewModel.java:177) at androidx.car.app.activity.ServiceDispatcher.fetch(ServiceDispatcher.java:119) at androidx.car.app.activity.BaseCarAppActivity$2.lambda$registerRendererCallback$2$androidx-car-app-activity-BaseCarAppActivity$2(BaseCarAppActivity.java:176) at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda4.onCreateInputConnection(Unknown Source:4) at androidx.car.app.activity.renderer.surface.TemplateSurfaceView.onCreateInputConnection(TemplateSurfaceView.java:160) at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:1928) at android.view.inputmethod.InputMethodManager.restartInput(InputMethodManager.java:1858) at androidx.car.app.activity.renderer.surface.TemplateSurfaceView.onStartInput(TemplateSurfaceView.java:210) at androidx.car.app.activity.BaseCarAppActivity$2.lambda$onStartInput$7$androidx-car-app-activity-BaseCarAppActivity$2(BaseCarAppActivity.java:213) at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda8.run(Unknown Source:2) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:201) at android.os.Looper.loop(Looper.java:288) at android.app.ActivityThread.main(ActivityThread.java:7870) E/CarApp.Act: at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
I/CarApp.Act: Unbinding from ComponentInfo E/CarApp.Act: InputConnectionListener has not been received yet. Canceling the input D/InputMethodManager: showSoftInput() view=androidx.car.app.activity.renderer.surface.TemplateSurfaceView{f2a6fbc GFE...... ......I. 0,0-1024,768 #7f0900ae app:id/template_view_surface aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT W/IInputConnectionWrapper: beginBatchEdit on inactive InputConnection W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection W/IInputConnectionWrapper: getTextAfterCursor on inactive InputConnection D/EGL_emulation: app_time_stats: avg=73260.20ms min=85.08ms max=219285.45ms count=3 W/IInputConnectionWrapper: getSelectedText on inactive InputConnection W/IInputConnectionWrapper: endBatchEdit on inactive InputConnection W/IInputConnectionWrapper: beginBatchEdit on inactive InputConnection W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection W/IInputConnectionWrapper: endBatchEdit on inactive InputConnection W/IInputConnectionWrapper: beginBatchEdit on inactive InputConnection W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection W/IInputConnectionWrapper: endBatchEdit on inactive InputConnection
相关代码
onGetTemplate() 实现
return SearchTemplate.Builder( object : SearchCallback { override fun onSearchTextChanged(searchText: String) { if(searchText.isNotEmpty()){ searchCompleted() getAddressFromName(searchText) doSearch(searchText) } } override fun onSearchSubmitted(searchTerm: String) { mIsSearchComplete = true searchCompleted() doSearch(searchTerm) } }) .setShowKeyboardByDefault(true) .setItemList(mItemList!!) .build()
doSearch() 实现
fun doSearch(searchText: String) { val builder = ItemList.Builder() places.clear() if (searchText.isEmpty()) { mItemList = withNoResults(builder)?.build(); } if (!isInternetConnection) { CarToast.makeText( carContext, "Ingen internett tilgang", CarToast.LENGTH_LONG ) .show() return } val destinations = getAddressFromName(searchText) if(destinations.isNotEmpty()){ destinations.forEach{ val addressLine = it.getAddressLine(0) builder.addItem( Row.Builder() .setTitle(addressLine) .setOnClickListener { onClickSearch(it) } .build()) } mItemList = builder.build() invalidate() return } }
已尝试的排查步骤
- 清空
onSearchTextChanged和onSearchSubmitted方法体,排除业务逻辑导致崩溃的可能,但问题仍复现
问题场景截图
- 输入字符后的界面:

- 点击搜索框后崩溃的界面:

内容的提问来源于stack exchange,提问作者Anniken
相关产品推荐
相关产品推荐

