安卓12设备操作键盘时控制台出现未知日志的技术咨询
自定义CommonTextFormField组件触发安卓12设备控制台冗余日志问题
问题描述
项目中使用自定义CommonTextFormField组件,打开/关闭键盘时控制台会输出大量未知日志,干扰正常日志查看。这些日志仅在安卓12设备上出现,安卓9设备无此现象,想确认这类日志是否可忽略,或是代码存在问题。
测试设备
- Samsung Galaxy F22,安卓版本:12
- ASUS_XOOTD,安卓版本:9
自定义TextFormField代码
class CommonTextFormField extends GetView { const CommonTextFormField({ Key? key, required this.controller, this.hint, required this.keyboardType, this.obscureText, required this.focusBorderColor, this.onChanged, this.validator, this.onTap, this.suffixIcon, this.readOnly, this.inputFormatters, this.onFieldSubmitted, this.focusNode, }) : super(key: key); final TextEditingController controller; final FocusNode? focusNode; final String? hint; final TextInputType keyboardType; final bool? obscureText; final Color focusBorderColor; final Widget? suffixIcon; final ValueChanged<String>? onChanged; final Function(String)? onFieldSubmitted; final FormFieldValidator<String>? validator; final GestureTapCallback? onTap; final bool? readOnly; final List<TextInputFormatter>? inputFormatters; @override Widget build(BuildContext context) { return TextFormField( readOnly: readOnly ?? false, controller: controller, focusNode: focusNode, cursorColor: kBlack45, keyboardType: keyboardType, obscureText: obscureText ?? false, onTap: onTap ?? () {}, onChanged: onChanged, onFieldSubmitted: onFieldSubmitted ?? (_) {}, validator: validator, textAlignVertical: TextAlignVertical.center, inputFormatters: inputFormatters ?? [], decoration: InputDecoration( semanticCounterText: hint, hintText: hint, hintStyle: const TextStyle(color: kBlack45), suffixIcon: suffixIcon ?? const SizedBox.shrink(), border: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: const BorderSide(color: kBlack45), ), enabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: const BorderSide(color: kBlack45), ), focusedBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: BorderSide(color: focusBorderColor), ), errorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: const BorderSide(color: kBlack45), ), disabledBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: const BorderSide(color: kBlack45), ), focusedErrorBorder: OutlineInputBorder( borderRadius: BorderRadius.circular(10), borderSide: BorderSide(color: focusBorderColor), ), ), ); } }
控制台日志
Launching lib\main.dart on SM E225F in debug mode... √ Built build\app\outputs\flutter-apk\app-debug.apk. Connecting to VM Service at ws://127.0.0.1:62331/CNb4sKjiD3g=/ws [GETX] Instance "GetMaterialController" has been created [GETX] Instance "GetMaterialController" has been initialized [GETX] Instance "SplashScreenViewModel" has been created [GETX] Instance "SplashScreenViewModel" has been initialized E/ion (17849): ioctl c0044901 failed with code -1: Invalid argument D/hw-ProcessState(17849): Binder ioctl to enable oneway spam detection failed: Invalid argument D/ViewRootImpl@5868508[MainActivity](17849): Creating frameDrawingCallback nextDrawUseBlastSync=false reportNextDraw=true hasBlurUpdates=false D/ViewRootImpl@5868508[MainActivity](17849): Creating frameCompleteCallback D/ViewRootImpl@5868508[MainActivity](17849): Received frameDrawingCallback frameNum=1. Creating transactionCompleteCallback=false I/SurfaceView@503833(17849): uSP: rtp = Rect(0, 0 - 720, 1510) rtsw = 720 rtsh = 1510 I/SurfaceView@503833(17849): onSSPAndSRT: pl = 0 pt = 0 sx = 1.0 sy = 1.0 I/SurfaceView@503833(17849): aOrMT: uB = true t = android.view.SurfaceControl$Transaction@b911005 fN = 1 android.view.SurfaceView.access$500:124 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1728 android.graphics.RenderNode$CompositePositionUpdateListener.positionChanged:319 I/SurfaceView@503833(17849): aOrMT: vR.mWNT, vR = ViewRootImpl@5868508[MainActivity] I/ViewRootImpl@5868508[MainActivity](17849): mWNT: t = android.view.SurfaceControl$Transaction@b911005 fN = 1 android.view.SurfaceView.applyOrMergeTransaction:1628 android.view.SurfaceView.access$500:124 android.view.SurfaceView$SurfaceViewPositionUpdateListener.positionChanged:1728 I/ViewRootImpl@5868508[MainActivity](17849): mWNT: merge t to BBQ D/ViewRootImpl@5868508[MainActivity](17849): Received frameCompleteCallback lastAcquiredFrameNum=1 lastAttemptedDrawFrameNum=1 I/ViewRootImpl@5868508[MainActivity](17849): [DP] pdf(0) 1 android.view.ViewRootImpl.lambda$addFrameCompleteCallbackIfNeeded$3$ViewRootImpl:4987 android.view.ViewRootImpl$$ExternalSyntheticLambda16.run:6 android.os.Handler.handleCallback:938 I/ViewRootImpl@5868508[MainActivity](17849): [DP] rdf() D/ViewRootImpl@5868508[MainActivity](17849): reportDrawFinished (fn: -1) I/ViewRootImpl@5868508[MainActivity](17849): MSG_WINDOW_FOCUS_CHANGED 1 1 D/InputMethodManager(17849): startInputInner - Id : 0 I/InputMethodManager(17849): startInputInner - mService.startInputOrWindowGainedFocus D/InputMethodManager(17849): startInputInner - Id : 0 I/om.Tolk2Go.use(17849): Thread[6,tid=17854,WaitingInMainSignalCatcherLoop,Thread*=0xb40000793c85dc00,peer=0x13140228,"Signal Catcher"]: reacting to signal 10 I/om.Tolk2Go.use(17849): I/om.Tolk2Go.use(17849): SIGUSR1 forcing GC (no HPROF) and profile save I/om.Tolk2Go.use(17849): Explicit concurrent copying GC freed 1344(158KB) AllocSpace objects, 0(0B) LOS objects, 70% free, 2549KB/8693KB, paused 121us,46us total 19.870ms [GETX] REPLACE ROUTE / [GETX] NEW ROUTE /login [GETX] Instance "LanguageDropDownController" has been created [GETX] Instance "LanguageDropDownController" has been initialized [GETX] "SplashScreenViewModel" onDelete() called [GETX] "SplashScreenViewModel" deleted from memory I/ViewRootImpl@5868508[MainActivity](17849): Relayout returned: old=(0,0,720,1600) new=(0,0,720,1600) req=(720,1600)0 dur=17 res=0x1 s={true -5476376626277527552} ch=false fn=2 I/ViewRootImpl@5868508[MainActivity](17849): updateBoundsLayer: t = android.view.SurfaceControl$Transaction@b277b80 sc = Surface(name=Bounds for - com.Tolk2Go.user/com.Tolk2Go.user.MainActivity@0)/@0xc70c5b9 frame = 2 I/ViewRootImpl@5868508[MainActivity](17849): mWNT: t = android.view.SurfaceControl$Transaction@b277b80 fN = 2 android.view.ViewRootImpl.prepareSurfaces:2770 android.view.ViewRootImpl.performTraversals:4016 android.view.ViewRootImpl.doTraversal:2911 I/ViewRootImpl@5868508[MainActivity](17849): mWNT: merge t to BBQ D/[secipm](17849): mSecIpmManager setProfileLength com.example.user profile:3241
解答
这些日志完全可以忽略,和你的自定义CommonTextFormField代码没有关系:
- 日志来源分析:
E/ion、D/hw-ProcessState类日志是安卓系统底层(ION内存管理、Binder进程通信)的调试信息,属于安卓12系统本身的输出,和Flutter代码无关。D/ViewRootImpl、I/SurfaceView类日志是安卓视图系统在键盘弹出/收起时,处理界面重绘、Surface更新的正常调试日志,是系统级的流程记录。SIGUSR1 forcing GC是Flutter调试模式下触发的垃圾回收日志,属于调试环境的正常输出,发布版不会出现。
- 仅安卓12出现的原因:
安卓不同版本的系统调试日志输出策略不同,安卓12在视图更新、底层组件交互时增加了更多调试级别的日志输出,而安卓9的日志过滤更严格,所以不会显示这些内容。 - 优化日志查看的建议:
- 在Android Studio的Logcat中,通过过滤标签(比如只显示
Flutter、GETX标签)或者设置日志级别(比如只显示Warning及以上)来屏蔽这些系统日志。 - 发布版APK不会包含这些调试级别的日志,无需担心用户端出现此类问题。
- 在Android Studio的Logcat中,通过过滤标签(比如只显示
内容的提问来源于stack exchange,提问作者Flutter
相关产品推荐
相关产品推荐

