Android开发-差点儿被Logcat骗了,用Logcat输出一行有长度限制,用递归方式封装一个Logcat工具类

安卓UI设计不是审美问题,而是系统级性能工程 在Android平台,UI设计本质上是系统资源调度与渲染管线的工程实践。它根植于Choreographer帧同步、View测量布局机制、Material You动态色谱等底层原理,直接决定App是否触发ANR、是否被Play Store降权、是否在低端机上存活。技术价值体现在将设计语言转化为可量化指标:首屏渲染≤1.2s、交互响应≤100ms、暗色模式100%属性驱动。典型应用场景包括启动页毫秒级控制、ConstraintLayout深度优化、Coil内存策略调优及Systrace火焰图定位伪卡顿。本文聚焦 阅读详情

问题描述:

最近,调试一个程序,差点儿被一个简单的Logcat日志蒙蔽了双眼。

过程是这样的:在代码中,用Log.i(TAG, msg)来输出msg的信息。输出的结果却只输出了前面一部分,后面的字符没有输出来。

代码如下:

Log.i(TAG,"[log output]=========len:" + msg.length());
Log.i(TAG,"[log output]=========data:");
Log.i(TAG,msg);

输出结果如下: 

[log output]=========len:5400
[log output]=========data:
第三行:1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvwxyz
......
1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqrstuvw 

//第三行输出了4065个字符

原来是因为对msg的读写长度有限制,对于这个限制,源码是这样定义的:

在system/core/include/cutils/logger.h头文件中,有:

#define LOGGER_ENTRY_MAX_PAYLOAD    4076

/*
 * The maximum size of a log entry which can be read from the
 * kernel logger driver. An attempt to read less than this amount
 * may result in read() returning EINVAL.
 */
#define LOGGER_ENTRY_MAX_LEN      (5*1024)

而在logcat.cpp中,有

static void readLogLines(log_device_t* devices)

函数的定义:

static void readLogLines(log_device_t* devices)
{
    ......
    
    while (1) {
        ......

            /* NOTE: driver guarantees we read exactly one full entry */
            ret = read(dev->fd, entry->buf, LOGGER_ENTRY_MAX_LEN);
    }
    ......
}

用递归方式实现msg的输出:

那么,为了正确输出全部的msg,就封装了一个Logcat工具类,用递归方式实现msg的输出。

我们设定每行最多输出1024*3长度的字符。

代码如下:

    //LogUtil.java
    private final static int LogUtilMaxLen = 1024*3;
    public static void printMsg(String msg) {
        if (TextUtils.isEmpty(msg)) {
            return;
        }
        if (msg.length()<=LogUtilMaxLen) {
            Log.i(TAG,msg);
            return;
        }

        String subStr = msg.substring(0,LogUtilMaxLen);
        Log.i(TAG,subStr);
        String nextStr = msg.substring(LogUtilMaxLen);
        
        //递归调用
        printMsg(nextStr);
    }

printMsg就是递归函数。


Android Studio 深度集成 DeepSeek:从运行时注入到语义补全 大语言模型(LLM)在 IDE 中的智能编程能力,正从简单 API 调用迈向深度运行时协同。其核心原理在于绕过插件层限制,在 IntelliJ Platform 的 PSI(程序结构接口)层面实现语义感知与上下文动态提取,而非将 IDE 当作 HTTP 客户端。技术价值体现在低延迟(320ms 端到端)、高确定性(编译级代码生成)与强稳定性(Java Agent 字节码注入)。典型应用场景包括 Kotlin 代码实时补全、单元测试自动生成、NPE 错误自动修复等工程化交付任务。本文聚焦 Android St 阅读详情

相关推荐

B站Android校招笔试卷解析:基础原理与性能优化考点全拆解

在Android开发中,扎实的Java基础功底是理解集合、并发与内存模型的前提,而掌握Handler、Binder等核心机制则决定了能否真正理解系统运行原理。这些知识不仅是日常编码的基石,更是应对大厂校招笔试的关键能力。从进程通信到四大组件,从内存泄漏到布局优化,每个考点背后都隐藏着可深挖的技术树。对于准备技术岗笔试的开发者而言,系统梳理知识体系、理解底层设计逻辑,远比机械刷题更重要。本文以B站Android校招笔试卷(二)为切入点,拆解高频考察模块与易错细节,帮助开发者从原理层面打通Android知识脉络

weixin_28273593的博客 272

关于android 中打印日志;关于手机不打印日志信息

