- 博客(30)
- 资源 (4)
- 收藏
- 关注
原创 Android 加载热补丁简单例子
最近几年,安卓热门技术中,有关热修复、插件化、双开等等技术应用的比较广泛。本文从最简单直接的一个例子入手,分析其中的技术原理和构建思路。有3个相关的基本知识点,java中的反射、设计模式中的代理模式、安卓中的类加载反射的主要作用就是可以根据类的完整包名+类名,可以读取类里面定义的字段、方法名等等;还可以针对一个对象,对对象里面的字段进行写入替换;反射执行对象的方法等等。重点在对字段进行替换写入...
2020-04-23 11:56:54
926
1
原创 Android JNI学习入门之使用C++链表结构存储数据
学习NDK开发,一方面是掌握Java和C/C++互相调用,另一方面是掌握C/C++语言本身的基础;因此我觉得入门的最好方式就是使用C/C++构建数据结构,然后存储数据;这样既可以掌握一些C++语言本身的基础知识,又可以掌握一些Java和C/C++对象的互相调用的方法。 本次项目是在Android Studio中构建的。 首先,我新建一个Java类,public class LinkList
2017-07-23 16:44:48
818
原创 使用protobuf作为http通讯格式
protobuf谷歌的开源序列化项目,类似的还有于json,xml等组织格式;据说protobuf的序列化占用的数据量最下,传输效率最高,并且作为服务器开发者,只需要掌握.proto文件的书写方式,就可以生成不同语言的序列化对象。这次讲解一下如何在服务器和安卓客户端之间利用protobuf传输数据。 测试的接口是登录功能:我写的proto文件如下:syntax = "proto2";messag
2017-05-04 21:33:26
14773
原创 Android RecycleView加载速度优化
Android RecycleView加载速度优化Android开发中,经常会碰到列表加载优化的问题。之前是ListView,现在经常用到RecycleView;不管怎么换控件,优化的思路始终是一样的,那就是将当前的资源尽量都放在用户需要的地方,仅加载用户需要看到的,用户不会看到的我们不需要加载。 思路有好几个,第一种是实现一个和RecycleView加载页面算法一样的队列存储结构,
2017-03-16 17:03:35
3265
原创 RecycleView数据缓存与显示性能的探究
RecycleView数据缓存与显示性能的探究Android开发中,我们经常会接触到需要使用RecycleView实现的需求;列表数目少的时候可以不考虑数据的缓存实现机制;但是当数据量很大的时候,比如可能有100万条记录,那么就需要考虑数据的缓存机制了;如果100万条记录都是放在List中,那么肯定会产生内存泄露的问题。 缓存的本质从技术上上来说是APP运行性能和资源占用的平衡
2017-03-14 18:15:11
1050
原创 Android中RecycleView的简单介绍
Android近几年面对开发者提供了不少新控件,其中我觉得现在最成功的要属于RecycleView了;下面我给大家分析为什么我觉得他是最成功的。说到RecycleView,不得不提出ListView;ListView在使用的时候我们都知道,在使用的时候需要自定义一个Adapter,这个Adapter的主要作用就是:1:获取List条目数量 2:获取每一个条目的布局视图 3:条目缓存策略
2017-01-25 10:56:46
706
原创 Android布局优化一之设计篇
在项目中遇到了一个需求,就是模仿系统的选择应用打开文件的弹出框来实现自己的一个类似的弹出框;要求和系统的一样,高度可以自适应的变化;系统的如下: 最开始的设计思路是,自己用代码计算ListView的高度,在页面构建的时候,动态设置进去。不过后面想了下,如果能够不自己计算高度,不动态设置,是不是性能会好一些呢? 分析类似的布局,顶部,中间,底部;其中顶部和底部的高度不变,就只是中间
2016-04-17 21:19:50
452
原创 Android NDK使用之--用pthread实现多线程
Android系统本身包括Java和Linux内核;因此在Android应用中实现多线程就可以是基于Java上的和基于Linux上的;今天本文介绍的就是Android利用Linux下的pthread来实现多线程;大概思路如下: 我们将异步任务需要实现的方法在Java中定义,但是运行异步任务的线程交给pthread实现; 因此首先设计一个接口,作为异步任务的业务接口
2015-12-16 21:23:02
5305
原创 Android多线程应用之-加载图片列表
Android加载图片列表,估计在很多应用中都会涉及到;固然,有许多开源框架提供了很方便的使用方法;并且相当稳定,但是如果不会自己实现,那么我相信遇到问题后就不会自己解决,只会依托于百度或者谷歌;这样,我认为不是你想要的结果吧;这几天我就自己设计实现了一下这个需求: 首先,分析如下:需求是加载图片列表,那么我需要完成以下的基本过程: (一):下载图片
2015-11-21 13:59:07
574
原创 Android系统运行架构之--生产-消费者模型详解
一个系统是如何运行起来的?通过安卓的源码分析我们大概可以知道,Android在驱动层,在上层都采取生产-消费者模型来构建整个系统;因此对于生产-消费者模型的理解,就显得十分重要;首先通过下图,让大家对生产-消费者模型有一个初步认识: 生产者负责向队列提交任务,消费者从队列取出任务,然后进行消费; 有人问,为什么要设计个这么个模型来用在软件开发中;因为这个模型很简单,很方便的将一个
2015-11-17 17:42:09
1853
2
原创 Android开发之IntentService和HandlerThread分析
Android开发之IntentService和HandlerThread分析近期有一个项目需要用到Service,Service默认情况下是在UI主线程运行的;因此为了防止出现停止响应对话框,防止界面卡住,需要在Service中启动异步线程来进行任务处理; 有一个很方便的封装好的对象就是IntentService;源码如下: 先看几个定义的变量: private volatile Lo
2015-11-13 16:52:02
422
原创 Android架构之从startActivity追踪分析Android系统架构
一个成熟的应用或者系统框架应该是可以根据一角来分析出整体的;因此在Android系统方面也不例外;今天我通过追踪startActivity过程来分析一下Android的系统流程;首先我追踪到:Activity.java: @Override public void startActivity(Intent intent) { this.startActivity(intent
2015-09-09 16:20:03
509
原创 Android界面动画初探之--探索侧边栏折叠效果的实现
不多说,看看效果先: 这就是今天要实现的效果;貌似这种效果以前有人实现过;今天我根据自己的探索带领大家来实现这个效果; 我记得在前面讲过自定义ViewGroup的侧边栏实现原理;http://blog.youkuaiyun.com/jike0901xuye/article/details/47804115 在这个里面我们知道了如何很方便的实现平移动画;很方便的处理触摸事件的焦点问题;今天我接着上面的知
2015-09-03 20:30:04
1661
原创 Android数据序列化之对Parcelable和Serializable的理解
学习Java的时候,我们都知道有Java序列化一说;序列化后的对象,数据在Java各个平台上都可以完美的还原出来;因此对于Java来说,远程传输数据对象就需要先序列化;因此Serializable接口的序列化,仅仅在Java虚拟机存在的时候有效,但是到达底层以后,根本无法有效翻译; 而Android的跨进程通信是需要经过binder驱动的;Java下面还有C++一层数据;因此实现Pa
2015-09-01 14:40:31
362
原创 Android多线程基础之从Looper源码深度分析
谈到Android的多线程,绕不开Looper,首先我们看看一般来说是Android是如何进行线程间通信的: * <pre> * class LooperThread extends Thread { * public Handler mHandler; * * public void run() { * Looper.prepare();
2015-09-01 10:14:27
502
原创 Android自定义View之侧边栏初探
前面写了几篇关于进程/线程原理的;感觉和应用层关系不大;但是实际上,写代码和做事情一样,都注重的是一个严谨的思维习惯;如果你真的深刻的理解了底层进程/线程交互模型,内存管理等;那么对你做APP也是有很大帮助的;比如为进程分配资源的时候,系统的一套思路就很值得借鉴;就能够避免应用中的内存问题;而管理多线程的思路更是值得在开发中借鉴。好了废话不多说;现在回到本章的主题,Android中从侧边栏的实现看自
2015-08-20 10:27:49
1014
原创 Android进程通信之binder驱动源码的理解
首先我们看binder开始定义的一些链表://设置对象的访问方式为互斥的static DEFINE_MUTEX(binder_lock);static DEFINE_MUTEX(binder_deferred_lock);static DEFINE_MUTEX(binder_mmap_lock);//创建一些双向链表static HLIST_HEAD(binder_procs);stat
2015-08-19 15:48:37
630
原创 Android进程间通信模型之思考Binder和Service_manager的模型
上面两节中介绍了Android采用的进程模型;进程间通信的难点和重点在于如何安全又高效的让进程间进行数据共享(通信);由于操作系统是按照进程分配资源的,而进程互相是不知道对方在哪个内存区域;因此进程间通信的最好模型就是找一个中间人,这个中间人负责传递信息;在Android中,这个中间人是由2个角色扮演的;一个是Binder,Binder是一个驱动,负责为进程分配内存;进程通过Binder获取到系统
2015-08-16 11:40:22
532
原创 Android底层原理之从Service_manager源码分析Android进程间通信过程
上一章节我们看到了binder原理;大家了解到,Binder仅仅是一个进程操作的中介;提供内存申请;提供根据指定内存地址读写数据而已;而Binder机制需要运转的话,需要有一个进程专门负责根据名字查询岁对应进程的内存地址的;在Android中,这个进程就是Service_manager;今天我们分析他的源码:首先从main入口开始:int main(int argc, char **argv){
2015-08-16 11:14:00
710
原创 Android底层原理之从Binder源码分析Android进程间通信过程
本文从Binder源码中分析Android底层进程间通信的过程;希望大家能耐心看下去; 首先看头文件:#include <inttypes.h>#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <unistd.h>#include <fcntl.h>#include <sys/mman.h>#include
2015-08-15 19:52:18
1296
原创 Android应用开发原理之从源码分析看Linearlayout、Relativelayout,Framelayout的布局差别(Framelayout分析)
现在剩下Framelayout了; 直接先看onlayout: @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { layoutChildren(left, top, right, bottom, false /* no force le
2015-08-14 17:16:03
1334
原创 Android应用开发原理之从源码分析看Linearlayout、Relativelayout,Framelayout的布局差别(Relativelayout分析)
前面说过Linearlayout,现在研究下Relativelayout的排版源码实现; 首先还是找到onlayout源码:@Override protected void onLayout(boolean changed, int l, int t, int r, int b) { // The layout has actually already been perf
2015-08-14 15:29:15
855
原创 Android应用开发原理之从源码分析看Linearlayout、Relativelayout,Framelayout的布局差别(Linearlayout分析)
我们在布局中经常使用Linearlayout,Relativelayout和FrameLayout这三个容器。在使用中会发现这三个容器在对子组件排版时会有所不同。今天带领大家从源码层面简要分析下为什么会不同。 首先,大家要掌握一个基础知识,即ViewGroup的绘制流程 首先:要度量子组件的大小(onMeasure) 其次,要将位置确定好(onLayout) 最后,在屏幕上进行绘制(draw
2015-08-14 10:51:28
2024
1
原创 Android应用开发原理之从ViewGroup源码分析ViewGroup的事件分发机制
上面我们分析了View的事件分发源码;现在我们在分析下ViewGroup的事件分发源码 首先ViewGroup是继承View的,但是看源码貌似和View中的有些部分有点不一样。 我主要分析不同的地方: 代码如下: /** * {@inheritDoc} */ @Override public boolean dispatchTouchEvent(Motion
2015-08-13 17:36:07
422
原创 Android应用开发原理之从View源码挖掘View中的事件传递机制
最近不怎么忙,就想着将自己开发中的一些知识点总结起来,方便以后自己在需要的时候进行查阅。 谈论起View我们都听熟悉的,因为一个Android上的界面组件,最初都是由View继承过来的。所以要想了解界面组件的一些事情,还得要从View说起。 大家常常都在重写onTouchevent,来实现一些自己想要的事件结果,所以我从onTouchevent开始追踪源码,最后追踪到了这个方法里面: pu
2015-08-13 16:39:18
458
原创 白话Android进程交互之--Binder原理
房子是由一块块砖建起来的;而操作系统也一样,是由一个个简单的模块组成。因此对待操作系统的底层原理,我们应该分解开,先看单独的功能,然后在综合起来看之间是如何配合的。很幸运的是,系统底层在设计上有很多复用的地方。因此当我们研究完一部分功能以后,再看另一部分,总会有似曾相识的感觉。 在操作系统的实现中,有关进程的问题还真不少。这是因为操作系统是以进程为单位分配资源,又牵扯到进程内的资源保护问题;因此进
2015-08-13 10:14:40
460
原创 Android应用开发技巧之更方便的使用Sqlite
做应用的大多离不开数据库的支持,但是就是这么常用的对象,你有没有想过让他更方便的使用呢?什么是更方便,我的定义就是不用在每次需要用它的时候对SQL语句做过多的关心,我们应该更多的关心每一个字段的含义;也就是我们应用开发更多的关心应该在业务上,而不是在SQL语句的拼接中。 因此本人要带领大家从0到1到开始一步步优化SQLite的使用。 整体思路如下: 首先,对于SQ
2015-08-13 09:17:04
335
原创 Android应用开发多线程基础之Handler,Looper,Message,MessageQueue,Runnable之间的关系
接触到安卓开发,大家会发现这几个对象的应用频率几乎可以说是就和Intent差不多;我今天来给大家介绍这几个对象,就是为了让大家很通俗的理解这个在安卓系统中很重要的多线程之间交互模型。 首先谈论多线程,多线程和多进程不同;多进程的难点在于如何互相交互数据,由于操作系统对进程的保护措施,因此进程之间无法直接访问对方的内存区域;也就无法直接进行数据的交互;而同一进程内多线程是共享一个进
2015-08-12 12:13:31
577
原创 Android应用设计之实现多线程框架
Android应用设计之实现多线程框架做了Android开发满2年了,感觉在开发中用的很多的就是多线程了;由于在现代的计算机中CPU核数越来越多,因此操作系统底层就向多线程方向发展。因此为了跟上时代,开篇就将平时用的比较多的多线程开发原理吧。 本文需要掌握一定的Android基础;比如Handler,Message,Looper等的关系;还需要掌握一些Java线程池的知识,方能更好的理解本文。
2015-08-11 17:58:46
622
原创 前言(必读)
白话设计模式系列,宗旨不在于介绍每一个设计模式的具体例子以及用法;宗旨在于介绍设计模式的思想;从而达到手中无剑胜有剑。当然,尽信书不如无书,本文权当作一种参考。
2015-08-11 09:39:24
245
快速命名文件法(快速命名文件,适用于要命名批量的有关联的文件)
2010-03-28
USB Detective 优盘自动调用杀毒软件工具
2009-12-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人