IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

移动开发

共 365 篇文章

IT 2016-04-02 12:56:48 / 累计浏览 3,343

Android流式布局实现

这篇讲的是如何从零开始,动手实现一个Android中常见的“流式布局”(也叫标签换行布局)。作者从实际项目需求出发,聚焦于自定义ViewGroup的两个核心回调:onMeasure()和onLayout()。 摘要里重点揭示了实现的关键:在onMeasure()阶段,需要遍历所有子控件,测量它们的宽高,并以此计算出控件自身需要的总高度。而在onLayout()阶段,则根据测量结果,逐个确定每个子控件的摆放位置。最核心的逻辑在于:程序会持续累加当前行子控件的宽度,一旦发现加上下一个子控件后会超出父控件的宽度,就会触发换行操作,将下一个子控件放到下一行的起始位置。 整个实现过程清晰展示了ViewGroup如何协调测量与布局来完成复杂的子控件排列。通过理解这段代码,开发者能掌握自定义布局的基本原理,为实现更灵活的UI控件打下基础。

本机暂存
IT 2016-03-31 22:23:20 / 累计浏览 2,692

EventBus 源码解析

这篇深度技术文章剖析了Android开发者常用的事件总线框架EventBus的内部工作原理。作者从Event、Subscriber、Publisher这些核心概念入手,逐步解析了EventBus的注册订阅与事件分发机制。 文章通过清晰的类关系图和核心类功能介绍,揭示了EventBus内部如何通过subscriptionsByEventType这个核心数据结构,高效地实现事件到订阅者的匹配。同时,详细说明了post事件后,EventBus如何根据订阅者声明的ThreadMode(如PostThread、MainThread、BackgroundThread、Async),智能地决定是在当前线程、主线程还是异步线程中执行事件处理函数,确保了线程安全。 对于想深入理解Android消息机制和组件解耦实践的开发者,这篇文章提供了一个关于如何设计一个优雅、高效的发布-订阅系统的清晰实现思路。

本机暂存
IT 2016-03-31 22:20:49 / 累计浏览 3,266

Android应用内多进程的使用及注意事项

这篇讲的是 Android 应用内为何以及如何使用多进程。作者从解决主进程内存压力问题出发,指出当应用处理大图片或频繁绘制时容易 OOM,仅靠 `largeHeap` 增加堆内存只是权宜之计,会影响整机效率。因此,引入了多进程方案:通过在 AndroidManifest.xml 中为组件设置 `android:process` 属性,将特定页面(如视频播放)放入独立进程,以分担主进程内存压力。 文章重点分析了使用多进程后会遇到的“坑”。由于每个进程拥有独立的内存空间,会导致三大核心问题:一是断点调试失效,堆栈不连续,通常需要临时移除 `process` 属性来调试;二是 Activity 管理逻辑(如通过 LinkedList 全局退出应用)失效,因为每个进程会独立运行 Application 的 onCreate;三是进程间无法共享内存,通信和数据共享必须借助 Bundle、AIDL 或文件等跨进程机制。 文章最后指出,虽然多进程能缓解内存问题,但这是一种“下下策”,根本之道还是在于做好应用的性能优化。

本机暂存
IT 2016-03-30 16:03:47 / 累计浏览 1,437

React Native for Android Windows环境搭建

这篇讲的是在Windows系统上从零搭建React Native Android开发环境的完整流程。作者从安装JDK、Android Studio和Node.js等基础工具开始,详细说明了通过npm安装react-native-cli的正确命令,并特别指出直接安装react-native可能导致后续init项目报错。 文中不仅列出了步骤,还穿插了常见问题的解决方案,例如升级Node版本以应对npm安装失败,或设置环境变量来修复命令识别错误。在安卓环境配置部分,强调了检查SDK完整性的重要性,并附有截图指引。 最后,文章通过创建HelloWorld和HelloAndroid两个项目,演示了从运行构建命令到配置设备调试的全过程。特别是解决了React Native经典红色报错页面的方法——启动本地服务器后,通过摇晃手机配置调试服务器地址(如192.168.x.x:8081)并Reload JS,即可成功加载应用。对于想在PC上快速上手React Native移动开发的读者,这是一份非常实用的避坑指南。

本机暂存
IT 2016-03-30 12:11:13 / 累计浏览 3,145

一张图帮你看懂 iPhone 的屏幕分辨率