经过查询才得知,Android系统的单条日志打印长度是有限的,在底层Logger驱动程序的一个类Logger.h头文件中有如下两行代码:#define LOGGER_ENTRY_MAX_LEN (4*1024) #define LOGGER_ENTRY_MAX_PAYLOAD \\ (LOGGER_ENTRY_MAX_LEN - sizeof(struct lo...

一站到底s的博客 1914

第 18 章:ART 运行时

Android运行时(ART)是Android应用的执行环境,负责加载和执行DEX字节码。ART通过多层级编译策略(解释器、JIT、AOT)和并发垃圾回收(如CC和CMC收集器)优化性能。关键组件包括类链接器、dex2oat编译器、JIT编译器和内存管理系统。ART支持模块化更新,并通过配置文件引导优化(PGO)提升应用性能。调试能力基于JVMTI,提供断点、类重定义等功能。Android 17引入了多项改进,如分代标记-压缩GC、禁止反射修改static final字段、DEX容器格式V41等。ART架构

dengfuma的专栏 283

Android中Logcat日志打印不全解决办法

转自:http://www.jianshu.com/p/9fcdda2d6b7d 在开发中我们常常会打Log来调试程序,但有时候打印的信息长度非常长,比如我们想打Log查看接口返回的json数据,而这个json数据非常大时,这时Logcat会出现打印不全的情况。 原因 Android系统对日志长度有限制的,最大长度为4K(注意是字符串的长度),超过这个范围的自动截断,所以

9553

Android BLE通讯Demo:扫描连接、数据收发与分包解包实战

蓝牙低功耗(BLE)技术凭借低功耗、低成本的优势,已成为物联网、智能硬件、运动健康等领域的核心通信方式。在Android平台上进行BLE开发,开发者首先需要理解GATT(通用属性协议)体系下的服务与特征值模型,掌握设备扫描、连接、服务发现等基础流程。而步入实际工程时,MTU(最大传输单元)限制是绕不开的关键点:Android默认MTU为23,扣除ATT头部后单包仅能承载20字节,因此大数据的可靠传输必须依赖MTU协商与分包/解包协议。本文从Android BLE通信链路出发,梳理系统API调用、权限适配、串

weixin_42639246的博客 276

解决Android Studio日志太长或滚动太快问题

前言 安卓开发经常遇到那种日志太长或滚动得太快, 我们直接的解决办法就是进行日志输出长度增大和添加日志过滤器,个人推荐用adb logcat处理更加方便灵活。 解决办法 1. 搜索过滤器 2. 修改日志缓冲大小 找到 ” Android Studio安装目录\bin\idea.properties” 文件中的 idea.cycle.buffer.size=1024 修改成你要的缓冲大小即可。 3. adb logcat 输出日志到指定文件(不能解决日志过长的问题) i. 配置adb环境变量 ii. 打开cmd,修改cmd编码(默认编码是GBK) win+r -> 输入:cmd + enter

【我的Android进阶之旅】Android Studio查看Logcat时,如果一行Log太长如何换行显示?...

使用Android Studio一段时间了,还有很多小技巧没有掌握。今天又发现了一个比较好用的小技巧,这里分享出来。 1、Android Studio默认显示效果 比如我们用Logcat来查看打印的Log时候,有时候一行的内容太多的话,Logcat窗口并不会自动换行排版,而是默认一行显示,这样我们查看log内容的...

weixin_33768481的博客 1185

python数据处理(一)——如何用python实现excel功能

python如何实现excel的数据提取、指标构建,进行透视分析。

一名数据分析师 2705

Android中logcat长度超出上限处理方法

使用Log打印出日志信息,发现输出的日志信息超出了上限,没有打印完整。经查发现,Android系统的单条日志打印长度是有限的,长度是固定的4*1024个字符长度。所以这里我们可以对输出的信息进行分段处理,以保证输出足够的长度。

Sahara_Savage 2万+

超螺旋滑模控制(STA)

超螺旋滑模控制又称超扭滑模控制,可以说是二阶系统中最好用的滑模控制方法。

Lyajpunov的博客 1万+

硬件笔记——HDMI接口

HDMI可以同时传输视频信号、音频信号和控制信号。其中高速信号有四组:从Data TX到Data RX有3组差分数据信号(TMDS_DATA0~2)和一组差分时钟信号(TMDS_CLOCK)。以及若干低速线。脚编号信号名称信号类型功能说明1热插拔检测连接状态检测。接收端通过此引脚向源端发送高电平信号,通知其已连接并可以开始读取EDID。2UTILITY车载用途悬空3TMDS数据通道2差分信号正极,用于传输视频像素、音频和数据包。4TMDS数据2屏蔽。

2501_94625908的博客 543

网易校招Android提前批笔试全解析:考点、题型与备考策略

