Android高手进阶
文章平均质量分 91
singwhatiwanna
有创新精神的Android技术分享者,Android资深工程师
展开
-
Android中MotionEvent的来源和ViewRootImpl
前言很久没有发表文章了,今天来一篇,大家撒花~~~本文打算分析下Android中点击事件的来源,顺便提及下ViewRootImpl。Android中点击事件的来源这个问题,也许你会说“这还用你说吗?我可是看过艺术探索的人”,我知道艺术探索中的确是详细介绍了点击事件的传递流程,反正大致就是点击事件从Activity传递给PhoneWindow,然后PhoneWindow再传递给DecorView,接着原创 2016-03-01 21:09:16 · 34097 阅读 · 42 评论 -
Android内核解读-应用的安装过程
前言我们知道,在android手机上安装一个apk很简单,只要打开apk文件,默认就会弹出安装界面,然后点击确定,经过若干秒后,apk就安装成功了,可是你知道apk的安装过程是什么吗?你知道android系统在安装一个apk的时候都干了什么吗?在本文中,将一一解答这个问题。简单来说,apk的安装过程分两步:第一步,将apk文件复制到程序目录下(/data/app/);第二步,为应用创建数据目录原创 2014-02-22 17:44:20 · 18798 阅读 · 12 评论 -
Android源码分析-Alarm机制与Binder的交互
前言本次给大家分析的是Android中Alarm的机制以及它和Binder的交互,所用源码为最新的Android4.4。因为Alarm的功能都是通过Binder来完成的,所以,介绍Alarm之前必须要先介绍下它是如何调用Binder来完成定时功能的。由于内容较多,本文会比较长,在文章结构安排上是这样的:首先简单介绍如何使用Alarm并给出其工作原理,接着分析Alarm和Timer以及Handler原创 2014-01-19 00:56:53 · 13494 阅读 · 13 评论 -
Android源码分析-Activity的启动过程
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/18154335前言Activity是Android中一个很重要的概念,堪称四大组件之首,关于Activity有很多内容,比如生命周期和启动Flags,这二者想要说清楚,恐怕又要写两篇长文,更何况分析它们的源码呢。不过本文的侧重点不是它们,我要介绍的是一个Activity典型的启原创 2014-01-12 01:25:32 · 44954 阅读 · 37 评论 -
android之AsyncTask
AsyncTask和Handler对比1 ) AsyncTask实现的原理,和适用的优缺点AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程.使用的优点:l 简单,快捷l 过程可控使用的缺点:l 在使用多个异步原创 2013-07-08 15:25:52 · 10593 阅读 · 14 评论 -
android中图片的三级cache策略(内存、文件、网络)之三:文件缓存策略
前言如果想很好地理解下面的故事,请参看我半年前写的两篇博文:android中图片的三级cache策略(内存、文件、网络) 一 和 android中左右滑屏的实现(广告位banner组件),还有昨天晚上写的android中图片的三级cache策略(内存、文件、网络)之二:内存缓存策略。文件缓存策略当一张图片从网络下载成功以后,这个图片会被加入内存缓存和文件缓存,对于文件缓存来说,这张原创 2013-12-26 18:10:58 · 11939 阅读 · 12 评论 -
android中图片的三级cache策略(内存、文件、网络)之二:内存缓存策略
前言记得很久之前我写了一篇banner的文章,好多朋友找我要代码,并要我开放banner中使用的图片管理工厂-ImageManager。如果想很好地理解下面的故事,请参看我半年前写的两篇博文:android中图片的三级cache策略(内存、文件、网络) 一 和 android中左右滑屏的实现(广告位banner组件)。当时没有发上来是由于如下几点原因:首先代码较多,其次当时写的时候也参考了原创 2013-12-25 23:46:02 · 16038 阅读 · 28 评论 -
高仿微信对话列表滑动删除效果
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17515543前言用过微信的都知道,微信对话列表滑动删除效果是很不错的,这个效果我们也可以有。思路其实很简单,弄个ListView,然后里面的每个item做成一个可以滑动的自定义控件即可。由于ListView是上下滑动而item是左右滑动,因此会有滑动冲突,也许你需要了原创 2013-12-24 00:43:23 · 39190 阅读 · 134 评论 -
Android源码分析—属性动画的工作原理
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17853275前言本文为Android动画系列的最后一篇文章,通过对源码的分析,能够让大家更深刻地理解属性动画的工作原理,这有助于我们更好地使用属性动画。但是,由于动画的底层实现已经深入到jni层,并且涉及到显示子系统,因此,深入地分析动画的底层实现不仅比较困难而且意义原创 2014-01-05 00:05:50 · 26084 阅读 · 27 评论 -
Android属性动画深入分析:让你成为动画牛人
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17841165前言感谢你阅读本文,我坚信读完本文肯定不会让你失望的。想要做动画牛人?想要精通动画?那么本文所讲的内容都是你必须要掌握的。关于动画,我已经写了两篇博文,但是还是没有将动画描述全面,于是我写了本文,另外,我后面还会再写一篇属性动画的源码分析,通过这四篇博文,原创 2014-01-04 18:29:20 · 48893 阅读 · 69 评论 -
android动画简介
android中动画分为2种:Tween Animation:通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果,即是一种渐变动画;Frame Animation:顺序播放事先做好的图像,是一种画面转换动画。下面看下这两种动画的使用: 一 Tween Animation Tween Animation有四种形式: l alpha原创 2013-07-08 11:43:37 · 12283 阅读 · 8 评论 -
Android内核解读-Android系统的开机启动过程
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/19302593前言当长按手机的power键,Android手机就会开机,那么Android系统的开机启动过程到底是怎么样的呢,本文将要介绍这一过程。简单来说,Android系统的开机启动过程大致是这样的:首先linux系统会启动一个叫做zygote(可以称为受精卵、母体)的li原创 2014-02-17 01:57:46 · 17046 阅读 · 13 评论 -
Android apk动态加载机制的研究
问题是这样的:我们知道,apk必须安装才能运行,如果不安装要是也能运行该多好啊,事实上,这不是完全不可能的,尽管它比较难实现。在理论层面上,我们可以通过一个宿主程序来运行一些未安装的apk,当然,实践层面上也能实现,不过这对未安装的apk有要求。我们的想法是这样的,首先要明白apk未安装是不能被直接调起来的,但是我们可以采用一个程序(称之为宿主程序)去动态加载apk文件并将其放在自己的进程中执行,本文要介绍的就是这么一种方法原创 2014-03-30 21:53:00 · 90790 阅读 · 80 评论 -
Android源码分析-全面理解Context
Context在android中的作用不言而喻,当我们访问当前应用的资源,启动一个新的activity的时候都需要提供Context,而这个Context到底是什么呢,这个问题好像很好回答又好像难以说清楚。从字面意思,Context的意思是“上下文”,或者也可以叫做环境、场景等,尽管如此,还是有点抽象。从类的继承来说,Context作为一个抽象的基类,它的实现子类有三种:Application、Activity和Service(姑且这么说,暂时不管ContextWrapper等类),那么这三种有没有区别呢?原创 2014-03-23 02:21:33 · 25337 阅读 · 18 评论 -
Android View系统解析(下)
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/38426471(来自singwhatiwanna的csdn博客)Android View系统解析系列:Android View系统解析(上)介绍View的基础知识、View的滑动、弹性滑动、滑动冲突解决方式、事件分发等Android View系统解析(下)介绍View的Fram原创 2014-08-08 00:50:53 · 54149 阅读 · 33 评论 -
Android的消息机制之ThreadLocal的工作原理
提到消息机制大家应该都不陌生,在日常开发中不可避免地要涉及到这方面的内容。从开发的角度来说,Handler是Android消息机制的上层接口,这使得开发过程中只需要和Handler交互即可。Handler的使用过程很简单,通过它可以轻松地将一个任务切换到Handler所在的线程中去执行。很多人认为Handler的作用是更新UI,这说的的确没错,但是更新UI仅仅是Handler的一个特殊的使用场景,原创 2015-09-10 21:54:18 · 41632 阅读 · 34 评论 -
循环广告位组件的实现
循环广告位组件的实现写在前面的话很久没有写博客了,很多小伙伴问我为什么博客不更新了,这是因为我在做其它事情,时间不充裕所以就没有更新博客,但是现在我又开始更新博客了!接下来我会陆续更新一些文章,主要包含如下几方面内容: 1. Android一些深入的知识点分析 2. 我的技术成长之路 3. 我的后续的技术规划 4. 如何学好Android,如何成为高级工程师 5. 职业规划前言本篇文章是一原创 2015-06-18 01:37:46 · 30185 阅读 · 70 评论 -
Android View系统解析(上)
Android View系统解析(上)再说动画View基础知识View的滑动View的事件分发View的滑动冲突Android View系统解析(下)View的绘制过程自定义View原创 2014-07-27 11:00:14 · 35719 阅读 · 46 评论 -
Android Binder机制浅析
摘要Binder是android中一个很重要且很复杂的概念,它在系统的整体运作中发挥着极其重要的作用,不过本文并不打算从深层次分析Binder机制,有两点原因:1是目前网上已经有2篇很好的文章了,2是对Binder机制进行深入底层乃至驱动的分析这一过程相当困难且相当耗时,因此并不适合重复造轮子。本文的角度是对Android的Binder机制从整体和概念上进行分析,能够让大家很快明白到底什么是Bin原创 2014-02-23 14:14:57 · 24176 阅读 · 6 评论 -
Android L中水波纹点击效果的实现
博主参加了2014 CSDN博客之星评选,帮我投一票吧。点击给我投票前言前段时间android L(android 5.0)出来了,界面上做了一些改动,主要是添加了若干动画和一些新的控件,相信大家对view的点击效果-水波纹很有印象吧,点击一个view,然后一个水波纹就会从点击处扩散开来,本文就来分析这种效果的实现。首先,先说下L上的实现,这种波纹效果,L上提供了一种动画,叫做Reveal效果,其原创 2015-01-12 00:06:20 · 57458 阅读 · 83 评论 -
APK动态加载框架(DL)解析
好久没有发布新的文章,这次打算发表一下我这几个月的一个核心研究成果:APK动态加载框架(DL)。这段时间我致力于github的开源贡献,开源了2个比较有用且有意义的项目,一个是PinnedHeaderExpandableListView,另一个是APK动态加载框架。具体可以参见我的github:https://github.com/singwhatiwanna本次要介绍的是APK动态加载框架(DL)原创 2014-10-10 00:20:57 · 86017 阅读 · 108 评论 -
Android源码分析-资源加载机制
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/23387079 (来自singwhatiwanna的csdn博客)前言我们知道,在activity内部访问资源(字符串,图片等)是很简单的,只要getResources然后就可以得到Resources对象,有了Resources对象就可以访问各种资源了,这很简单,不过本文不是介原创 2014-04-26 15:16:15 · 28185 阅读 · 18 评论 -
可下拉的PinnedHeaderExpandableListView的实现
Android中,大家都用过ListView,ExpandableListView等,也许你还用过PinnedHeaderListView,但是如果我说PinnedHeaderExpandableListView,你听过吗?还有可下拉的PinnedHeaderExpandableListView呢?没听过也不要紧,本文就是介绍这个东西的,为了让大家有更直观的了解,先上效果图。通过效果图可以看出,首先它是一个ExpandableListView,但是它的头部可以固定,其次,在它的上面还有一个头部可以来回伸缩,原创 2014-05-12 00:18:11 · 38687 阅读 · 86 评论 -
Android apk动态加载机制的研究(二):资源加载和activity生命周期管理
为了更好地阅读本文,你需要先阅读Android apk动态加载机制的研究这篇文章,在此文中,博主分析了Android中apk的动态加载机制,并在文章的最后指出需要解决的两个复杂问题:资源的访问和activity生命周期的管理,而本文将会分析这两个复杂问题的解决方法。需要说明的一点是,我们不可能调起任何一个未安装的apk,这在技术上是无法实现的,我们调起的apk必须受某种规范的约束,只有在这种约束下开发的apk,我们才能将其调起。另外,本文给出的解决方案也不是完美的,但是逻辑已经可以正常地跑通了,剩下的极个别原创 2014-04-11 00:26:48 · 62448 阅读 · 117 评论 -
WebView Attack In Android : 解析第三方账号登录平台所存在的安全隐患
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17663345前言这是一个很有趣的话题,WebView在Android中包括IOS中都是一个很重要的控件,有了它,我们可以直接在应用里打开网页而不用跳到浏览器,且网页效果和浏览器几乎一样,这样会增强用户体验,当然也有缺点:占用内存太大,因为WebView加载网页所耗费的原创 2013-12-30 01:21:43 · 11270 阅读 · 17 评论 -
Android源码分析—带你认识不一样的AsyncTask
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17596225前言什么是AsyncTask,相信搞过android开发的朋友们都不陌生。AsyncTask内部封装了Thread和Handler,可以让我们在后台进行计算并且把计算的结果及时更新到UI上,而这些正是Thread+Handler所做的事情,没错,Async原创 2013-12-27 02:28:29 · 25344 阅读 · 44 评论 -
Android源码分析-消息队列和Looper
转载请注明出处:http://blog.csdn.net/singwhatiwanna/article/details/17361775前言上周对Android中的事件派发机制进行了分析,这次博主要对消息队列和Looper的源码进行简单的分析。大家耐心看下去,其实消息队列的逻辑比事件派发机制简单多了,所以大家肯定会很容易看懂的。概念1. 什么是消息队列消息队列在android中原创 2013-12-17 00:15:08 · 15481 阅读 · 14 评论 -
android自定义开关控件-SlideSwitch
1.效果iphone上有开关控件,很漂亮,其实android4.0以后也有switch控件,但是只能用在4.0以后的系统中,这就失去了其使用价值,而且我觉得它的界面也不是很好看。最近看到了百度魔拍上面的一个控件,觉得很漂亮啊,然后反编译了下,尽管没有混淆过,但是还是不好读,然后就按照自己的想法写了个,功能和百度魔拍类似。下面是百度魔拍的效果和SlideSwitch的效果2.原理原创 2013-07-05 21:38:58 · 35320 阅读 · 16 评论 -
如何写一个android服务
1.android服务简介android服务的分类还是蛮多的,网上有现成的博客讲解的很好,我就不重复了,连接如下:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html本文主要介绍一种常见的服务:通知栏有图标和文字的服务,既可以做自己的事情,也可以供其他activity调用,专业术语描述为 前台服务(可startSe原创 2013-06-08 23:14:40 · 21641 阅读 · 3 评论 -
android中图片的三级cache策略(内存、文件、网络) 一
1. 简介现在android应用中不可避免的要使用图片,有些图片是可以变化的,需要每次启动时从网络拉取,这种场景在有广告位的应用以及纯图片应用(比如百度美拍)中比较多。现在有一个问题:假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量。在当前的状况下,对于非wifi用户来说,流量还是很贵的,一个很耗流量的应用,其用户数量级肯定要受到影响。当然,我想,向百度美拍这样的应用,必然也有其原创 2013-06-08 11:24:14 · 33258 阅读 · 21 评论 -
android中如何发送一个广播
1.首先要声明广播private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver(){ @Override public void onReceive(Context context, Intent intent) //onReceive函数不能做耗时的事情,参考值:10s以内 { Log.d("scott"原创 2013-06-09 17:54:01 · 11189 阅读 · 2 评论 -
微信中MMAlert(半透明底部弹出菜单)的使用介绍
如果大家时常用过微信或者用过iphone,就会发现有种从底部弹出的半透明菜单,这种菜单风格优美并且用户体验良好,先看一下效果。MMAlert来自微信开放平台的sdk示例,其示例的代码有点乱,我做了删减和整理,只保留了MMAlert这个类的一部分功能,即只保留了实现上述效果的那个函数,因为其他函数比较简单,就是普通的AlertDialog,我觉得大家都懂,所以直接删掉了。代码介绍1原创 2013-05-06 23:33:36 · 17448 阅读 · 6 评论 -
android 1.6中LinearLayout getBaseline函数的一个bug
在项目中遇到一个bug,程序在android1.6上直接crash,但是在其他版本上均正常,错误日志如下:04-07 17:02:53.512: E/AndroidRuntime(360): java.lang.RuntimeException: mBaselineAlignedChildIndex of LinearLayout set to an index that is out o原创 2013-05-06 15:54:46 · 12386 阅读 · 1 评论 -
android操作xml
android操作xml封装后的类,包括创建xml和读xml。public class XmlParserUtil{ //创建xml文件 public static void createXmlFile(final String xmlPath) { File xmlFile = new File(xmlPath); FileOutputStream file原创 2013-05-03 16:15:51 · 5264 阅读 · 2 评论 -
android中左右滑屏的实现(广告位banner组件)
原理参见下图。整个组件是一个FrameLayout,里面有两个view,第一个是LinearLayout,承载了4个(或多个)可以滑动的view,见图中绿色背景的部分;第二个是一个RelativeLayout,在其底部放置了一个LinearLayout,在LinearLayout的内部放置了若干个小圆点,用来指示当前屏幕的索引。手势检测用了GestureDetector,并实现了OnGestu原创 2013-05-02 13:21:00 · 32382 阅读 · 158 评论 -
关于android中一种简单的分享方式
目前第三方分享方式有两种:1.需要集成官方sdk包,在获得官方授权后调用其api来完成分享到微信、微博等。 优点:无缝集成,功能多 缺点:集成官方sdk包进行开发,且需要申请官方的授权2.直接调起微信、微博等的activity来进行分享 优点:及其简单,不需要sdk和官方授权 缺点:本地需要安装微信、微博客户端这里我介绍下第二种分享方式,原创 2013-04-28 17:42:45 · 13033 阅读 · 11 评论 -
android调用高版本api函数的兼容性问题
有时候代码中调用的一些api函数对api版本有要求,比如ListView的smoothScrollToPosition函数,该函数要求android api版本在8或者以上才可以使用,即要求用户的手机必须是android2.2及其以上的才行。有些同学可能会这么做 try { final int mVersionCode = Integer.valueOf(android.os.Bu原创 2013-04-28 15:27:58 · 9427 阅读 · 5 评论 -
Activity的启动方式和flag详解
Activity的4种状态:活动的:当一个Activity在栈顶,它是可视的、有焦点、可接受用户输入的。Android试图尽最大可能保持它活动状态,杀死其它Activity来确保当前活动Activity有足够的资源可使用。当另外一个Activity被激活,这个将会被暂停。暂停:在很多情况下,你的Activity可视但是它没有焦点,换句话说它被暂停了。有可能原因是一个透明或者非全屏的Acti原创 2013-07-10 20:06:58 · 27047 阅读 · 6 评论 -
android中如何给button加圆角
//round_corner_bg.xml<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > layout中给button加上background属性android:b原创 2013-06-28 17:55:08 · 8960 阅读 · 1 评论 -
Android JNI知识简介
Java Native Interface (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作。1.从如何载入.so档案谈起 由于Android的应用层的类都是以Java写的,这些Ja原创 2013-06-28 17:39:03 · 7104 阅读 · 1 评论