这篇讲的是 iPhone 6 Plus 屏幕分辨率的一个常见困惑。作者从官方标称的 1920×1080 与 Xcode 模拟器显示的 2208×1242 这一“看似奇怪”的差异出发,借用一张清晰的信息图,直观拆解了其中的技术细节。 关键差异在于,2208×1242 是屏幕实际需要渲染的物理像素,而 1920×1080 是最终输出时经过缩小处理的结果。文章引用 Stack Overflow 上的解答点明了核心原因:为了让切图的放大倍数(如 @3x)和实际渲染像素都能保持为整数,系统选择了将 2208×1242 缩小约 17% 来得到标准的 1920×1080 输出。 这个解释清晰地说明了 iOS 屏幕适配中“逻辑点”与“物理像素”之间的映射关系,对于理解 Retina 显示和多分辨率适配原理很有帮助。

本机暂存
IT 2016-03-29 23:36:39 / 累计浏览 2,062

探索react native首屏渲染最佳实践

这篇讲的是React Native应用如何通过一系列实战优化,将首屏渲染耗时从接近原生体验的770ms大幅降低,以逼近原生100ms左右的表现。 文章首先定义了首屏耗时的计算方式,作者发现初始渲染耗时高达约700ms。核心优化分为三步走:首先,引入AsyncStorage缓存数据,让渲染不再完全依赖网络请求,这一步将耗时直接腰斩至400ms。接着,针对轮播图组件进行重构,摒弃全量创建所有图片视图的做法,改为复用单一视图并动态切换图片URL,既减少了渲染开销,也降低了内存占用。整个过程逻辑清晰,从度量问题、定位瓶颈到分模块实施优化,每一步都配有清晰的原理图和效果数据。最终,文章展示了一个从发现问题到动手解决,并取得显著性能提升的完整优化案例。

本机暂存
IT 2016-03-24 17:24:13 / 累计浏览 3,048

Android的Handler机制原理

Android开发中,UI线程阻塞和线程安全是两大经典难题。这篇文章从问题根源讲起:主线程负责UI交互和事件分发,一旦执行耗时操作就容易引发ANR,而子线程又不能直接更新UI。为了解决这个“两难”境地,Android引入了Handler机制作为线程间通信的桥梁。 文章核心梳理了Handler的工作流:子线程将耗时任务处理完成后,通过Handler将Message或Runnable发送到主线程的MessageQueue中;主线程则依靠Looper无限循环地取消息,再交回Handler的handleMessage方法处理,从而安全地更新界面。作者通过两个清晰的代码案例(sendMessage与postDelayed)展示了具体实现,让理论立刻落地。 整体上,这是一篇扎实的源码原理剖析。它不仅解释了Handler“是什么”,更紧扣“为什么需要”这个设计背景,将消息队列、循环器、消息对象这几个核心组件的协作关系讲得透彻明了,对于想深入理解Android异步消息处理机制的开发者来说,是一份逻辑清晰的参考资料。

本机暂存
IT 2016-03-24 16:42:03 / 累计浏览 4,316

ReactNative Animated动画详解

这篇讲的是ReactNative中Animated动画的实际应用。作者从一个简单的淡入动画示例入手,展示了如何通过Animated.Value设定初始透明度,结合Animated.timing配置时长和缓动函数,让文字“悄悄的,我出现了”逐渐显示。 文章将实现步骤拆解为五个关键环节:使用Animated包裹的View/Image/Text组件、初始化数值、绑定动画属性、配置动画参数以及启动动画。特别提醒开发者务必使用Animated组件,否则会得到难以排查的报错——这个细节对新手很实用。 代码示例中的注释风格轻松,但背后是清晰的动画构建逻辑。作者最后也指出,基础渐显只是入门,更多组合动画技巧需要参考原文获取完整方案。整体上,这篇文章适合刚接触ReactNative动画的开发者,能快速建立实现路径的心智模型。

本机暂存
IT 2016-03-23 23:32:09 / 累计浏览 2,551

Android 三大图片缓存原理、特性对比