在Android开发岗位的校招流程中,笔试往往是第一道硬门槛,它不仅考察Java基础与语言特性,更检验对Android核心机制如Handler、Binder、View绘制流程的深度理解。从技术价值来看,扎实的笔试准备能帮助开发者系统梳理知识体系,提升工程实践与问题排查能力,而这些正是大厂选拔人才的关键维度。在秋招或提前批场景下,掌握HashMap、并发编程、Activity启动模式等高频考点,配合算法题的刷题策略与ACM输入输出技巧,能显著提高通过率。本文基于网易校招Android提前批的真实笔试题型与经验

weixin_29189363的博客 347

【芯片驱动】2. CMT2300A配合硬件测试(灵敏度和发射功率)的软件实现

前言 在开发一款无线射频产品的时候,软件是一部分,硬件也是一部分。而决定无线收发性能的,首先是硬件的匹配电路,然后才到软件部分的优化。 一款无线射频产品,首先需要先决定是在那个频率范围内(当然是国家允许的范围内),然后硬件则需要在基于这个频点范围进行硬件的参数匹配,具体又分为发送功率匹配、天线匹配、和接收灵敏度的匹配。 现在我们使用2300a这款无线芯片来说,除非自己的团队是射频专家,则可以自己进行无线外围电路的设计外,另外一种更加快捷的方式,就是寻找原厂技术支持,他们会给...

sishuihuahua的博客 7055

Unity VR开发入门:从环境搭建到核心交互实现

虚拟现实(VR)开发的核心在于构建沉浸式的三维交互体验,其技术原理基于对用户头部、手部运动的精确追踪与实时渲染。在工程实践中,选择成熟的开发引擎能大幅降低技术门槛,Unity引擎凭借其完善的组件化架构和成熟的XR交互框架,成为快速实现VR原型开发的首选。XR Interaction Toolkit作为Unity官方的VR/AR交互解决方案,将复杂的手柄控制、物体抓取、空间移动等交互逻辑抽象为可配置的组件,开发者无需从底层处理输入数据,即可快速搭建基础的抓取、瞬移等交互功能。这种开箱即用的特性,尤其适合需要快

anchang7456的博客 413

GPS从入门到放弃(十七) --- 对流层延时

GPS从入门到放弃(十七) — 对流层延时 对流层概念 对流层(Troposphere)地球大气层靠近地面的一层。它同时是地球大气层里密度最高的一层,它蕴含了整个大气层约75%的质量,以及几乎所有的水蒸气及气溶胶。 对流层的下界与地面相接,上界高度随地理纬度和季节而变化,在低纬度地区平均高度为1718公里,在中纬度地区平均为1012公里,在高维度地区平均为8~9公里,并且夏季高于冬季。 卫星导航...

tyst08的专栏 1万+

基于STM32、HAL库的TLV320AIC3204IRHBR音频接口芯片驱动程序设计

* 开启所有数字部分 */#define TLV320AIC3204_REG_LEFT_HEADPHONE_OUT_VOLUME 0x0C /* 左声道耳机输出音量 */#define TLV320AIC3204_REG_DIGITAL_AUDIO_PATH_CONTROL 0x05 /* 数字音频路径控制 */#define TLV320AIC3204_REG_ANALOG_HP_FILTER_CONTROL 0x34 /* 模拟耳机滤波器控制 *//* 最大音量 */

corlin6688的博客 522

货拉拉2018秋招Android笔试题全解析:考点梳理与备考指南

在Android开发者的面试准备中,集合框架与消息机制是两大核心基础。理解HashMap的底层数据结构、扩容机制与线程安全问题,掌握Handler的Looper-MessageQueue工作原理,是区分“会用”与“懂原理”的关键。这些知识点不仅频繁出现在一线互联网公司的笔试题目里,更直接关系到日常开发中的内存管理、性能优化与稳定性治理。从Java基础到Android系统机制,从网络框架选型到图片加载缓存策略,系统化梳理这些高频考点,有助于构建完整的知识体系。以货拉拉2018秋招Android笔试题为蓝本,逐

weixin_28684825的博客 336

在 SAP S/4HANA Cloud Public Edition 中掌控 ABAP 生命周期管理:One-Off、Multi-Off 与 Scalable Delivery 的落地方法论

本文系统梳理了SAP S/4HANA Cloud Public Edition中ABAP扩展开发的三种生命周期管理模式:One-Off适用于企业内部扩展,通过Import Collection在三系统间流转;Multi-Off面向少量客户交付,基于gCTS和Git实现不连接系统间的传输;Scalable Delivery则将扩展产品化为add-on,支持规模化分发。文章结合RAP、OData等实际开发场景,对比分析了各模式的特点与适用边界,为国内团队提供了符合Public Cloud要求的开发与交付实践建议

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1496

