当前搜索:

[置顶] Android开发——Protocol Buffer效率之高的原理介绍

0.前言最近的项目里有用到Protocol Buffer,Protocol Buffer是Google公司开发的一种数据描述语言,类似于XML,是一种结构化数据的数据存储格式,可用于数据传输量较大的即时网络通信IM等场景。之所以使用它,是因为PB将信息序列化为二进制的格式,体积缩小了3倍,序列化速度比Json快了20-100倍,也必然会减少网络传输所需的时间。这么强大的的PB,当然要深入理解一下它...
阅读(498) 评论(4)

[置顶] Android开发——简述RxJava框架的实现原理

0.前言看此篇之前最好知道RxJava的使用,关于框架的使用推荐这篇文章,由于RxJava内部实现有点复杂,既然用拆轮子的方式来分析源码比较难啃,不如换种方式,以造轮子的方式,将源码中与性能、兼容性、扩展性有关的代码剔除,留下核心代码带大家揭秘RxJava的实现原理(本文不涉及框架的使用介绍)。 1.观察者Subsribler在RxJava里面是一...
阅读(387) 评论(4)

[置顶] Android开发——断点续传原理以及实现

0.  前言在Android开发中,断点续传听起来挺容易,在下载一个文件时点击暂停任务暂停,点击开始会继续下载文件。但是真正实现起来知识点还是蛮多的,因此今天有时间实现了一下,并进行记录。本文原创,转载请注明出处为SEU_Calvin的博客。 1.  断点续传原理在本地下载过程中要使用数据库实时存储到底存储到文件的哪个位置了,这样点击开始继续传递时,才能通过HTTP的GET请求中的setReque...
阅读(17043) 评论(151)

[置顶] Android APP架构设计——MVC、MVP和MVVM介绍

0. 前言为了更好地进行移动端架构设计,我们最常用的就是MVC、MVP和MVVM,作为三个最耳熟能详的三大架构,应用可谓非常广泛。本文原创,转载请注明出处为SEU_Calvin的博客。本篇博客将介绍这三种架构设计的工作原理以及优缺点,以及它们在Android中的表现。 1.   MVC1.1    MVC工作原理MVC是软件架构中最常见的一种框架,三个字母分别代表三个模块:Model、View和C...
阅读(8448) 评论(0)

[置顶] Android开发——View绘制过程源码解析(二)

0. 前言  View的绘制流程从ViewRoot的performTraversals开始,经过measure,layout,draw三个流程,之后就可以在屏幕上看到View了。上一篇已经介绍了View和ViewGroup的measure的源码解析过程,本篇介绍measure后如何获得View的宽和高,以及layout和draw的过程。1.   获得Measure出的宽高Meaure完成以后,可以...
阅读(13198) 评论(5)

[置顶] Android开发——View绘制过程源码解析(一)

0. 前言  View的绘制流程从ViewRoot的performTraversals开始,经过measure,layout,draw三个流程,之后就可以在屏幕上看到View了。其中measure用于测量View的宽和高,layout用于确定View在父容器中放置的位置,draw则用于将View绘制到屏幕上。本文原创,转载请注明出处:SEU_Calvin的CSDN博客。1. MeasureSpec...
阅读(14235) 评论(8)

[置顶] Android开发——Android中常见的4种线程池(保证你能看懂并理解)

0.前言使用线程池可以给我们带来很多好处,首先通过线程池中线程的重用,减少创建和销毁线程的性能开销。其次,能控制线程池中的并发数,否则会因为大量的线程争夺CPU资源造成阻塞。最后,线程池能够对线程进行管理,比如使用scheduleThreadPool.scheduleAtFixedRate(myRunnable, 1000 ,2000, TimeUnit.MILLISECONDS);我们可以设置延...
阅读(29629) 评论(25)

[置顶] Android开发——常见的内存泄漏以及解决方案(二)

0.前言 上一篇Android开发——常见的内存泄漏以及解决方案(一) 中已经对部分可能会引发内存泄漏的情况进行了阐述,此篇将从图片、动画等资源角度介绍可能会造成内存泄漏的情况以及应对方法。6. 集合类导致内存泄漏很常见的一个例子就是图片的三级缓存结构,为了更好的用户体验,缓存机制必不可少,三级缓存分别为网络缓存,本地缓存以及内存缓存。...
阅读(11823) 评论(2)

