安卓应用研发
文章平均质量分 78
猴子搬来的救兵Castiel
关注安卓安全与安卓研发
展开
-
彻底弄懂Activity四大启动模式
最近有几位朋友给我留言,让我谈一下对Activity启动模式的理解。我觉得对某个知识点的理解必须要动手操作才能印象深刻,所以今天写一篇博文,结合案例理解Activity启动模式。由于之前看过“区长”的一篇博文(文章结尾处有链接)深受启发,因此本文是在那篇文章的基础上更加全面的讲解。 众所周知当我们多次启动同一个Activity时,系统会创建多个实例,并把它们按照先进后出的原则一一放入原创 2016-05-24 16:04:24 · 104322 阅读 · 19 评论 -
Android6.0源码解读之Activity点击事件分发机制
本篇博文是Android点击事件分发机制系列博文的第四篇,主要是从解读Activity类的源码入手,根据源码理清Activity点击事件分发原理,并掌握Activity点击事件分法机制。特别声明的是,本源码解读是基于最新的Android6.0版本。 Android中通常点击事件用MotionEvent来表示,当一个点击操作发生时,事件最先传递给当前的Activity,由Activity的d原创 2016-10-23 22:53:38 · 6605 阅读 · 0 评论 -
Android6.0源码解读之ViewGroup点击事件分发机制
本篇博文是Android点击事件分发机制系列博文的第三篇,主要是从解读ViewGroup类的源码入手,根据源码理清ViewGroup点击事件分发原理,明白ViewGroup和View点击事件分发的关系,并掌握ViewGroup点击事件分法机制。特别声明的是,本源码解读是基于最新的Android6.0版本。ViewGroup事件分发中的三个重要方法的源码解析 关于ViewGroup事件分发,我们原创 2016-10-24 16:01:48 · 6124 阅读 · 0 评论 -
细说Android框架设计三剑客MVC、MVP和MVVM
最近几年的移动端开发越来越火,功能越来越强大,处理业务越来越复杂,因此对系统扩展性的要求越来越高。而为了更好地进行移动端架构设计,我们最常用的就是MVC和MVP,今天本篇博客就和大家一起聊一聊这两种框架设计。MVC框架MVC的定义 MVC (Model-View-Controller):M是指逻辑模型,V是指视图模型,C则是控制器。使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以原创 2016-10-14 11:44:41 · 17628 阅读 · 12 评论 -
Android6.0触摸事件分发机制解读
本篇博文是Android触摸事件分发机制系列博文的第一篇,带领大家从全局掌握Android触摸事件分发机制。特别声明的是,本源码解读是基于最新的Android6.0版本。为什么要解读触摸事件分发机制1.掌握View事件分发机制 2.为解决View滑动冲突提供理论支持 3.了解Android最新源码改动Touch触摸事件 在Android中Touch触摸事件主要包括点击(onClick)原创 2016-10-24 18:00:17 · 10899 阅读 · 2 评论 -
Android屏幕适配
(一)背景知识为什么需要屏幕适配 Android是一个开放的系统,全球各种用户、手机企业、OEM厂商都可以对Android系统进行定制,这就导致了Android系统的碎片化问题。其中对于开发者来讲工作中最常碰到的就是屏幕碎片化,那么如何解决屏幕碎片化问题,实现最优的屏幕适配,是每个Android开发者所要面临的问题,这里我整合CSDN博主赵凯强的关于Android屏幕适配的博文的知识,写成博客原创 2016-10-26 16:19:48 · 7645 阅读 · 2 评论 -
彻底掌握Android多分包技术MultiDex-用Ant和Gradle分别构建(一)
Andrid多分包技术在大型项目编译方面起着至关重要的作用,作为一个高级开发者我们有必要掌握此技能,现在我带领大家统一学习此项技能,并教会大家分别使用Ant和Gradle构建。什么是Dex Dex是Dalvik VM executes的全称,即Android Dalvik执行程序。在Android中单个Dex文件所能包含的最大方法数为65536,这包含Android FrameWork、依赖的原创 2016-09-30 18:07:09 · 13361 阅读 · 8 评论 -
彻底掌握Android多分包技术MultiDex-用Ant和Gradle分别构建(二)
在上一篇博客中,我给大家详细介绍了ant实现Android多分包技术,具体可以点击查看:彻底掌握Android多分包技术MultiDex-用Ant和Gradle分别构建(一);接下来的这篇博客我将带领大家一起学习使用Gradle构建Android项目多分包。增加多分包配置 说到Gradle,就不得不提到使用AndroidStudio进行开发,首先看一下在AndroidStudio中我们整个项目原创 2016-10-01 16:41:10 · 7593 阅读 · 3 评论 -
Android热修复(Hot Fix)案例全剖析(二)
在上一篇文章中,我们已经生成了用于修复Bug的classes2.dex补丁包,通常我们会在APP后台子线程中自动调用热修复接口,并下载修复补丁,这里为了方便演示,我们把已经下载好的dex补丁文件放到SD卡中,然后将下载的修复补丁拷贝到应用的内部缓存目录中cacheDir,之所以这样做是因为下一步我们需要使用类加载器ClassLoader在内部缓存中加载classese.dex包。原创 2016-10-03 21:32:17 · 3408 阅读 · 5 评论 -
Android热修复(Hot Fix)案例全剖析(一)
说到热修复技术,我们不得不先谈一下什么是冷修复。冷修复 当我们发现上线的应用APK存在Bug,我们通过发布新的应用APK,去替换旧的应用APK,以达到解决Bug的目的,但是这样做存在很大的缺点,需要用户二次下载APK,浪费用户流量,费时、费力、用户体验差。热修复 当我们发现上线的应用APK存在Bug,我们在用户使用过程中就把Bug修复了,优点是其过程中用户不需要把应用程序停止、卸载、重新原创 2016-10-02 16:25:38 · 4912 阅读 · 2 评论 -
getApplication()和getApplicationContext()区别
相同二者使用结果相同,我们写个代码分别打印二者返回结果,发现两个方法获取的是同一个对象。原创 2016-10-04 18:22:02 · 12535 阅读 · 0 评论 -
自定义Android IOC框架
IOC-控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。这段百度对IOC框架的解释,对于Java开发者来讲最著名的IOC框架莫过于Spring,而原创 2016-10-18 17:13:34 · 4832 阅读 · 2 评论 -
DexClassLoader和PathClassLoader的区别
在使用Java虚拟机时,我们经常自定义继承自ClassLoader的类加载器。然后通过defineClass方法来从一个二进制流中加载Class。而在Android中我们无法这么使用,Android中ClassLoader的defineClass方法具体是调用VMClassLoader的defineClass本地静态方法。而这个本地方法什么都没做,只是抛出了一个“UnsupportedOperati原创 2016-10-05 10:53:00 · 15165 阅读 · 2 评论 -
详解Android插件化开发-资源访问
动态加载技术(也叫插件化技术),当项目越来越庞大的时候,我们通过插件化开发不仅可以减轻应用的内存和CPU占用,还可以实现热插拔,即在不发布新版本的情况下更新某些模块。 通常我们把安卓资源文件制作成插件的形式,无外乎有一下几种: zip、jar、dex、APK(未安装APK、安装APK) 对于用户来讲未安装的APK才是用户所需要的,不安装、不重启,无声无息的加载资源文件,这正是我原创 2016-10-05 15:32:51 · 7316 阅读 · 2 评论 -
Android增量更新流程讲解
为什么需要增量更新:节省流量,节省流量,节省流量,重要的事情说三遍! 增量更新不仅可以让用户在客户端实现省流量更新,更重要的是增量更新还可以实现服务器端流量的节省,为网站节省成本。增量更新的原理 服务端将应用的旧版本Apk与新版本Apk做差分处理,得到新版APK更新部分的差分包,例如旧版本的APK有6M,新版的有10M,更新的部分则可能只有4M左右(这4M文件除了包含更新内容以外,还包含原创 2016-10-06 17:24:47 · 6440 阅读 · 6 评论 -
LinkedHashMap最佳实践:LruCache
而谷歌大概从SDK21开始,提供LruCache这个工具类(此类在android-support-v4的包中提供) ,用于作为实现内存缓存技术的解决方案。这个类非常适合用来缓存图片,它的主要算法原理是把最近使用的对象用强引用存储在 LinkedHashMap 中,并且把最近最少使用的对象在缓存值达到预设定值之前从内存中移除。原创 2016-10-08 15:59:19 · 3308 阅读 · 0 评论 -
线性表数据结构解读(六)链式哈希表结构-LinkedHashMap
上一篇文章我和大家一起解读了HashMap的原理源码,各位童鞋可以点击链接查看线性表数据结构解读(五)哈希表结构-HashMap 这次我们一起来看一下LinkedHashMap,它保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用LinkedHashMap。就LinkedHashMap而言,它继承了HashMap,底层使用哈希表与双向链表来保存所有元素。其基本操作与父类HashM原创 2016-10-08 11:00:11 · 3659 阅读 · 0 评论 -
Android开启手电筒功能(完美适配Android4x,5x,6x)
最近在研究开启安卓手电筒功能,总结了下Android4x、5x、6x的手电筒开启方法,写成公共方法,分享给大家。原创 2016-11-18 12:01:53 · 18024 阅读 · 6 评论 -
Android6.0源码解读之View点击事件分发机制
本篇博文是Android点击事件分发机制系列博文的第二篇,主要是从解读View类的源码入手,根据源码理清View点击事件分发原理,并掌握View点击事件分法机制。特别声明的是,本源码解读是基于最新的Android6.0版本。各位童鞋可以参考下面链接进行系统学习 (一)Android6.0触摸事件分发机制解读(二)Android6.0源码解读之View点击事件分发机制(三)Android6.0源码解原创 2016-10-23 21:22:22 · 8137 阅读 · 2 评论 -
AndroidStudio设置package presentation
最近有小伙伴问我AndroidStudio中的项目package默认的布局方式是嵌套型包结构,如何改为平级型包结构,在此我给大家科普一下AndroidStudio的package presentation配置方法。首先,我们用AndroidStudio新疆项目,默认的包结构如下:我们点击项目根目录右上角的小齿轮按钮,然后勾选Flatten Packages选项即可。改为平级包结构。原创 2016-10-13 16:37:30 · 4067 阅读 · 0 评论 -
JSON中getInt()和optInt()的区别
最近在用org.json这个包解析json的时候,发现谷歌提供两种不同的数据类型获取方法,比如说针对Int类型,提供了getInt()和optInt()两种方式。原创 2016-05-31 17:21:13 · 17295 阅读 · 0 评论 -
安卓开发中内存问题分析(一)工具篇
内存泄漏和内存溢出是安卓开发中经常碰到的问题,如何能够快速有效的发现并追踪内存泄漏或者内存溢出的源头,是每个开发者都需要掌握的技巧,今天我给大家带来常见的内存分析工具使用方法,希望对大家今后的开发带来帮助。原创 2016-04-07 15:57:55 · 12802 阅读 · 2 评论 -
最全面的AndroidStudio配置指南总结-包括护眼模式
使用AndroidStudio开发APP已有半年多的时间了,从刚开始的不习惯到慢慢适应再到逐渐喜欢上AndroidStudio,中间的过程颇有一番曲折,现在把自己对AndroidStudio的配置心得总结下来,分享给大家,希望给后来人带来方便(强迫症童鞋的护眼模式设置方法)原创 2016-05-06 16:37:34 · 25710 阅读 · 12 评论 -
彻底搞定Android开发中软键盘的常见问题
软键盘显示的原理 软件盘的本质是什么?软键盘其实是一个Dialog。 InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的Window的某些参数(如Gravity)进行了设置,使之能够在底部或者全屏显示。原创 2016-06-02 15:11:26 · 84743 阅读 · 20 评论 -
老司机谈APK瘦身套路-图片资源篇
APK作为Android系统安装包的文件格式,一直备受广大用户的关注,APK越是臃肿肥大,在下载安装过程中,它们耗费的流量会越多,安装等待时间也会越长;对于产品本身,意味着下载转化率会越低(因为竞品中,用户有更多机会选择那个体验最好,功能最多,性能最好,包最小的);对于研发来说,是一种优化改进技术的机会。今天老司机将带领大家一起探讨下APK脂肪含量最高的图片资源瘦身套路。原创 2016-06-24 14:59:21 · 10640 阅读 · 3 评论 -
老司机谈APK瘦身套路-项目优化篇
在上一篇文章中,老司机带领大家一起学习了图片资源的瘦身套路,收到了很多中学生读者的好评。 想了解的童鞋请点击:http://blog.csdn.net/mynameishuangshuai/article/details/51752832 这次,老司机继续开车,给大家分享APK瘦身套路之项目优化篇。为了更好的跟大家说明瘦身套路,我把优化分为项目结构瘦身和代码瘦身两部分。原创 2016-06-27 08:58:42 · 7242 阅读 · 0 评论 -
解惑Android的post()方法究竟运行在哪个线程中
Android中我们常用的post()方法大致有两种情况:1.如果post方法是handler的,则Runnable执行在handler依附线程中,可能是主线程,也可能是其他线程下面是Handler里面的post方法 /** * Causes the Runnable r to be added to the message queue. * The runnable wi原创 2016-06-28 22:14:18 · 10573 阅读 · 0 评论 -
手把手教你AndroidStudio多渠道打包
最近不断有朋友向我咨询AndroidStudio多渠道的打包方法,今天整理一下之前积累的打包套路,写一篇文章,手把手的教给大家。原创 2016-06-29 15:23:39 · 65642 阅读 · 13 评论 -
eclipse adt 选择ndk目录时提示“Not a valid NDK directory”
eclipse adt 选择ndk目录时提示“Not a valid NDK directory”原创 2016-06-14 18:05:44 · 12542 阅读 · 9 评论 -
你必须弄懂的Intent Filter匹配规则
Intent简介 Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。原创 2016-06-14 17:14:25 · 38705 阅读 · 6 评论 -
Android中Service和Thread的区别
最近有位朋友问我,Android中Service和Thread有什么区别,为什么有时候放着方便的Thread不用,而要使用Service呢? 要解答这个问题,首先我们要弄明白Service和Thread分别是怎么定义的:Thread 是程序执行的最小单元,它是分配CPU的基本单位。可以用 Thread 来执行一些异步的操作。Service是Android的四大组件之一,被用来执行长时间的后台任原创 2016-07-04 16:11:05 · 5824 阅读 · 1 评论 -
Android严苛模式StrictMode使用详解
StrictMode类是Android 2.3 (API 9)引入的一个工具类,可以用来帮助开发者发现代码中的一些不规范的问题,以达到提升应用响应能力的目的。举个例子来说,如果开发者在UI线程中进行了网络操作或者文件系统的操作,而这些缓慢的操作会严重影响应用的响应能力,甚至出现ANR对话框。为了在开发中发现这些容易忽略的问题,我们使用StrictMode,系统检测出主线程违例的情况并做出相应的反应,原创 2016-06-23 12:00:59 · 26167 阅读 · 1 评论 -
Android应用进程防杀指南1-常用套路
> 1.如果service正在调用onCreate,onStartCommand或者onDestory方法,那么用于当前service的进程则变为前台进程以避免被killed。> 2.如果当前service已经被启动(start),拥有它的进程则比那些用户可见的进程优先级低一些,但是比那些不可见的进程更重要,这就意味着service一般不会被killed.> 3.如果客户端已经连接到service原创 2016-10-09 17:00:08 · 36826 阅读 · 0 评论 -
Android应用进程防杀指南2-双进程守护
假设我们的APP中开启了两个Service,分别是A和B,那么:如果A守护B,则B挂掉的同时,A就应该把B启动起来,反之亦然,也就是说A和B应该是互相守护,无论谁被杀掉,对方就把它拉起来。原创 2016-10-09 17:53:22 · 23992 阅读 · 22 评论 -
Android应用进程防杀指南3-JobService
本篇博文,我将带领大家学习更高端的APP进行防杀技巧,该技巧除了能够应对卫士、管家的清杀以外,更能够在类似于某米、某为系统的清理内存软件清理下确保进程存活下来。它就是我们今天的主角JobShedulerService。通常在5.0之前,我们可以使用广播或者闹钟等方式让我们的进程防杀自启,而5.0以后的Android系统,我们就可以使用JobService原创 2016-10-10 12:28:39 · 13161 阅读 · 9 评论 -
Android自实现百分比布局
在开发中,组件布局是大家每日开发必须要面对的工作,对于Android来说提供五种常用布局,分别是:LinearLayout(线性布局)TableLayout(表格布局)RelativeLayout(相对布局)AbsoluteLayout(绝对布局)FrameLayout(框架布局) 但是,开发中如果可以按照百分比的方式进行界面布局,将会对我们的适配工作带来许多便利。前段时间,谷歌正原创 2016-10-11 20:17:48 · 2846 阅读 · 0 评论 -
简单实现Android图片三级缓存机制
用户在使用我们的APP时,通常会重复浏览一些图片,这时如果每一次浏览都需要通过网络获取图片,那么将会非常流量。为了节省用户流量,提高图片加载效率,我们通常使用图片三级缓存策略,即通过网络、本地、内存三级缓存图片,来减少不必要的网络交互,避免浪费流量。 网上已经有很多讲述图片三级缓存的策略,这次我也来实现一次三级缓存,其中用到了LRU+SoftReference关于LRU算法,可以参考我之前原创 2016-10-12 16:35:01 · 16581 阅读 · 4 评论 -
移动开发必知必会的六大数据统计平台(入门篇)
数据统计对于各位移动开发的童鞋并不陌生,小到Bug统计,大到数据分析,一款性能稳定、用户体验良好的APP一定离不开数据统计的支持,为此我将给大家科普一下常用的六大数据统计平台。原创 2017-05-19 17:07:56 · 13542 阅读 · 0 评论