这篇技术分析深入对比了 Android 开发中三大经典图片缓存库:Universal ImageLoader、Picasso 和 Glide。作者从源码出发,剖析了它们的整体设计流程与核心模块,如 ImageLoader 的引擎、Picasso 的调度器、Glide 的生命周期管理等,并提炼出多级缓存、高可配置性等共同优点。 文章重点在于揭示三者的关键差异:ImageLoader 以功能全面和缓存算法多样见长;Picasso 背靠 Square 生态,具备流量监控和智能网络适配,但本地缓存依赖 OkHttp;Glide 则更像媒体缓存,它深度整合 Android 生命周期,并在内存管理上做了精巧优化(如 ActiveResources 计数和缓存缩略图),默认使用 RGB_565 格式以节省内存。 通过这种从原理到特性的系统对比,文章为开发者提供了清晰的选型参考:ImageLoader 适合需要高度定制化和传统方案的项目;Picasso 在追求代码简洁与网络状态感知的场景中表现出色;而 Glide 凭借其“内存友好”特性和对生命周期的良好支持,尤其适合界面频繁刷新、媒体类型复杂的应用。

本机暂存
IT 2016-03-23 17:25:14 / 累计浏览 3,716

微信收费事件背后被广泛忽略的技术细节

这篇讲的是当年微信与运营商“对峙”背后,那些被忽视的技术账。 作者从通信和互联网两个行业的“隔阂”切入,指出双方都在“互防”,而用户承受了后果——手机耗电快、网络信令压力大。他提供了一个关键对比:Google的PUSH心跳周期在正常网络下可达28分钟,但在中移动2.5G网络上,因为空闲5分钟连接就会被释放,微信Android版被迫缩短到5分钟。这意味着你的手机每天要被唤醒近300次来“续命”,耗电15%以上只是表面问题。 更深层的症结在于:由于谷歌服务在国内不可用,每个App都得独立维护一条PUSH“长连接”,信令风暴和耗电是成倍增加的。这本质上是运营商2G网络为应对IP流量做了“聪明反被聪明误”的限制定制,而互联网行业只能在TCP层上打补丁,无法用到通信层更高效的“天然PUSH通道”。 文章最终指向一个出路:与其互相掣肘,不如让运营商开放信令通道,以“免费+增值服务”的模式,同时解决三方的痛。这或许比单纯争论“该不该收费”更能推动行业走向共赢。

本机暂存
IT 2016-03-23 15:39:08 / 累计浏览 1,953

滚动定位在移动端的研究

这篇文章聚焦于移动端一个常见却棘手的体验问题:滚动定位。 作者首先回顾了传统的滚动监听实现思路——通过比较滚动位置与目标元素的偏移量,动态切换 `fixed` 定位。但在实际移动端场景中,由于系统自带的滚动缓冲和惯性效果,这种 JS 方案会导致吸附效果生硬、延迟,体验并不理想。 文章的转折点来自对京东商品页的观察,其流畅的吸附效果启发作者去探究背后的实现。通过分析源码,作者发现了关键:优先使用 CSS3 的 `sticky` 定位属性。`sticky` 完美融合了相对定位与固定定位的优点,能让元素在滚动出视窗时平滑地“粘”在屏幕边缘,这正是理想的吸附体验。 因此,核心的解决方案是特性检测与分级回退:优先使用 `sticky` 这种声明式、性能更优的方案;仅当浏览器不支持时,才退回至传统的 JS 监听方案。作者通过在线 demo 的直观对比,清晰地展示了 `sticky` 在移动端带来的显著体验提升——过渡丝滑,接近原生。对于移动端开发者而言,这篇文章清晰地指出了问题根源,并给出了一套实用、高效的现代解决方案。

本机暂存
IT 2016-03-23 15:02:45 / 累计浏览 4,186

Android最方便的推送框架

这篇讲的是如何打造一个对Android开发者更友好的推送库,目标是让一个人就能完成推送功能的集成,摆脱对复杂服务器端配合和漫长测试的依赖。作者从现有推送方案的痛点出发,深入剖析了Push与Pull两种模式的底层原理、适用场景及资源消耗差异。他选择基于轮询(Pull)模式来实现,并指出了直接使用定时器可能带来的系统回收风险,转而采用AlarmManager来更稳健地调度任务。文章的核心不仅在于代码实现,更在于一套完整的优化策略:根据网络状态动态调整轮询频率,在屏幕熄灭后适时停止请求以节省电量与流量,并探讨了如何让后台服务更持久地存活,尽管在面对某些定制化系统时仍存在挑战。作者最后坦诚分享了在服务持久化问题上的探索与局限,为同样面临此难题的开发者提供了思路。

本机暂存
IT 2016-03-23 14:27:18 / 累计浏览 2,220