[置顶] Android开发——常见的内存泄漏以及解决方案(一)

0. 前言  Android的内存泄漏是Android开发领域永恒的话题,那今天就总结一下常见的内存泄漏吧。也给自己提个醒,在以后的编码过程中多注意这个问题。在Android Studio里可以通过一些分析工具比如MAT来找出潜在的内存泄漏。还有如果不清楚Java里的内存泄漏以及内存泄漏、内存益处的区别的小伙伴,可以参考我之前写过的Java技术——Java中的内存泄漏。此篇将从静态变量引用Acti...
阅读(13501) 评论(2)

[置顶] Android开发——减小APK大小

0.前言APK的大小对APP的加载速度,使用内存大小和消耗功率多少有一定影响。如何减小APK的大小对于Android开发者是一个永恒的话题。那么首先就来了解一下APK的组成结构。 1.APK的组成结构META-INF:包含CERT.SF和CERT.RSA签名文件,和MANIFEST.MF清单文件。assets:包含APP的assets资源,代码中可以通过AssetManager对象访问。res:包...
阅读(15977) 评论(4)

[置顶] Android开发——AsyncTask的使用以及源码解析

1.AsyncTask使用介绍 AsyncTask封装了Thread和Handler,通过AsyncTask可以很方便地在执行完后台任务后更新UI。如果不太清楚Android的Handler机制,可以查看此篇Android消息机制详解。   下面是一个使用AsyncTask的实例,利用网络下载某URL里的字符串,以模拟耗时任务。在下载过程中,会通过进度条对话框向用户展示进度。在完成任务后将字...
阅读(14880) 评论(7)

[置顶] Android开发——Android 6.0权限管理机制详解

0.前言 最近在研究所实习,我负责维护Android手机取证项目的Android客户端,有客户反映我们的APP在Android6.0无响应,经过调试发现SD卡读写权限权限被拒绝。但明明是在AndroidManifest.xml文件中声明过的。查了很多资料才知道Android6.0的很多权限申请机制发生了改变,可以说是Android6.0在安全机制上更进了一步吧,因此写下这篇文章以记录。...
阅读(16135) 评论(12)

[置顶] Android开发——Android的消息机制详解

1. 我们为什么需要Android的消息机制   我们知道,Android规定访问UI只能在主线程中进行。若在子线程中访问UI,就会抛出异常。这个验证由ViewRootImpl的checkThread方法来完成。 为什么不允许在非主线程访问UI呢,这是因为Android的UI控件不是线程安全的。并发访问会导致控件处于不可预期的状态。 那为什么不对UI访问加上锁机制呢,原因如下: (1)这...
阅读(12476) 评论(0)

[置顶] Android开发——程序锁的实现(可用于开发钓鱼登录界面)

1. 程序锁原理 实时检测栈顶Activity的包名,如果和我们预置的包名相符(可用SQLite数据库对要进行匹配的包名进行信息存储),则新开一个Activity栈,将拦截画面置于用户面前。只有在用户输入密码,并且验证成功后,才“放行”。代码实现比较简单,获取到topActivity的包名即可进行程序锁的逻辑判断。...
阅读(11505) 评论(5)

[置顶] Android开发——免Root监听微信的聊天记录(后台秘密发邮件)

发送后台邮件需要用到三个第三方的库,分别为activation.jar,additionnal.jar,mail.jar。发送邮件的时候需要用到很多信息,包括发送邮件的服务器的IP和端口、邮件发送者的地址、邮件接收者的地址、登陆邮件发送服务器的用户名和密码、邮件主题、邮件的文本内容等等。 这里需要注意的是,我们发送后台邮件需要给出账号密码等敏感信息,这些邮件信息,除了邮件的文本内容信息,其他的信息我们都可以在程序里面编写好……...
阅读(21183) 评论(21)

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 太费流量了。于是乎...
阅读(290) 评论(1)

Android开发——ListView的复用机制源码解析

0. 前言  前段时间找工作,看了很多人的面经,不得不说找个工作很麻烦。尤其是Android,岗位的数量比不上前端后Java后台也就算了,问的东西又多又杂,这里就不多列举了,其中有一个印象比较深的问题是关于ListView复用机制的。复用机制谁都会用,但是却不一定能真正讲清楚。因此才有了此文。 1.   ListView的继承关系和Adapter的由来ListView直接继承自的AbsListVi...
阅读(140) 评论(0)

