
Android进阶与总结
文章平均质量分 94
子云心
这个作者很懒,什么都没留下…
展开
-
Android序列化(五) 之 Protocol Buffers
Protocol Buffers(官方地址:https://developers.google.com/protocol-buffers)是Google开发的一种比XML和Json更小、更快、更简单、可跨语言、跨平台且扩展性好的序列化数据的机制。使用时只要使用.proto文件一次定义好数据的结构化方式,然后借助工具便可以针对 Java、Python、Objective-C 或 C++等语言(proto3还可支持 Dart、Go、Ruby 和 C#)使用命令生成特殊的源代码将数据结构或对象转换成二进制串写入和原创 2022-06-06 20:21:35 · 1416 阅读 · 0 评论 -
Android序列化(四) 之 Gson
1 概述Json(JavaScript Object Notation)是一种可读性和通用性都非常强的轻量级的数据交换格式,一开始是JavaScript中广泛使用,到了后面流传几乎所有语言都有相应的使用API,所以它已是行业公认的标准。与JavaScript等的动态类型语言一起使用时非常方便,只要将数据转换成字符串,便可以在函数之间轻松地传递字符串进行数据传递。但是在像C++、Java等的静态类型语言序列化数据时,Json的效率表现仅一般,而且还需要编写较多代码来访问数据和转化成类对象。Gson是G原创 2022-03-18 18:10:03 · 6644 阅读 · 0 评论 -
Android序列化(三) 之 XML
1 概述XML(eXtensible Markup Language)是指可扩展标记语言。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言,常被用来传输数据和存储数据。SUN为Java处理XML推出了JAXP(Java API for XML Processing,Java XML处理的应用接口),它定义的两类不同的对XML文档进行分析、处理的方法,一类是基于文档对象模型,代表的有DOM,另一类是事件驱动模型代表的有SAX和Pull。Android SDK中包含了JAXP原创 2022-03-18 17:55:28 · 2150 阅读 · 0 评论 -
Android序列化(二) 之 Parcelable
1 简介在Android组件间或者跨进程组件间要传递数据都是通过使用 Intent.putExtra() 或者 Bundle.putXXXExtra()方法进行,这些方法无法支持传递对象的引用,而只支持基本平台类型和实现了Serializable或者Parcelable接口的类对象。Serializable接口我们在《Android序列化(一) 之 Serializable》中已经介绍过,它是Java提供的可将对象序列化成字节流进行文件持久化存储或网络传输,也可将字节流反序列化成新的对象。Par原创 2022-03-10 14:12:53 · 6869 阅读 · 0 评论 -
Android序列化(一) 之 Serializable
1 简介序列化是指将数据对象转换成为一种可存储或可传输的数据格式,而反序列化则是相反的操作,将序列化后的数据还原成对象。最为常见的序列化应用有Json和XML,它们都是行业公认的标准。而在 Java 里,有专门提供了 Serializable 接口用于对象的序列化和反序列化。Serializable接口在java.io包中定义,它本身并不存任何字段和方法,只是用于标识类为可序列化。类对象在序列化后会被转换成为字节输出流OutputStream(BufferedOutputStream、ByteArr原创 2021-12-12 22:21:18 · 6430 阅读 · 0 评论 -
Android网络编程(十四) 之 Socket与NIO
1 简介NIO(Non-Blocking I/O或叫New I/O)是一种同步非阻塞的I/O模型,主要用于服务端解决高并发或者大量连接的情况的IO处理。它是JDK1.4中引入的,位于java.nio包中,主要用于弥补原来同步阻塞I/O(Blocking I/O或叫BIO)的不足。在NIO出现之前大多服务端主要使用BIO通过新建线程的方式来解决并发请求,如上一篇博文《Android网络编程(十三...原创 2020-01-21 16:00:24 · 1608 阅读 · 0 评论 -
Android网络编程(十三) 之 Socket和长连接
1 Socket的简介Socket字面翻译是“插座”,通常也称作“套接字”,是对TCP/IP的封装的编程接口。Socket把复杂的TCP/IP 协议族隐藏在Socket 接口后面。Socket 用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过Socket向网络发出请求或者应答网络请求。就像一台服务器可能会提供很多服务,每种服务对应一个Socket,并绑定到一个端口上,不同的端口对应...原创 2019-12-31 20:13:52 · 2378 阅读 · 0 评论 -
Android网络编程(十二) 之 Retrofit2原理分析
1 使用回顾我们在前面博文《Android网络编程(十一) 之 Retrofit2框架的使用》中已经对Retrofit的使用进行过介绍。今天我们接着往下来阅读Retrofit的关键源码从而它进行更加深入的理解。开始前,先来回顾一下简单的使用,通过使用步骤来深入分析每行代码背后的原理,代码如: // 0 创建一个网络请求的接口 public interface AppInfo...原创 2019-12-27 11:23:38 · 495 阅读 · 0 评论 -
Android网络编程(十一) 之 Retrofit2框架的使用
1 简介Retrofit是Square公司开发的Android里对HTTP网络请求的框架,官网是https://square.github.io/retrofit/。其底层是基于OkHttp实现的,也就是说Retrofit就对OkHttp的进一步封装。Retrofit最大的特点就是简洁易用,它使用了大量的运行时注解的方式来提供功能。2快速上手假设有一服务器接口:https://api...原创 2019-12-03 15:15:44 · 654 阅读 · 0 评论 -
Android网络编程(十) 之 OkHttp3原理分析
1 使用回顾我们在前面博文《Android网络编程(九) 之 OkHttp3框架的使用》中已经对OkHttp的使用进行过介绍。今天我们接着往下来阅读OkHttp的关键源码从而它进行更加深入的理解。开始前,先来回顾一下简单的使用,通过使用步骤来深入分析每行代码背后的原理,代码如:private void test() { // 1 创建 OkHttpClient 对象,并可...原创 2019-11-19 10:54:30 · 1172 阅读 · 0 评论 -
Android网络编程(九) 之 OkHttp3框架的使用
1 简介OkHttp是一个用于Android网络请求的第三方开源的轻量级框架。该框架由移动支付Square公司贡献,其优势有支持HTTP/2,允许连接到同一个主机地址的所有请求共享一个Socket连接;若HTTP/2不可用情况下,还可通过连接池的设计减少请求延迟;自动处理GZip压缩节省响应数据大小;支持缓存响应请求数据避免重复请求等。其实我们在上一篇文章《Android网络编程(八) 之...原创 2019-11-07 20:33:32 · 974 阅读 · 0 评论 -
Android网络编程(八) 之 HttpURLConnection原理分析
1 使用回顾我们在前面博文《Android网络编程(四) 之 HttpClient与HttpURLConnection》中已经对HttpURLConnection的使用进行过介绍。今天我们接着往下来阅读HttpURLConnection的关键源码从而它进行更加深入的理解。开始前,先来回顾一下简单的使用,通过使用步骤来深入分析每行代码背后的原理,代码如:InputStream inStre...原创 2019-11-01 19:10:26 · 1419 阅读 · 0 评论 -
Andorid性能优化(四) 之 如何给Apk瘦身
1 前言我们在日常开发过程中,随着版本的迭代、应用模块或功能的增多、老旧代码冗余、各种炫酷效果加入、大分辨率手机对图片的要求、图片不合理使用、滥用第三方库,等原因,应用安装包Apk文件也就逐渐越来越大了。虽然目前手机流量价格已经不像过去几年那么高了且WiFi覆盖环境也越来越多,手机性能和存储空间也没有过去那么的苛刻,一个安装包增加那么几M也不是什么大问题,但是这些并不是让我们可以忽略这个问题的...原创 2019-01-05 12:02:00 · 573 阅读 · 0 评论 -
Android Gradle使用详解(八) 之 使用AndResGuard混淆Apk包资源
1 简介AndResGuard是微信提供的Android资源混淆打包工具。它通过修改resources.arsc文件,从而可以混淆Apk包的资源文件路径(比如将res/drawable/welcome.png混淆为r/s/a.png),达到减少Apk包体积的目的,而且还提升了反编译的难度。其源项目地址:https://github.com/shwenzhang/AndResGuard/,其原理...原创 2018-11-14 15:22:11 · 3036 阅读 · 0 评论 -
Android Gradle使用详解(七) 之 多渠道构建你的App
1 背景在国内手机厂商应用市场和第三方手机应用市场如此泛滥的环境下,针对不同的应用市场区分个别特殊功能、跟踪活跃留存这些数据来源,等。这时构建区分App渠道是很有必要的。Android Gradle中提供了ProductFlavors{}闭包配置来帮助我们很好的处理多渠道构建的问题和实现批量自动化,关于ProductFlavors{}我们在之前的博文《Android Gradle使用详解(三)...原创 2018-11-11 11:37:44 · 2875 阅读 · 0 评论 -
Android Gradle使用详解(六) 之 如何解决65535方法限制
当我们工程版本迭代和业务需求越来越多时,代码量自然也就越来越多。所以在日常开发中会难免会碰到方法个数超过限制65535的错误。原因就是:Java源文件在打包成一个DEX文件,这个文件就是优化过的、Dalvik虚拟机可执行的文件,Dalvik虚拟机在执行DEX文件时,它使用了short这个类型索引DEX文件中的方法,这意味着单个DEX文件可以被定义的方法最多只能是65535个,当超过这个数量时就会发...原创 2018-10-30 12:01:17 · 1273 阅读 · 0 评论 -
Android Gradle使用详解(五) 之 如何配置App版本号和动态生成App版本号的方法
我们清楚知道,几乎所有的软件都是存在一个版本号的东西,APP作为手机上的应用软件也不例外。版本号可以帮助APP升级使用和定位问题。一般地,版本号有3部分构成:主版本号、副版本号 以及 补丁号,例如:1.0.123。也可以是单一个主版本号,格式没有严格要求。方法一、直接配置在build.gradle文件我们在前面的博文《Android Gradle使用详解(三) 之 Android Grad...原创 2018-10-26 18:03:30 · 4341 阅读 · 0 评论 -
Android Gradle使用详解(四) 之 如何安全配置APK包的签名
我们在《Android Gradle使用详解(三) 之 Android Gradle插件配置详解》中有简单介绍过signingConfigs{}配置及其使用到的字段意思。它是用于给 一个APP签名配置的。一个APP只有在签名这后才能被发布、安装和使用,签名是保护APP的方式,它能标记APP的唯一性,防止恶意篡改。一般地我们在开发过程中使用的debug编译模式时,Android SDK已帮我们打上了...原创 2018-10-26 16:06:32 · 935 阅读 · 0 评论 -
Andorid性能优化(五) 之 ANR总结和分析
1 概述ANR(Application Not responding)是指应用程序无响应,Android中会在主线程中针对不同的场景监控应用程序的响应时间,如果在超出该场景限定的超时时间还没有将逻辑处理完毕就会造成ANR。一般情况下系统会弹出一个对话框告知用户当前应用程序无响应,用户可以选择继续等待或者选择关闭结束掉当前应用程序。2 ANR的场景触发ANR的场景这以下这些:Inpu...原创 2019-01-10 16:17:08 · 1162 阅读 · 0 评论 -
Andorid性能优化(一) 之 如何给App进行内存优化
1 前言Android系统为每个应用进程都分配一个有封顶的堆内存值,当应用内存占用过高到没有足够的内存来提供给新对象分配并且垃圾回收机制也已经没有空间可回收时就会OOM。当一个应用内存占用过高会使一些性能差的手机系统内存紧缺,使得整体系统卡顿。而且应用内存占用过高后,一旦退到后台后,就会容易被系统杀死,这点我们在前面《Android进程回收机制和保活方案》中有介绍过,这时一旦你需要进行一些后台...原创 2019-01-03 11:42:23 · 1111 阅读 · 0 评论 -
Android进程回收机制和保活方案
1 Low Memory Killer机制在Android系统中,进程的生命周期都是由系统来控制的。出于体验和性能上的考虑,即使对一个App进行Home键还是Back键退出的操作,系统并不会真正杀掉该App的进程,它的进程依然存在于内存之中。因为这样在下次要启动这个App时就能更加快速。随着系统运行的时间增长,打开的App越来越多,内存中的进程也就会越来越多,这样系统的可用内存就会越来越少。在...原创 2018-12-19 12:05:06 · 2383 阅读 · 0 评论 -
Android插件化原理和实践 (八) 之 注意事项
注意事项关于插件化的三个根本问题和解决方案就已经全部介绍完毕了,前一篇文章也通过一个入门级的工程来完整地演示了。但是其实目前热门的插件化框架也远不止这些内容,我们在实际开发中也远不止这么简单。前面介绍的所有知识点只是一个入门而已,插件化虽然带来了很多便利,但是在开发过程中也增添了不少麻烦和额外工作量,它堪比一把双刃刀。这里顺便总结一下笔者在实际插件化项目开发中增经遇到的一些坑:修改aapt...原创 2018-12-12 13:31:04 · 409 阅读 · 0 评论 -
Android插件化原理和实践 (七) 之 项目实践
我们在前面一系列文章中已经介绍完了插件化原理以及三个根本问题的解决方案,本文主要就是作为前面几篇文章的一个总结,通过项目实践将前面的知识点串起来使完成一个入门级简单的插件化工程以及在实际插件化开发中遇到的一些总结。实践我们先通过Android Studio创建一个工程,工程中包括了两个Application模块,分别是宿主Host和插件PlugIn。工程结构如下左图,我们的目标就是在宿主中...原创 2018-12-12 13:08:03 · 654 阅读 · 0 评论 -
Android Gradle使用详解(三) 之 Android Gradle插件配置详解
通上前两篇博文由浅入深的学习Gradle的基础和Gradle的Java插件相关知识后,现在终于到了高潮部分了,让我们来进一步正式学习Android Gradle插件。前面提到,Android Gradle插件是一个基于内置的Java插件来实现的第三方插件,它是由google的Android团队开发的。1 分类Android Gradle插件根据我们Android工程的属性分为三类: ...原创 2018-10-25 20:27:54 · 5197 阅读 · 2 评论 -
Android Gradle使用详解(二) 之 项目结构和初识Java Gradle插件
我们在上篇文章《Android Gradle使用详解(一) 之 Gradle基础》中介绍了一些关于Gradle的入门相关知识点。本文中会在此基础上对Android工程中Gradle的相关知识进行进一步学习。1 项目结构我们在通过Android Studio创建一个APP工程时,目录结构如下:可以看到工程目录中会自动生成一些文件。其中可以看到一些我们熟悉的文件,因为它们跟我们在上篇文...原创 2018-10-25 20:19:26 · 1178 阅读 · 0 评论 -
浅谈Android辅助功能 AccessibilityService
1 定义Accessibility是叫“辅助功能”或者叫“无障碍”。对于那些由于视力、听力或其它身体原因导致不能方便使用Android智能手机的用户,Android提供了Accessibility功能和服务帮助这些用户更加简单地操作设备,包括文字转语音(不支持中文)、触觉反馈、手势操作、轨迹球和手柄操作。开发者可以搭建自己的Accessibility服务,这可以加强可用性,例如声音提示,物理反...原创 2016-08-22 14:16:33 · 3663 阅读 · 0 评论 -
Android网络编程(四) 之 HttpClient与HttpURLConnection
Android本身提供了Apache 的 HttpClient 和 Java 的HttpURLConnection来进行网络请求通信。它们都支持以流的方式进行网络通信,并且都支持https。1 HttpClientHttpClient的优势在于处理一些可能需要用户登录而且具有相应的权限才可访问该页面。例如需要涉及Session、Cookie的处理时,就要使用HttpClient。它的实现类...原创 2019-07-17 17:07:34 · 501 阅读 · 0 评论 -
Android网络编程(三) 之 网络请求握手过程
1 一次网络请求的过程我们平常在浏览器输入一个网址回车后经过了大概不到一秒时间的网络请求便可展示出相应的页面,其实这样一次完整的网络请求过程要经过好几个步骤:第一步:DNS解析IP地址;第二步:TCP三次握手建立连接;第三步:如果是HTTPS的话,还要进行TLS握手验证签名证书;第四步:客户端发起HTTP请求第五步:服务器响应HTTP请求第六步:客户端浏览器接收到内容进...原创 2019-07-17 16:58:51 · 920 阅读 · 0 评论 -
Android网络编程(二) 之 HTTP协议原理
1 简介要了解HTTP协议原理,就要说到HTTP报文。HTTP 报文是面向文本的,报文中的每一个字段都是一些ASCII 码串,各个字段的长度是不确定的。HTTP 有两类报文:请求报文和响应报文。了解HTTP报文前,可以先通过抓包工具进行查看请求网络的请求报文和响应报文。抓包工具推荐使用Fiddle或者Charle。例如现在我们在浏览器访问了http://msdn.itellyou.cn/后,然...原创 2019-07-17 16:57:08 · 438 阅读 · 0 评论 -
Android网络编程(一) 之 网络分层及协议简介
1 概述OSI/RM在1978年国际标准化组织(ISO)提出了“开放系统互连参考模型”,即著名的OSI/RM 模型(Open System Interconnection/Reference Model)。此后,不同厂家生产的计算机便能相互通信,建立起了计算机网络。OSI/RM将计算机网络体系结构的通信协议划分为七层,自下而上依次为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用...原创 2019-07-17 16:54:30 · 966 阅读 · 0 评论 -
Android中JNI&NDK入门(四) 之 使用CMake方式编译NDK
1 前言我们在前面几篇文章中对JNK/NDK做了一个入门的介绍,其中使用了Android.mk和Application.mk本地配置的方式进行NDK开发。但是其实在Android Studio 2.2之后便加入了CMake方式来编译NDK代码。2 CMakeCMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或...原创 2019-07-17 16:35:40 · 2183 阅读 · 3 评论 -
Andorid性能优化(八) 之 网络请求优化
1 前言移动互联网蓬勃发展的今天,我们手机上的几乎所有App都是需要联网的。而手机硬件的增强和价格低兼以及运营商流量费用降低和提速,使得用户对网络请求的等待和流量消耗的敏感度也在下降。虽然如此,但对于一个App本身开发上的网络问题也是不能忽视的,例如总有流量不足的情况下、在网络状态不好的场景下、手机电量不足的时候,一款优秀的App就能明显地看出优势了,所以网络方面的优化, 也是我们的App优化...原创 2019-03-08 00:11:57 · 787 阅读 · 0 评论 -
Andorid性能优化(七) 之 省电开发技巧总结
1 前言在今天移动互联网蓬勃发展的浪潮下,再好的智能手机也能逃每天一充电的情况。而一款App的好用与否,电量的耗费也是衡量的重要指标之一。今天我们就来一起探索Android中电量的相关知识以及讲讲App进行省电优化的一些开发技巧。2 获得手机电量信息在开发过程中,如果想要获得手机的电量信息,可以通过Android提供了系统广播:ACTION_BATTERY_CHANGED可以在电池信息...原创 2019-03-07 23:53:07 · 797 阅读 · 2 评论 -
Android中JNI&NDK入门(一) 之 初识NDK和JNI
1 NDKNDK全称是Native Develop Kit,翻译作原生开发工具包。它允许你为Android使用C/C++代码来实现应用程序的功能。换言之Android的SDK之外,有一个工具叫NDK,用于进行C/C++的开发。一般情况,是用NDK工具把C/C++编译为.co文件,然后在Java中调用。NDK 可能不适合大多数 Android 编程初学者,这些初学者只需使用 Java 代码和框架...原创 2019-03-19 18:34:29 · 2036 阅读 · 4 评论 -
Android中JNI&NDK入门(二) 之 Java与Native相互调用
我们在上一篇文章《Android中JNI&NDK入门(一) 之 初识NDK和JNI》中已经通过Demo演示了如何在Java代码中去调用C++代码,今天继续来看看在JNI中是如何反调用Java方法的。先大概提一下,JNI中要调用Java方法的流程是先通过类名找到类,然后再根据方法名找到方法的id,最后就可以调用这个方法了。如果是调用Java中的非静态方法,那么就需要先构造出类的对象后才能调用...原创 2019-03-19 18:34:39 · 1005 阅读 · 0 评论 -
Android中JNI&NDK入门(三) 之 动态注册Native函数
1 前言前面两篇文章中,已经对JNI有了一些介绍。现在我们来回顾一下,它主要是通过使用javac -h命令来生成了一个.h的头文件,来产生Java和Native两边方法函的注册关联。这样当Java代码中去执行Native方法的时候,就会通过两边的关联的映射关系来找到这些Native真正实现的地方。事实上,JNI有两种关联Native方法的途径,分别是静态注册和动态注册。2 注册方式2....原创 2019-03-20 15:52:27 · 1189 阅读 · 0 评论 -
Andorid性能优化(三) 之 如何定位内存泄漏
1 定位内存泄漏工具正所谓工欲善其事,必先利其器。定位内存泄漏,可以借助目前比较流行的一些工具来帮助发现和定位问题,下面我们就来看看这些工具。1.1 Memory ProfilerAndroid Studio 3.0 采用全新的Android Profiler窗口取代Android Monitor工具。 这些全新的分析工具能够提供关于应用 CPU、内存和网络 Activity 的实...原创 2019-01-03 12:00:38 · 1543 阅读 · 0 评论 -
Andorid性能优化(二) 之 内存泄漏场景介绍
1 相关概念1.1 内存泄漏内存泄漏是指程序在向系统申请分配内存空间后,也就是说new了对象后,在使用完毕后没有对其进行释放。结果导致一直占据该内存单元。简单的说,在C/C++语言中,如果向堆中分配了内存(new了对象)后,没有对其进行释放掉(没有delete对象),那就是内存泄漏。在Java中由于有了垃圾回收机制,不再需要开发者手动去delete对象了,所以在Java中内存泄漏是指内存对...原创 2019-01-03 11:59:25 · 335 阅读 · 0 评论 -
Android Gradle使用详解(一) 之 Gradle基础
1 简介Gradle是一款非常优秀的构建系统工具,它是一门专门解决自动化构建的DSL(Domain Specifice Language,领域特定语言)。它的实现基于Groovy(Groovy是一种基于JVM虚拟机的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性,Groovy它的语法和Java非常相似,能够与 Java 代码很好地结合和扩展)。2 环境...原创 2018-10-25 20:11:57 · 2793 阅读 · 0 评论 -
Andorid性能优化(六) 之 启动速度优化
1 App启动方式App的启动可分为:冷启动、温启动和热启动。其中冷启动是App启动耗时最长的启动情况,今天我们来讲解启动速度的优化也是专门针对冷启动来进行。1.1 冷启动当App启动时,后台没有该App对应的进程,比如手机启动后第一次运行App、系统内存吃紧引发App进程被Kill掉后再次启动又或者是用户主动结束App进程的情况。这种情况意味着系统需要创建一个新的进程分配给该App,...原创 2019-03-06 17:53:51 · 414 阅读 · 0 评论