Android设置应用内文字的默认颜色和大小

这篇文章解决了一个 Android 开发中常见的主题适配问题:当未显式设置 TextView 或 Button 的文字颜色时,切换应用主题会导致文字颜色意外改变;另外,若想调整 Toast 的文字大小,通常需要重写其内部实现,颇为繁琐。 作者从 Android 主题继承机制出发,提出了一种简洁的方案:在项目的 `styles.xml` 中为应用主题(如 `AppTheme`)直接定义 `android:textSize` 和 `android:textColor` 属性,并在 `AndroidManifest.xml` 中引用该主题。这样,所有未单独设置文字样式属性的 View,都会自动继承主题中指定的颜色和大小,包括 Toast。 这个方案的核心在于利用主题的全局覆盖特性,以最小代码成本统一了应用内文字的默认视觉表现,避免了在每个 View 上重复定义或处理意外的主题变更。需要注意的是,该设置仅作为默认值生效,如果某个 View 已经通过代码或 XML 明确指定了文字颜色或大小,将优先采用其自身设置。

本机暂存
IT 2016-03-23 13:54:21 / 累计浏览 2,133

提升进入界面的速度

这篇讲的是如何让Android应用的界面跳转变得更流畅。作者从一次实际的APP优化项目出发,指出一个常见的性能痛点:点开一个新页面却要等上几百毫秒,这种迟滞感虽然不会触发异常,却严重影响用户体验。 文章的核心方案非常清晰,即针对Activity生命周期中耗时的onPause和onCreate阶段进行优化。作者总结了四个具体的优化方向:对IO等耗时任务使用AsyncTask或Handler进行异步处理;精简布局文件层级,并对非首屏视图大胆使用ViewStub进行延迟加载;将动画、特定字体等资源初始化推迟到真正需要时;以及谨慎使用应用内多进程,因为进程创建本身就很耗时。 文章特别强调了两个容易踩坑的地方:一是像AnimationDrawable这样的资源既耗时又耗内存,初始化时机至关重要;二是不要迷信通用技巧,一切优化都要以实际测量数据为准。最终,持续的性能度量与分析,是保证界面流畅体验的关键。

本机暂存
IT 2016-03-23 13:52:50 / 累计浏览 1,588

Android各个Support Library介绍

这篇系统梳理了Android开发中不可或缺的Support Library。它开篇厘清了主工程、依赖包与android.jar的关系,解释了为何需要将新API封装成独立支持库——以便在不更新系统的情况下,让低版本设备也能用上高版本功能。 文章的核心是逐一介绍了从V4到V17的各个支持库。V4库最为基础和关键,它为Android 1.6及以上系统带来了Fragment、ViewPager、NotificationCompat等组件。V7库则针对Android 2.1及以上系统细分出多个模块,其中appcompat库让低版本实现Holo风格界面,而RecyclerView、CardView、Palette等库则提供了更现代的UI组件和功能。此外,还介绍了用于解决方法数超限的Multidex库、针对电视设备的v17 Leanback库,以及支持百分比布局的Percent库等。 对于开发者而言,这篇文章像一份清晰的地图,明确了在不同API Level需求下应该选择哪个支持库,以及每个库的核心能力,帮助解决碎片化兼容难题。

本机暂存
IT 2016-03-23 13:49:01 / 累计浏览 4,012

移动端网络优化

这篇讲的是如何系统优化移动端的网络请求性能,覆盖 Android、iOS 和 H5。作者将整个过程拆解为连接服务器和获取数据两个阶段,并针对每个阶段提出了具体可行的优化策略。 在连接阶段,文章重点介绍了跳过 DNS 解析的 IP 直连方案,以及通过服务器多地域、多运营商部署来缩短物理链路距离。在数据获取阶段,则详细拆解了从开启 Keep-Alive 复用连接、合并请求,到对请求和响应数据进行 Gzip 压缩、使用更精简的格式(如 JSON 替代 XML、WebP 替代传统图片)等一系列手段。此外,文章还探讨了利用 CDN 缓存、实施增量更新与断点续传等高级策略。 除了这些核心方案,文中也提到了预取、分优先级延迟请求以及多连接等补充优化思路,并强调了数据监控在验证优化效果中的必要性。整篇文章从原理到实践,为开发者梳理了一套从客户端到服务端的移动端网络性能调优实用指南。