Android开发——插件化技术中的关键技术浅析

0.  前言在Android开发中,插件化就是让我们的应用可以把一些功能和逻辑单独抽出来放在插件apk中,然后主apk做到按需调用,这样的好处是一来可以减少主apk的体积,二来可以做到热插拔,在不发布新版本的情况下实现更新某些模块,更加动态化。网上有很多插件化的解决方案和框架,但是它们都必须解决几个基础问题:插件类的加载,插件资源的加载和插件Activity的管理。1.  插件类的加载public...
阅读(388) 评论(2)

Android开发——增量更新实战中遇到的问题

0.   前言之前一篇 Android开发——增量更新实战总结介绍了增量更新的具体实现步骤,但是其中有一些坑还是需要注意一下的,这里对遇到的一些坑做一个总结,希望以后遇到这些坑的同学少走弯路。1.  Windows下的编译错误  在上一篇的3.2我们导入源码的过程中,其中为了防止Windows下的编译错误,放入了empty.c空文件,具体错误当时忘记截图了,反正如果你用的Windows平台做,直接...
阅读(442) 评论(0)

Android开发——增量更新实战总结

0.   前言增量更新的原理还是比较简单的,但是真的实现起来遇到的坑简直让人吐血,我是在windows下实现的,各种各样的坑,各种各样的错误,折腾了整整两天多才完成了,因此记录下来。先介绍下什么是增量更新和为什么我们需要增量更新,当我们发布新版本的时候,一些用户升级并不是很积极,反正我个人是不太喜欢更新手机上的APP,不知道大家是什么样的习惯...
阅读(349) 评论(0)

Android开发——微信Android架构历史

微信Android诞生之初,用的是常见的分层结构设计。这种架构简单、清晰并一直沿袭至今。这是微信架构的v1.x时代。图1-架构演进到了微信架构的v2.x时代,随着业务的快速发展,消息通知不及时和Android 2.3版本之前webview内存泄露问题开始突显。由于代码、内存、apk大小都在增长,对系统资源的占用越来越多,导致微信进程容易被系统回收。因此微信开始转向多进程架构,独立的通信进程保持长连...
阅读(393) 评论(2)

Android开发——如何理解晦涩的Binder机制

0.  前言Android中Binder机制的重要性不言而喻,从IPC角度来看, Binder是一种跨进程通信方式,Binder也可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder;从Android framework角度来说,Binder是Service Manager连接各种Manager和相应ManagerService的桥梁;从Android应用层来说,Binder是客户端...
阅读(611) 评论(2)

设计模式——装饰模式详解

装饰模式动态地给一个对象添加一些额外的功能,相对于继承的方式,更加灵活。 装饰模式经常被误认为是代理模式。装饰模式是以对客户透明的方式扩展对象的功能,是继承关系的一个替代方案。而代理模式则是给一个对象提供一个代理对象,并由代理对象来控制原有对象的引用。 前者重在增加功能,后者重在对代理对象施加控制,不是对对象本身功能的增强。...
阅读(315) 评论(0)

Android开发——贝塞尔曲线解析

相信很多同学都知道“贝塞尔曲线”这个词,我们在很多地方都能经常看到。利用“贝塞尔曲线”可以做出很多好看的UI效果,本篇博客就让我们一起学习“贝塞尔曲线”。贝塞尔曲线的原理贝塞尔曲线是用一系列点来控制曲线状态的,这些点简单分为两类:类型作用数据点确定曲线的起始和结束位置控制点确定曲线的弯曲程度一阶贝塞尔曲线 一阶曲线是没有控制点的,仅有两个数据点(A 和 B)...
阅读(849) 评论(0)

Android开发——使用ActivityLifecycleCallbacks监控App是否处于后台

0.前言项目中经常会遇到判断App是否工作在后台的情景,除了判断runningTasks这种方法,其实有一种更加优雅的方法,就是使用ActivityLifecycleCallbacks。 1.ActivityLifecycleCallbacksActivityLifecycleCallbacks其实是一个接口,如下所示:看方法名字就很清晰的知道,它定义了App内所有的Activity从创建到销毁的回调方法...
阅读(510) 评论(0)

