自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (4)
  • 收藏
  • 关注

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

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

2020-04-23 11:56:54 820

原创 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 750

原创 使用protobuf作为http通讯格式

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

2017-05-04 21:33:26 14500

原创 Android RecycleView加载速度优化

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

2017-03-16 17:03:35 3157

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

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

2017-03-14 18:15:11 1009

原创 Android中RecycleView的简单介绍

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

2017-01-25 10:56:46 638

原创 Android布局优化一之设计篇

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

2016-04-17 21:19:50 411

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

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

2015-12-16 21:23:02 5179

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

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

2015-11-21 13:59:07 527

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

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

2015-11-17 17:42:09 1760 2

原创 Android开发之IntentService和HandlerThread分析

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

2015-11-13 16:52:02 391

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

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

2015-09-09 16:20:03 473

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

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

2015-09-03 20:30:04 1594

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

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

2015-09-01 14:40:31 331

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

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

2015-09-01 10:14:27 472

原创 Android自定义View之侧边栏初探

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

2015-08-20 10:27:49 931

原创 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 592

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

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

2015-08-16 11:40:22 492

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

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

2015-08-16 11:14:00 663

原创 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 1250

原创 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 1287

原创 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 808

原创 Android应用开发原理之从源码分析看Linearlayout、Relativelayout,Framelayout的布局差别(Linearlayout分析)

我们在布局中经常使用Linearlayout,Relativelayout和FrameLayout这三个容器。在使用中会发现这三个容器在对子组件排版时会有所不同。今天带领大家从源码层面简要分析下为什么会不同。 首先,大家要掌握一个基础知识,即ViewGroup的绘制流程 首先:要度量子组件的大小(onMeasure) 其次,要将位置确定好(onLayout) 最后,在屏幕上进行绘制(draw

2015-08-14 10:51:28 1940 1

原创 Android应用开发原理之从ViewGroup源码分析ViewGroup的事件分发机制

上面我们分析了View的事件分发源码;现在我们在分析下ViewGroup的事件分发源码 首先ViewGroup是继承View的,但是看源码貌似和View中的有些部分有点不一样。 我主要分析不同的地方: 代码如下: /** * {@inheritDoc} */ @Override public boolean dispatchTouchEvent(Motion

2015-08-13 17:36:07 371

原创 Android应用开发原理之从View源码挖掘View中的事件传递机制

最近不怎么忙,就想着将自己开发中的一些知识点总结起来,方便以后自己在需要的时候进行查阅。 谈论起View我们都听熟悉的,因为一个Android上的界面组件,最初都是由View继承过来的。所以要想了解界面组件的一些事情,还得要从View说起。 大家常常都在重写onTouchevent,来实现一些自己想要的事件结果,所以我从onTouchevent开始追踪源码,最后追踪到了这个方法里面: pu

2015-08-13 16:39:18 442

原创 白话Android进程交互之--Binder原理

房子是由一块块砖建起来的;而操作系统也一样,是由一个个简单的模块组成。因此对待操作系统的底层原理,我们应该分解开,先看单独的功能,然后在综合起来看之间是如何配合的。很幸运的是,系统底层在设计上有很多复用的地方。因此当我们研究完一部分功能以后,再看另一部分,总会有似曾相识的感觉。 在操作系统的实现中,有关进程的问题还真不少。这是因为操作系统是以进程为单位分配资源,又牵扯到进程内的资源保护问题;因此进

2015-08-13 10:14:40 423 1

原创 Android应用开发技巧之更方便的使用Sqlite

做应用的大多离不开数据库的支持,但是就是这么常用的对象,你有没有想过让他更方便的使用呢?什么是更方便,我的定义就是不用在每次需要用它的时候对SQL语句做过多的关心,我们应该更多的关心每一个字段的含义;也就是我们应用开发更多的关心应该在业务上,而不是在SQL语句的拼接中。 因此本人要带领大家从0到1到开始一步步优化SQLite的使用。 整体思路如下: 首先,对于SQ

2015-08-13 09:17:04 304

原创 Android应用开发多线程基础之Handler,Looper,Message,MessageQueue,Runnable之间的关系

接触到安卓开发,大家会发现这几个对象的应用频率几乎可以说是就和Intent差不多;我今天来给大家介绍这几个对象,就是为了让大家很通俗的理解这个在安卓系统中很重要的多线程之间交互模型。        首先谈论多线程,多线程和多进程不同;多进程的难点在于如何互相交互数据,由于操作系统对进程的保护措施,因此进程之间无法直接访问对方的内存区域;也就无法直接进行数据的交互;而同一进程内多线程是共享一个进

2015-08-12 12:13:31 556

原创 Android应用设计之实现多线程框架

Android应用设计之实现多线程框架做了Android开发满2年了,感觉在开发中用的很多的就是多线程了;由于在现代的计算机中CPU核数越来越多,因此操作系统底层就向多线程方向发展。因此为了跟上时代,开篇就将平时用的比较多的多线程开发原理吧。 本文需要掌握一定的Android基础;比如Handler,Message,Looper等的关系;还需要掌握一些Java线程池的知识,方能更好的理解本文。

2015-08-11 17:58:46 563

原创 前言(必读)

白话设计模式系列,宗旨不在于介绍每一个设计模式的具体例子以及用法;宗旨在于介绍设计模式的思想;从而达到手中无剑胜有剑。当然,尽信书不如无书,本文权当作一种参考。

2015-08-11 09:39:24 225

快速命名文件法(快速命名文件,适用于要命名批量的有关联的文件)

快速命名文件,看到有人把这种方法当做资源上传,竟然还要分,所以本人就把这种很简单的方法分享给大家,是三张图片,一看就懂的!

2010-03-28

图片压缩处理器,大小尺寸

在填写电子档案时,经常会遇到照片尺寸不合适等问题,此软件可解决此类问题

2010-01-14

USB Detective 优盘自动调用杀毒软件工具

USB Detective 优盘自动调用杀毒软件工具 版本 1.0.2009.428 USB Detective 可以在优盘插入计算机后,自动调用设定的杀毒软件对其进行病毒扫描,并可以在扫描完成以后自动从计算机中将优盘安全删除。适合在一些需要对优盘进行强制病毒检测的场合,例如专门的杀毒工作站、公用的计算机等。 使用说明 ======== 将软件包 USBDetective.rar 解压缩到本地计算机。运行 USBDetective.exe ,程序启动后最小化到系统托盘。双击系统托盘上的图标,显示程序主界面。在系统托盘图标上或主界面上点击鼠标右键,出现快捷菜单。通过快捷菜单可以实现下列功能:启动(Start)、停止(Stop)对优盘的监控,移除(Remove)指定的优盘或全部的优盘,对程序进行配置(Option),检测新版本(Detect New Version)等。 初次使用 USB Detectice 请通过快捷菜单下的 Options 对其进行设置。特别要设置杀毒程序主文件的位置,以瑞星2009全功能安全软件为例,设置的路径为“C:\Program Files\Rising\Ris\RsMain.exe”,其他杀毒软件类似。参数(Param)中“%Drive%”代表驱动器的通配符,用户可以根据不同的杀毒软件设置相应的参数。

2009-12-18

优盘杀毒辅助工具usbcleaner

一款小巧实用的优盘杀毒辅助工具,具有智能卸载,恢复染毒文件,在系统中对移动储备应用写保护等功能。

2009-12-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除