本机暂存
IT 2016-03-22 22:46:00 / 累计浏览 1,305

快速决策方案 —— Airtrack

这篇讲的是原生应用如何找回“唯快不破”的决策节奏。在Native App上,动态化能力弱导致产品决策验证周期长,团队容易陷入追求“不出错”而忽略“有意义”的困境。为此,天猫团队打造了名为AirTrack的试错平台。 平台的核心是一套以A/B测试为基础、可在端上实时运行的SDK。它通过一个可动态配置的“实验条件树”来决定分桶逻辑,并支持数据埋点与分析。这种设计绕过了依赖后端数据API的传统模式,实现了代码级的、灵活的端上实验。 文章分享了三个实际应用:用于配置安全发布的灰度策略,将原本跨版本的首页坑位优化决策缩短到一周内完成的对比测试,以及实现个性化弹窗的创新玩法。这套体系帮助团队能够快速验证想法并及时修正,让应用开发重新灵动起来。

本机暂存
IT 2016-03-22 22:36:06 / 累计浏览 2,159

Android夜间模式实现

这篇讲的是如何利用Android的Theme机制,相对简单地实现夜间模式切换。作者从一个实际需求出发,通过一个小Demo演示了核心步骤。 核心思路是先在`res/values`中定义自己的属性名(比如背景色),然后为日间和夜间模式分别创建主题样式文件,为这些属性赋予不同的值。在布局文件中,控件通过`?attr/属性名`来引用这些值,而不是直接写死颜色。 实现动态切换的关键在于代码逻辑:在Activity中通过`setTheme()`方法切换主题,并且一定要在调用`setContentView()`之前执行。对于已经显示的界面,作者提供了一个简洁的刷新方法:直接调用`recreate()`重建Activity即可应用新主题,省去了手动重设所有视图的麻烦。 文章没有堆砌理论,而是聚焦于“定义属性 -> 创建主题 -> 引用属性 -> 动态切换”这条实用路径。最后也提醒了几个实现细节,比如自定义主题必须继承系统Theme以避免报错,确保切换过程流畅。

本机暂存
IT 2016-03-22 22:20:57 / 累计浏览 1,480

Android APP内存优化之图片优化

这篇讲的是作者在开发一款小学教育APP时,面对高分辨率设备上图片内存占用过大的实际挑战。在2K屏(2048×1536)上,单张背景图就能消耗12MB内存,频繁切换页面导致内存飙升至百兆级别。文章聚焦于这一痛点,分享了几项针对性的图片内存优化实践。 作者首先发现一个容易被忽视的细节:为Button设置selector背景会同时加载正常与按下两张图片,导致内存占用翻倍。解决方案是通过监听触摸事件动态切换背景,或使用setColorFilter实现反选效果,既节省内存也减小APK体积。其次,针对绘制大背景图时的界面卡顿问题,作者提出将背景绘制任务移至非UI线程,通过自定义的RootSurfaceView在SurfaceFlinger中完成渲染,从而避免阻塞主线程,提升了APP的流畅度。 这些方法均源于实际项目中的摸索,虽未深入底层原理,但提供了清晰、可落地的优化思路,特别适合处理图片密集型应用的内存与性能平衡问题。

本机暂存
IT 2016-03-22 22:16:22 / 累计浏览 1,606

Android性能测试工具列表

这篇文章系统梳理了Android开发中从启动、内存到帧率检测的各类性能工具。它不只罗列名称,而是解释了每个工具的核心用途和适用场景。 比如,通过adb命令行可以精确测量应用冷启动时间,其中“thisTime”仅反映当前Activity启动耗时,而“totalTime”则包含从搜索到启动的整个过程。对于内存问题,工具各有侧重:讯飞的iTest和Android Studio内置的内存监控能实时观察内存状态,识别泄漏与抖动;而LeakCanary则需集成到代码中,通过触发GC来主动捕获内存泄漏的详细堆栈。 文章还提及了腾讯的GT、网易的Emmagee等移动端一体化测试平台,以及如何利用Android 5.0以上系统原生的开发者选项进行性能剖析。最后,推荐了多个专注于Android性能优化的专业博客和Google官方的最佳实践指南,为读者提供了深入学习的方向。 这篇清单为开发者提供了一个从粗粒度监控到深度诊断的工具选择地图,帮助大家根据测试阶段和具体问题,找到最合适的“武器”。

本机暂存