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

安卓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代码没有关系:

  1. 日志来源分析:
    • E/ion、D/hw-ProcessState类日志是安卓系统底层(ION内存管理、Binder进程通信)的调试信息,属于安卓12系统本身的输出,和Flutter代码无关。
    • D/ViewRootImpl、I/SurfaceView类日志是安卓视图系统在键盘弹出/收起时,处理界面重绘、Surface更新的正常调试日志,是系统级的流程记录。
    • SIGUSR1 forcing GC是Flutter调试模式下触发的垃圾回收日志,属于调试环境的正常输出,发布版不会出现。
  2. 仅安卓12出现的原因:
    安卓不同版本的系统调试日志输出策略不同,安卓12在视图更新、底层组件交互时增加了更多调试级别的日志输出,而安卓9的日志过滤更严格,所以不会显示这些内容。
  3. 优化日志查看的建议:
    • 在Android Studio的Logcat中,通过过滤标签(比如只显示Flutter、GETX标签)或者设置日志级别(比如只显示Warning及以上)来屏蔽这些系统日志。
    • 发布版APK不会包含这些调试级别的日志,无需担心用户端出现此类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:09:09