11 jike0901xuye

尚未进行身份认证

我要认证

暂无相关简介

等级
TA的排名 13w+

Android 热修复、插件化、双开基本原理

最近几年,安卓热门技术中,有关热修复、插件化、双开等等技术应用的比较广泛。本文从最简单直接的一个例子入手,分析其中的技术原理和构建思路。有3个相关的基本知识点,java中的反射、设计模式中的代理模式、安卓中的类加载反射的主要作用就是可以根据类的完整包名+类名,可以读取类里面定义的字段、方法名等等;还可以针对一个对象,对对象里面的字段进行写入替换;反射执行对象的方法等等。重点在对字段进行替换写入...

2020-04-23 11:56:54

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

使用protobuf作为http通讯格式

protobuf谷歌的开源序列化项目,类似的还有于json,xml等组织格式;据说protobuf的序列化占用的数据量最下,传输效率最高,并且作为服务器开发者,只需要掌握.proto文件的书写方式,就可以生成不同语言的序列化对象。这次讲解一下如何在服务器和安卓客户端之间利用protobuf传输数据。 测试的接口是登录功能:我写的proto文件如下:syntax = "proto2";messag

2017-05-04 21:33:26

Android RecycleView加载速度优化

Android RecycleView加载速度优化Android开发中,经常会碰到列表加载优化的问题。之前是ListView,现在经常用到RecycleView;不管怎么换控件,优化的思路始终是一样的,那就是将当前的资源尽量都放在用户需要的地方,仅加载用户需要看到的,用户不会看到的我们不需要加载。 思路有好几个,第一种是实现一个和RecycleView加载页面算法一样的队列存储结构,

2017-03-16 17:03:35

RecycleView数据缓存与显示性能的探究

RecycleView数据缓存与显示性能的探究Android开发中,我们经常会接触到需要使用RecycleView实现的需求;列表数目少的时候可以不考虑数据的缓存实现机制;但是当数据量很大的时候,比如可能有100万条记录,那么就需要考虑数据的缓存机制了;如果100万条记录都是放在List中,那么肯定会产生内存泄露的问题。 缓存的本质从技术上上来说是APP运行性能和资源占用的平衡

2017-03-14 18:15:11

Android中RecycleView的简单介绍

Android近几年面对开发者提供了不少新控件,其中我觉得现在最成功的要属于RecycleView了;下面我给大家分析为什么我觉得他是最成功的。说到RecycleView,不得不提出ListView;ListView在使用的时候我们都知道,在使用的时候需要自定义一个Adapter,这个Adapter的主要作用就是:1:获取List条目数量 2:获取每一个条目的布局视图 3:条目缓存策略

2017-01-25 10:56:46

Android布局优化一之设计篇

在项目中遇到了一个需求,就是模仿系统的选择应用打开文件的弹出框来实现自己的一个类似的弹出框;要求和系统的一样,高度可以自适应的变化;系统的如下: 最开始的设计思路是,自己用代码计算ListView的高度,在页面构建的时候,动态设置进去。不过后面想了下,如果能够不自己计算高度,不动态设置,是不是性能会好一些呢? 分析类似的布局,顶部,中间,底部;其中顶部和底部的高度不变,就只是中间

2016-04-17 21:19:50

Android NDK使用之--用pthread实现多线程

Android系统本身包括Java和Linux内核;因此在Android应用中实现多线程就可以是基于Java上的和基于Linux上的;今天本文介绍的就是Android利用Linux下的pthread来实现多线程;大概思路如下: 我们将异步任务需要实现的方法在Java中定义,但是运行异步任务的线程交给pthread实现; 因此首先设计一个接口,作为异步任务的业务接口

2015-12-16 21:23:02

Android多线程应用之-加载图片列表

Android加载图片列表,估计在很多应用中都会涉及到;固然,有许多开源框架提供了很方便的使用方法;并且相当稳定,但是如果不会自己实现,那么我相信遇到问题后就不会自己解决,只会依托于百度或者谷歌;这样,我认为不是你想要的结果吧;这几天我就自己设计实现了一下这个需求: 首先,分析如下:需求是加载图片列表,那么我需要完成以下的基本过程: (一):下载图片

2015-11-21 13:59:07

Android系统运行架构之--生产-消费者模型详解

