![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android开发
文章平均质量分 92
SEU_Calvin
慢慢来,才会更快。
展开
-
Android开发——APP ANR治理
ANR(Application Not Response)指应用程序无响应,通常出现在主线程被阻塞时,并伴随ANR弹窗出现。ANR的治理难点是不像Crash一样有崩溃日志,定位问题比较困难,但是ANR带来的用户体验是极差的,是必须要解决的问题。原创 2023-01-04 10:04:24 · 7474 阅读 · 1 评论 -
移动端开发——APP端上H5容器化建设
在现阶段APP中,H5页面承接了越来越多的业务,然而H5页面在用户体验和研发效能上均存在一些亟待解决的问题。为此,APP移动端团队通过H5容器化建设,系统性的总结出了一套解决方案。原创 2022-12-05 14:28:19 · 12119 阅读 · 0 评论 -
Android开发——如何解决三方库中的类名冲突问题
对三方库混淆是业内常见的一种做法, 但是如果在我们的Android工程中同时引入了两个三方库, 且都是默认的混淆规则, 导致包名+类名冲突了, 就需要一种通用的解决方案来处理这个冲突问题.原创 2022-06-06 17:43:42 · 10285 阅读 · 2 评论 -
Android开发——H5容器加载速度优化方案
1. 背景介绍在偏重活动运营的电商App中,受制于App版本审核,具备开发周期短、可灵活发布等特点的H5页面受到青睐,承载了很多重要业务。但App Webview存在令人烦恼的性能问题,特别突出的是加载速度慢,和Native页面相比用户体验较差。因此本文将从H5加载速度优化方面,总结了XCache、Prefetch、容器预热三种优化方案,以及上线后的提速效果分享。2. XCache离线缓存提速方案2.1 方案背景为了有效解决 Android H5的性能问题,除了使用Android WebView自身原创 2021-02-14 18:19:41 · 24925 阅读 · 5 评论 -
Android开发——如何优雅的将布局置于输入法之上
0. 前言在Android应用的开发中,有一些产品需求,需要我们获取到输入法的高度。遗憾的是,Android官方并没有提供这样的API。最近在做的直播项目就有类似的需求,先看一下淘宝的直播页面,当用户点击下方的布局时,弹出输入法的同时,将一个新的EditText置于输入法的正上方,这就需要我们准确的获取到输入法的高度,同时兼顾虚拟按键栏的高度。同时也看到,在输入法出现时,后面的界面的布局没有受到任何的影响,这显然是android:windowSoftInputMode="adjustNothing"的原创 2020-06-08 19:26:36 · 26126 阅读 · 8 评论 -
Android开发——View Binding的使用与解析
1. 前言如何干掉模版代码是很多第三方框架的设计初衷,在Android开发中,findViewById()是必不可少的存在,这样的冗余代码在很久以前充斥在Android工程中,因此也出现了很多精简写法,代表方案罗列如下:1.1 Butter Knife/Kotter KnifeButter Knife框架是17年前后很火的存在。但是在Kotlin中直接使用ButterKnife的注解方式的话...原创 2020-04-24 19:39:16 · 23549 阅读 · 5 评论 -
Android开发——AS插件批量解决XML中的String/Color/Dimen硬编码
1. 问题抛出1.1 开发方面对于日常开发中,每写一个"#333",都要手动的在当前xml与colors.xml中来回切换,查看是否已经定义过,如果定义过则拿过来复用,如果没有就要新定义一个叫"#333"的资源名,然后再使用。同样的情况存在于dimen以及string,这无疑是重复冗余的操作。1.2 维护方面试想一下,你接手了一个老项目,发现color、string和dimen信息全部以硬...原创 2020-01-16 16:24:52 · 23677 阅读 · 3 评论 -
Android开发——Crash捕获SDK是如何捕获Application中onCreate的崩溃信息的
1. 前言众所周知,很多第三方SDK是在Application中的onCreate()中去初始化的,形如:@Overridepublic void onCreate() { super.onCreate(); //... ThirdPartySDK.init(this);}那么为什么一些crash捕获SDK是如何更靠前的进行初始化,从而捕获Applicat......原创 2019-10-25 16:50:12 · 12540 阅读 · 2 评论 -
Android开发——LinearLayout和RelativeLayout的性能对比
0.前言我们都知道新建一个Android项目自动生成的Xml布局文件的根节点默认是RelativeLayout,这不是IDE默认设置,而是由android-sdk\tools\templates\activities\EmptyActivity\root\res\layout\activity_simple.xml.ftl这个文件事先就定好了的,在我们的理解里貌似LinearLayout的性能是...原创 2016-11-05 20:38:33 · 14697 阅读 · 5 评论 -
Android开发——使用ActivityLifecycleCallbacks监控App是否处于后台
0.前言项目中经常会遇到判断App是否工作在后台的情景,除了判断runningTasks这种方法,其实有一种更加优雅的方法,就是使用ActivityLifecycleCallbacks。1.ActivityLifecycleCallbacksActivityLifecycleCallbacks其实是一个接口,如下所示:看方法名字就很清晰的知道,它定义了App内所有的Activity从创建到销毁的回调方法...原创 2017-07-12 21:12:08 · 3807 阅读 · 0 评论 -
Android开发——常见的内存泄漏以及解决方案(一)
0. 前言 Android的内存泄漏是Android开发领域永恒的话题,那今天就总结一下常见的内存泄漏吧。也给自己提个醒,在以后的编码过程中多注意这个问题。在Android Studio里可以通过一些分析工具比如MAT来找出潜在的内存泄漏。还有如果不清楚Java里的内存泄漏以及内存泄漏、内存益处的区别的小伙伴,可以参考我之前写过的Java技术——Java中的内存泄漏。此篇将从静态变量引用Acti...原创 2016-08-27 12:37:30 · 17967 阅读 · 3 评论 -
Android开发——ThreadLocal功能介绍
ThreadLocal适用于某些数据以线程为作用域并且不同线程具有不同数据副本的场景。比如对于Handler来说,它需要获取当前线程的Looper,很显然Looper的作用域就是线程并且不同线程具有不同的Looper,这个时候通过ThreadLocal就可以轻松实现Looper在线程中的存取。ThreadLocal的另一个使用场景是复杂逻辑下的对象传递。比如监听器的传递,有时一个...原创 2016-08-04 16:07:58 · 12894 阅读 · 0 评论 -
Android开发——弹性滑动的两种实现方式
0. 前言 我们在Android开发——View滑动的三种实现方式中学习了如何进行View滑动,在第一种方法,利用ScrollBy和ScrollTo进行滑动时,滑动效果是瞬间完成的,为了更好的用户体验,有时我们需要滑动有一个渐变的过程。这就是所谓的弹性滑动。1.延时策略我们解决弹性滑动的第一反应可能就是采用延时策略,通过Handler发送并接收延时消息,每次接收到消息便完成一次Scrol...原创 2016-09-14 15:57:32 · 12280 阅读 · 1 评论 -
Android开发——View滑动的三种实现方式
0.前言Android开发中,我们常常需要View滑动实现一些绚丽的效果来优化用户体验。一般View的滑动可以用三种方式实现。下面会一一说明。1.ScrollTo/ScrollByView提供了ScrollTo/ScrollBy专门用于View滑动,前者作用是将View的左上角坐标置为设定值,后者看下面源码可以看出,实现的是基于当前位置的相对滑动。源码展示如下:...原创 2016-09-11 20:49:32 · 12226 阅读 · 0 评论 -
Android开发——Protocol Buffer的使用(比XML、Json快很多)
0.前言最近的项目里有用到Protocol Buffer,Protocol Buffer是Google公司开发的一种数据描述语言,类似于XML,是一种结构化数据的数据存储格式,可用于数据传输量较大的即时网络通信IM等场景。之所以使用它,说明它是有不可替代的优势,这里借用CarSon的一张图来说明:Protocol Buffer主要的优势在于三点:(1)体积小速度快。像XML这种报文是基于文本格式的...原创 2017-06-11 18:06:38 · 2685 阅读 · 1 评论 -
Android开发——View动画、帧动画和属性动画详解
0. 前言 Android动画是面试的时候经常被问到的话题。我们都知道Android动画分为三类:View动画、帧动画和属性动画。先对这三种动画做一个概述。View动画是一种渐进式动画,通过图像的平移、缩放、旋转和透明度等各种渐进式变换完成动画效果。帧动画是通过不停的切换图片实现动画效果。属性动画是不停的改变对象的属性来实现动画效果。1.View动画1.1 系统提供的四种Vie...原创 2016-10-02 19:28:10 · 37357 阅读 · 1 评论 -
Android开发——布局性能优化的一些技巧(一)
0. 前言上一篇我们分析了为什么LinearLayout会比RelativeLayout性能更高,意义在于分析了这两种布局的实现源码,算是对一个小结论的证明过程,但是对布局性能的优化效果,对这两种布局的选择远不如减少布局层级、避免过分绘制、按需加载等效果明显。所以本篇将着重总结布局性能优化的各种技巧。本文原创,转载请注明出处:http://blog.csdn.net/seu_calvin/arti...原创 2016-11-28 21:55:18 · 2745 阅读 · 0 评论 -
Android开发——SurfaceView使用总结
0. 前言在Android开发中,如果需要在主线程之外的线程绘制界面、View需要频繁刷新或刷新时数据流较大时,就要考虑使用SurfaceView了。因为SurfaceView可以避免画图任务繁重的时候造成主线程阻塞,从而提高了程序的反应速度。1. SurfaceView和View的区别(1)View主要用于主动刷新的情况下,而SurfaceView多用于频繁地被动刷新。(2)View是在主...原创 2017-02-27 15:48:42 · 5322 阅读 · 0 评论 -
Android开发——Android手机屏幕适配方案总结
0. 前言Android的屏幕适配,即使得某一元素在Android不同尺寸、不同分辨率的手机上具备相同的显示效果,这个问题一直以来都是我们Android开发者不得不面对的问题。本文对Android的屏幕问题做一个总结。1. 基础概念(1)屏幕尺寸,即手机对角线的物理尺寸1英寸 = 2.54cm 常见手机尺寸有5英寸、5.5英寸、6英寸等。(2)屏幕分辨率,即手机在横向、纵向上的像素点数总和(一般...原创 2016-09-28 14:57:51 · 35855 阅读 · 0 评论 -
Android开发——带你彻底理解 Window 和 WindowManager
0. 前言 有时候我们需要在桌面上显示一个类似悬浮窗的东西需要用Window来实现,Window是一个抽象类,表示一个窗口,它的具体实现类是PhoneWindow,实现位于WindowManagerService中,它的职责就是管理系统中的所有窗口。窗口在 Android 中就是绘制的画布Surface,当一块Surface显示在屏幕上时,就是用户所看到的窗口了。WindowManagerSer转载 2017-04-25 21:58:40 · 2486 阅读 · 0 评论 -
Android开发——View的生命周期总结
0.前言今天看到一个概念是View的生命周期,有点懵逼,听说过Activity的生命周期,Fragment的生命周期,对View的生命周期好像没什么概念啊。难道layout、draw这些也算是生命周期的方法吗?因此查阅、整理了一些资料,有了此文。1.View生命周期相关方法View的生命周期从构造方法开始依次执行以下几个方法,该View的可见性为默认值时:(0)Constructors()Vie...原创 2017-06-03 22:44:58 · 12871 阅读 · 2 评论 -
Android开发——常见的内存泄漏以及解决方案(二)
0.前言 上一篇Android开发——常见的内存泄漏以及解决方案(一)中已经对部分可能会引发内存泄漏的情况进行了阐述,此篇将从图片、动画等资源角度介绍可能会造成内存泄漏的情况以及应对方法。6. 集合类导致内存泄漏很常见的一个例子就是图片的三级缓存结构,为了更好的用户体验,缓存机制必不可少,三级缓存分别为网络缓存,本地缓存以及内存缓存。...原创 2016-08-29 10:57:49 · 14872 阅读 · 2 评论 -
Android开发——今日头条APK瘦身之路
随着版本迭代,功能增加安装包体积也会慢慢增大。今日头条576版本APK达到了25M,通过一系列的优化,到目前的607版本为12M。本文主要是介绍头条APK瘦身中用到的一些方法。APK分析既然是要优化APK的大小,那首先就得看下APK文件的构成。Android Studio在2.2版本添加 APK Analyzer功能,可以直接打开apk文件,如下图所示 APK文件主要有如下几部分组成:转载 2017-07-07 20:02:24 · 2061 阅读 · 0 评论 -
Android开发——遍历读写U盘、SD卡等外部存储
1.首先需要得到挂载在手机上的有哪些盘符 这里需要用到一个被系统隐藏的方法,即StorageManager下的getVolumePaths()方法。具体通过反射得到。方法返回值为字符串数组,在我的真机上可以获得三个盘符:sdcard0 sdcard1 usbdisk。这样就完成了所有文件的遍历,如果需要读写,通过指定路径拿到File对象实例,再操作文件流即可。这里需要说明的是,手机如果想读写USB,本身需要支持USB-OTG功能。...原创 2016-07-15 10:26:42 · 23833 阅读 · 14 评论 -
Android开发——减小APK大小
0.前言APK的大小对APP的加载速度,使用内存大小和消耗功率多少有一定影响。如何减小APK的大小对于Android开发者是一个永恒的话题。那么首先就来了解一下APK的组成结构。1.APK的组成结构META-INF:包含CERT.SF和CERT.RSA签名文件,和MANIFEST.MF清单文件。assets:包含APP的assets资源,代码中可以通过AssetManager对象访问。res:包...原创 2016-08-13 18:50:25 · 19341 阅读 · 4 评论 -
Android开发——Android7.0的适配注意点小结
首先大致说一下Android7.0特性改动的地方:(1)应用间共享文件限制;(2)对部分广播的后台限制、网络数据节省开关等;(3)多窗口的支持;(4)通知栏支持直接回复消息等。针对Android7.0的适配总结如下:1. 应用间共享文件限制1.1 问题描述在Android7.0系统上,Android 框架强制执行了 StrictMode API 政策禁止向应用外公开 f......原创 2018-09-05 11:08:26 · 20211 阅读 · 1 评论 -
Android开发——WebView轻量缓存优化
0. 前言产品被用户投诉 APP 流量消耗厉害:[2017-08-08 07:34:40] 严选 APP 流量消耗太大啦,每次启动都更新,下面流量很大。建议优化流量的消耗,可以对加载画质进行选择。想比淘宝 APP,消耗流量可是大多了。[2017-06-01 21:43:36] 怎么没用有流量节约模式,一会用了我 200M。[2017-06-12 08:32:25] 严选 app 太费流量了。于是乎转载 2017-11-28 12:56:20 · 3692 阅读 · 3 评论 -
Android开发——解决方法数越界问题
0. 前言单个DEX文件能够包含的最大方法总数为65536。通常APK包含一个classes.dex文件,因此Android应用的方法总数不能超过这个数量,这包括Android框架、第三方类库和你自己开发的代码。通常开发者自己的代码很难达到这样的方法数量限制,但随着第三方类库的加入,方法数就会迅速膨胀。也许有一天,这个错误就会找上门来:com.android.dex.DexIndexOverFlo...原创 2016-11-18 15:29:35 · 1060 阅读 · 0 评论 -
Android开发——插件化技术中的关键技术浅析
0. 前言在Android开发中,插件化就是让我们的应用可以把一些功能和逻辑单独抽出来放在插件apk中,然后主apk做到按需调用,这样的好处是一来可以减少主apk的体积,二来可以做到热插拔,在不发布新版本的情况下实现更新某些模块,更加动态化。网上有很多插件化的解决方案和框架,但是它们都必须解决几个基础问题:插件类的加载,插件资源的加载和插件Activity的管理。1. 插件类的加载public...原创 2017-09-08 21:05:51 · 1861 阅读 · 3 评论 -
Android开发——增量更新实战中遇到的问题
0. 前言之前一篇Android开发——增量更新实战总结介绍了增量更新的具体实现步骤,但是其中有一些坑还是需要注意一下的,这里对遇到的一些坑做一个总结,希望以后遇到这些坑的同学少走弯路。1. Windows下的编译错误 在上一篇的3.2我们导入源码的过程中,其中为了防止Windows下的编译错误,放入了empty.c空文件,具体错误当时忘记截图了,反正如果你用的Windows平台做,直接...原创 2017-08-29 18:09:58 · 1598 阅读 · 0 评论 -
Android开发——增量更新实战总结
0. 前言增量更新的原理还是比较简单的,但是真的实现起来遇到的坑简直让人吐血,我是在windows下实现的,各种各样的坑,各种各样的错误,折腾了整整两天多才完成了,因此记录下来。先介绍下什么是增量更新和为什么我们需要增量更新,当我们发布新版本的时候,一些用户升级并不是很积极,反正我个人是不太喜欢更新手机上的APP,不知道大家是什么样的习惯...原创 2017-08-29 18:09:31 · 1767 阅读 · 0 评论 -
Android开发——贝塞尔曲线解析
相信很多同学都知道“贝塞尔曲线”这个词,我们在很多地方都能经常看到。利用“贝塞尔曲线”可以做出很多好看的UI效果,本篇博客就让我们一起学习“贝塞尔曲线”。贝塞尔曲线的原理贝塞尔曲线是用一系列点来控制曲线状态的,这些点简单分为两类:类型作用数据点确定曲线的起始和结束位置控制点确定曲线的弯曲程度一阶贝塞尔曲线 一阶曲线是没有控制点的,仅有两个数据点(A 和 B)转载 2017-07-26 16:13:36 · 2299 阅读 · 0 评论 -
Android开发——BroadcastReceiver知识总结
0. 前言BroadcastReceiver作为Android四大组件之一,像一个全局的监听器一样,是用来监听系统或者应用发出的广播信息,再在其onReceive()中执行相应的逻辑处理。如可以监听系统的开机广播、电量较少的广播,也可以用来实现自己应用中不同组件之间的通信,如数据库中CURD后发送一个广播,并传递少量的数据,使某个Service中的变量发生改变。当然如果数据的发送量比较大就不建议...原创 2017-03-11 16:24:18 · 1337 阅读 · 0 评论 -
Android开发——Activity启动模式详解
1. Activity的启动模式1.1 Standard标准模式系统默认的启动模式,即便实例存在,每次启动都会创建一个新的实例,每个实例可以属于不同的任务栈。若ActivityA以此模式启动了Activity B,那么B会进入A所在的栈。注意,若是非Activity类型的Context,如ApplicationContext,并没有任务栈,因此以ApplicationConte...原创 2016-07-28 14:19:32 · 13047 阅读 · 0 评论 -
Android开发——微信Android架构历史
微信Android诞生之初,用的是常见的分层结构设计。这种架构简单、清晰并一直沿袭至今。这是微信架构的v1.x时代。图1-架构演进到了微信架构的v2.x时代,随着业务的快速发展,消息通知不及时和Android 2.3版本之前webview内存泄露问题开始突显。由于代码、内存、apk大小都在增长,对系统资源的占用越来越多,导致微信进程容易被系统回收。因此微信开始转向多进程架构,独立的通信进程保持长连转载 2017-08-13 20:31:54 · 3145 阅读 · 3 评论 -
Android开发——Android系统启动以及App启动过程
0.前言从Android手机打开开关,到我们可以使用其中的app时,这个启动过程到底是怎么样的?1.系统上电当给Android系统上电,在电源接通的瞬间,CPU内的寄存器和各引脚均会被置为初始状态,CPU复位之后,程序指针会指向启动地址,从该地址读取并直接运行启动程序的可执行代码,或者将可执行代码与数据载入CPU内置的RAM中再运行。这一段代码,放在PC中,叫做BIOS,而在Andro...原创 2017-06-19 16:26:11 · 5017 阅读 · 1 评论 -
Android开发——关于RxJava的知识总结
0. 前言RxJava在主页上的介绍://a library for composing asynchronous and event-based programs using observable sequences for the Java VM.//一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库。大家都知道异步代码经常会既难写也难被读懂。这时候RxJava的优势就来了,随着程序逻辑变得越来越复杂,它依然能够保持简洁。初学RxJava只要把握两点,观察者模式和异步。转载 2017-05-23 20:05:08 · 1100 阅读 · 1 评论 -
Android开发——IntentFilter的匹配规则
1.IntentFilter中的过滤信息启动Activity分为显式调用和隐式调用,前者没什么好讲的,后者需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息。包括action、category、data。一个Activity中可以有多个IntentFilter,一个Intent只要能匹配任何其中一组IntentFilter即可成功启动该Activity。...原创 2016-07-28 16:08:33 · 11086 阅读 · 0 评论 -
Android开发——子线程操作UI的几种方法
在Android项目中经常有碰到这样的问题,在子线程中完成耗时操作之后要更新UI,下面就自己经历的一些项目总结一下更新的方法:在看方法之前需要了解一下Android中的消息机制方法1 Activity.runOnUiThread方法如下:runOnUiThread(new Runnable() { @Override public void run()...原创 2016-08-04 17:21:34 · 23334 阅读 · 0 评论 -
Android开发——Fragment知识整理(一)
0. 前言Fragment,顾名思义是片段的意思,可以把Fragment当成Activity的一个组成部分,甚至Activity的界面可以完全有不同的Fragment组成。Fragment需要被嵌套到Activity上面才能起作用,Fragment可以充分利用屏幕面积,而且也可以更方便用户进行交互操作。Fragment是在Android3.0(API level 11)引入的,如果你要适配之前的...原创 2016-12-24 21:54:15 · 1844 阅读 · 0 评论