Android开发——今日头条APK瘦身之路

随着版本迭代,功能增加安装包体积也会慢慢增大。今日头条576版本APK达到了25M,通过一系列的优化,到目前的607版本为12M。本文主要是介绍头条APK瘦身中用到的一些方法。APK分析既然是要优化APK的大小,那首先就得看下APK文件的构成。Android Studio在2.2版本添加 APK Analyzer功能,可以直接打开apk文件,如下图所示 APK文件主要有如下几部分组成: ...
阅读(777) 评论(0)

Java技术——ReentrantLock的Condition的作用以及使用

0. 前言  之前知道ReentrantLock类有一个newCondition(),用于获取Lock上的一个条件,还可以多次newCondition()获得多个条件,Condition可用于线程间通信。是对比ReentrantLock和Synchronized关键字的区别时学习到的。但是有次面试被问到有没有用到过ReentrantLock的Condition,瞬间懵逼了。所以搜集了些资料,通过一...
阅读(1399) 评论(0)

Android开发——Android系统启动以及App启动过程

0. 前言  从Android手机打开开关,到我们可以使用其中的app时,这个启动过程到底是怎么样的? 1.  系统上电当给Android系统上电,在电源接通的瞬间,CPU内的寄存器和各引脚均会被置为初始状态,CPU复位之后,程序指针会指向启动地址,从该地址读取并直接运行启动程序的可执行代码,或者将可执行代码与数据载入CPU内置的RAM中再运行。这一段代码,放在PC中,叫做BIOS,而在Andro...
阅读(845) 评论(1)

设计模式——适配器模式详解

适配器模式把一个类的接口变换成客户端所期待的另一个接口,从而使原本因接口不兼容而无法一起工作的两个类能一起工作。适配器模式的使用场景: (1)系统需要使用现有的类,而此类的接口不符合需要。 (2)需要一个统一的输出接口,而输入类型不可预知(如Android中的Adapter)。 (3)创建一个可以复用的类(如Android中的Adapter),使得该类可以与其他不相关的类或不可预见的类...
阅读(322) 评论(0)

Android开发——Protocol Buffer的使用(比XML、Json快很多)

0.前言最近的项目里有用到Protocol Buffer,Protocol Buffer是Google公司开发的一种数据描述语言,类似于XML,是一种结构化数据的数据存储格式,可用于数据传输量较大的即时网络通信IM等场景。之所以使用它,说明它是有不可替代的优势,这里借用CarSon的一张图来说明:Protocol Buffer主要的优势在于三点:(1)体积小速度快。像XML这种报文是基于文本格式的...
阅读(445) 评论(1)

Android开发——View的生命周期总结

0.前言今天看到一个概念是View的生命周期,有点懵逼,听说过Activity的生命周期,Fragment的生命周期,对View的生命周期好像没什么概念啊。难道layout、draw这些也算是生命周期的方法吗?因此查阅、整理了一些资料,有了此文。 1.View生命周期相关方法View的生命周期从构造方法开始依次执行以下几个方法,该View的可见性为默认值时:(0)Constructors()Vie...
阅读(660) 评论(1)

Android开发——监控造成UI卡顿的原因

0.  前言Android只有主线程才能更新UI。如果界面1秒钟刷新少于60次,即FPS小于60,用户就会产生卡顿感觉。Android使用消息机制进行UI更新的,如果在主线程handler的dispatchMessage方法进行了耗时操作,就会发生UI卡顿。本文原创,转载请注明出处: 1.  dispatchMessage方法在哪dispatchMessage()是在Looper.loop()里调...
阅读(2238) 评论(5)

Android开发——关于RxJava的知识总结

0. 前言RxJava在主页上的介绍://a library for composing asynchronous and event-based programs using observable sequences for the Java VM. //一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库。大家都知道异步代码经常会既难写也难被读懂。这时候RxJava的优势就来了,随着程序逻辑变得越来越复杂,它依然能够保持简洁。初学RxJava只要把握两点,观察者模式和异步。...
阅读(616) 评论(0)
169条 共9页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:1284749次
    • 积分:12236
    • 等级:
    • 排名:第1349名
    • 原创:139篇
    • 转载:28篇
    • 译文:2篇
    • 评论:514条
    个人说明