一个系统是如何运行起来的?通过安卓的源码分析我们大概可以知道,Android在驱动层,在上层都采取生产-消费者模型来构建整个系统;因此对于生产-消费者模型的理解,就显得十分重要;首先通过下图,让大家对生产-消费者模型有一个初步认识: 生产者负责向队列提交任务,消费者从队列取出任务,然后进行消费; 有人问,为什么要设计个这么个模型来用在软件开发中;因为这个模型很简单,很方便的将一个

2015-11-17 17:42:09

Android开发之IntentService和HandlerThread分析

Android开发之IntentService和HandlerThread分析近期有一个项目需要用到Service,Service默认情况下是在UI主线程运行的;因此为了防止出现停止响应对话框,防止界面卡住,需要在Service中启动异步线程来进行任务处理; 有一个很方便的封装好的对象就是IntentService;源码如下: 先看几个定义的变量: private volatile Lo

2015-11-13 16:52:02

Android架构之从startActivity追踪分析Android系统架构

一个成熟的应用或者系统框架应该是可以根据一角来分析出整体的;因此在Android系统方面也不例外;今天我通过追踪startActivity过程来分析一下Android的系统流程;首先我追踪到:Activity.java: @Override public void startActivity(Intent intent) { this.startActivity(intent

2015-09-09 16:20:03

Android界面动画初探之--探索侧边栏折叠效果的实现

不多说,看看效果先: 这就是今天要实现的效果;貌似这种效果以前有人实现过;今天我根据自己的探索带领大家来实现这个效果; 我记得在前面讲过自定义ViewGroup的侧边栏实现原理;http://blog.csdn.net/jike0901xuye/article/details/47804115 在这个里面我们知道了如何很方便的实现平移动画;很方便的处理触摸事件的焦点问题;今天我接着上面的知

2015-09-03 20:30:04

Android数据序列化之对Parcelable和Serializable的理解

学习Java的时候,我们都知道有Java序列化一说;序列化后的对象,数据在Java各个平台上都可以完美的还原出来;因此对于Java来说,远程传输数据对象就需要先序列化;因此Serializable接口的序列化,仅仅在Java虚拟机存在的时候有效,但是到达底层以后,根本无法有效翻译; 而Android的跨进程通信是需要经过binder驱动的;Java下面还有C++一层数据;因此实现Pa

2015-09-01 14:40:31

Android多线程基础之从Looper源码深度分析

谈到Android的多线程,绕不开Looper,首先我们看看一般来说是Android是如何进行线程间通信的: * <pre> * class LooperThread extends Thread { * public Handler mHandler; * * public void run() { * Looper.prepare();

2015-09-01 10:14:27

Android自定义View之侧边栏初探

前面写了几篇关于进程/线程原理的;感觉和应用层关系不大;但是实际上,写代码和做事情一样,都注重的是一个严谨的思维习惯;如果你真的深刻的理解了底层进程/线程交互模型,内存管理等;那么对你做APP也是有很大帮助的;比如为进程分配资源的时候,系统的一套思路就很值得借鉴;就能够避免应用中的内存问题;而管理多线程的思路更是值得在开发中借鉴。好了废话不多说;现在回到本章的主题,Android中从侧边栏的实现看自

2015-08-20 10:27:49

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

Android进程间通信模型之思考Binder和Service_manager的模型

上面两节中介绍了Android采用的进程模型;进程间通信的难点和重点在于如何安全又高效的让进程间进行数据共享(通信);由于操作系统是按照进程分配资源的,而进程互相是不知道对方在哪个内存区域;因此进程间通信的最好模型就是找一个中间人,这个中间人负责传递信息;在Android中,这个中间人是由2个角色扮演的;一个是Binder,Binder是一个驱动,负责为进程分配内存;进程通过Binder获取到系统

2015-08-16 11:40:22

Android底层原理之从Service_manager源码分析Android进程间通信过程

上一章节我们看到了binder原理;大家了解到,Binder仅仅是一个进程操作的中介;提供内存申请;提供根据指定内存地址读写数据而已;而Binder机制需要运转的话,需要有一个进程专门负责根据名字查询岁对应进程的内存地址的;在Android中,这个进程就是Service_manager;今天我们分析他的源码:首先从main入口开始:int main(int argc, char **argv){

2015-08-16 11:14:00

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

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv1
    勤写标兵Lv1
    授予每个自然周发布1篇到3篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。