补充篇 9.1:Ktor Logging 深入:Header、Body 脱敏与自定义 Logger

setOf("token","secret","apiKey",phoneidCardbankCard只需要继续增加。不过哪些字段应该完全隐藏、哪些应该部分掩码,要根据实际业务和合规要求设计。Logger三者不是一回事。↓↓│├── level├── filter└── format↓安全日志内容↓Logger/ \↓ ↓↓↓负责 Header 日志脱敏bodyFilter↓负责 Request / Response Body如何进入日志↓。

Mark Wu 的博客 261

PyQt5开发编译器安装(PyCharm安装)

PyCharm 提供了最完整的 PyQt5 开发体验,特别是其集成的调试工具和 Qt Designer 支持,能显著提高开发效率。是最受欢迎和功能最完整的 IDE。它专门为 Python 开发优化,对 PyQt5 有很好的支持。右键运行该文件,如果出现窗口说明配置成功。对于 PyQt5 开发,

啊渊的专栏 419

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Unity视频播放优化:AVProVideo插件核心原理与全平台部署指南

视频编解码与渲染是多媒体应用开发中的基础技术,其核心原理在于通过特定算法压缩视频数据,并在运行时高效解码还原为可视画面。在游戏引擎和交互应用领域,视频播放性能直接影响用户体验,尤其在移动端和VR/AR等高要求场景中。AVProVideo作为Unity生态中的高效视频播放解决方案,通过调用各平台原生媒体框架实现硬件解码,显著降低了CPU占用和内存开销,解决了内置Video Player组件在**高分辨率视频**播放和**跨平台兼容性**方面的常见痛点。该技术方案适用于产品展示、教育应用、沉浸式体验及数字孪生等

weixin_30291791的博客 404

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

逆向分析工具指南:从静态反编译到动态调试的9款核心利器

逆向工程是软件安全分析、漏洞挖掘和恶意代码研究的核心技术,其核心原理在于通过静态与动态分析技术,深入理解程序的内部逻辑与行为。静态分析在不运行程序的情况下,通过反汇编和反编译技术,将二进制代码转换为可读的中间表示或伪代码,从而进行全面的代码审计与逻辑梳理,其技术价值在于提供安全、全局的程序视图。动态分析则让程序在受控环境中运行,通过调试、插桩和行为监控来捕获运行时状态与数据流,对于理解复杂逻辑、破解加密算法至关重要。在实际的网络安全、软件审计与移动应用分析等应用场景中,高效的工作流往往需要静动结合。本文聚焦

weixin_34008805的博客 416

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

软件测试面试:从理论到实战的思维跃迁与高频考点解析

软件测试是保障软件质量的关键环节,其核心在于通过系统化的方法验证软件行为是否符合预期。从测试生命周期、黑盒白盒等基础方法,到功能、性能、安全等测试类型,构成了完整的质量保障体系。掌握这些原理能高效发现缺陷,其技术价值在于提升交付效率与产品可靠性。在Web、App等应用场景中,测试人员需将理论转化为解决实际问题的能力。本文聚焦软件测试面试,深入剖析面试官考察的**解决实际问题的思维过程**与**知识体系完整度**,通过解读高频问题背后的意图,帮助候选人完成从背题到解题的思维转变,从容应对从用例设计到缺陷排查等

weixin_30301449的博客 545

【adb】logcat输出设置文件大小,并设置文件格式

logcat

wangjicong_215的博客 2087

[Android Studio]Log调试信息的输出&信息过滤器

1.以Log.v为例:在java中写入Log.v(String tag, String msg)。 tag表示的是打印信息的标签,msg表示的是需要打印的信息。 2. 最下方点击Logcat 3.Log.v输出选择Verbose,为了方便查看输出可以在后面的搜索框里输入一些关键词。 或者添加一个信息过滤器来筛选 (1)点击如图所示位置 (2)Filter Name为过滤器起的名字 在下方输入你想过滤出的Tag、Message等信息的条件。 (3)点击OK,过滤器就设置好了。 1、Log.v(S

Hayleyzhou的博客 8258
上一篇: Android开发-Android uri使用一例:一个app启动另外一个app,以及使用PackageManager中getLaunchIntentForPackage来进行App的信息的获取
下一篇: Android源码分析-logcat源码分析,以及main,radio,system等log文件,包括select的多路复用的运用
liranke
博客等级 码龄20年 4939粉丝 594原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liranke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值