android进阶
爱听音乐的小石头
这个作者很懒,什么都没留下…
展开
-
android源码分析-------LinkedHashMap,HashMap
这篇文章是LurCache源码分析的后续,如果想看LurCache源码分析,请转上一篇:《 避免OOM系列之(二)-------LruCache使用以及源码详细解析》。我们先来看下继承关系:我们看到LinkedHashMap 继承HashMap ,HashMap继承AbstractMap,如果你查看AbstractMap源码会发现,Ab原创 2016-08-14 21:33:47 · 1159 阅读 · 1 评论 -
杀不死service------Java层实现
杀不死service——Java层实现介绍开始先来说下我们实现的方式:1.提高进程优先级2.java层双进程守护3.JobScheduler轮询4.native层双进程守护今天我们只写前三种方式,第四种native层双进程守护将在下一篇来讲解。我们先来看下进程的优先级 :前台进程- Activity已调用onResume()方法- Service服务已调用startForeground()-原创 2017-06-13 18:30:35 · 764 阅读 · 0 评论 -
android插件化开发---换肤
android插件化开发—换肤在自己手写换肤功能之前需要了解关于view的创建过程,如果不了解的朋友可以看下我另外一篇博客:android中布局和View创建从上一篇文章中我们知道在创建view之前,会先调用LayoutInflater中的mFactory2,mFactory,mPrivateFactory的onCreateView,所以我们只要设置Factory,就可以对view创建进行拦截,原创 2017-06-12 18:52:59 · 468 阅读 · 0 评论 -
android 手写收集崩溃信息上传
android 手写收集崩溃信息上传我们要收集用户使用app时,异常崩溃的信息,网上有很多第三方的,今天我们就自己手动的写收集崩溃信息的功能。我们要上传的有那些信息呢? 错误信息,app版本信息, 手机信息我们怎么能监听到app崩溃,和在崩溃时保存错误信息呢? 这里我们使用的是Thread.UncaughtExceptionHandler接口,下面我们来一起看下代码: public cla原创 2017-06-12 01:38:58 · 306 阅读 · 0 评论 -
android热修复--手写热修复
android热修复–手写热修复之前我们分析了阿里的热修复框架AndFix的使用和原理,如果没看过的小伙伴可以先去看下,使用起来还是很简单的,但是有个缺陷,就是针对新出的android系统不兼容,因为AndFixNatice层对不同的系统做不同的处理方式,如果版本更新,但是阿里工程师还没来得及添加针对新系统的处理,那么就有可能出问题。我们今天就手写一个针对java层的热修复功能。先来了解一下Andr原创 2017-06-11 22:41:40 · 1196 阅读 · 0 评论 -
注解(Annotation)自定义注解(四)--编译期注解解析讲解和手写ButterKnife
注解(Annotation)自定义注解(四)–编译期注解解析讲解和手写ButterKnife前言前面两篇讲解了运行期注解的使用和xutils源码的解析,以及手动打造自己的IOC框架。但是运行期注解由于性能问题被一些人所诟病,所以这里我们讲下编译器注解的使用和实战。介绍编译器注解的核心原理依赖APT(Annotation Processing Tolls)实现,例如,我们常用的ButterKnife,原创 2017-05-22 18:36:31 · 983 阅读 · 0 评论 -
手写EventBus框架
手写EventBus框架EventBus相信大家都用过,EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。今天我们就来手写EventBus,让我们更了解EventBus原理。需要了解的知识点: 1.原创 2017-06-02 11:27:52 · 392 阅读 · 0 评论 -
仿QQ语言变声功能
仿QQ语言变声功能这次写的是QQ语言变声功能,这个功能想必大家都使用过,那么这个功能是怎么实现的呢? 在开发中一边触及和语音,视频,算法等等都和c/c++相关,我们这里也是使用的NDK,链接第三方动态库,生成我们自己的库文件。先来讲讲第三方的动态库,我们这里使用的FMOD音频引擎提供给android的api和动态库。我们可以到官网下载: FMOD,因为下载需要注册,但是我天朝的。。。,需要vnp原创 2017-06-01 14:50:00 · 5221 阅读 · 2 评论 -
LruCache使用以及源码详细解析
开始准备先讲引用的,但是考虑到网上有很多优秀的框架,提供给开发者使用,关于缓存基本上全是用的LruCache,所有先讲解下Lrucache的使用和源码分析。 LRU是Least Recently Used 近期最少使用算法。其实LruCache的作用就是对缓存的元素进行排序,当超过设定的内存值时就会将使用最少,使用最早元素先回收。LruCache的使用:原创 2016-08-14 20:26:56 · 572 阅读 · 0 评论 -
android热修复--阿里热修复使用和源码分析
android热修复–阿里热修复使用和源码分析AndFix全称Android hot-fix,是alibaba的Android热修复框架,支持Android 2.3到7.0的版本,支持arm与X86系统架构,支持Dalvik和ART Runtime。原理AndFix的原理就是方法的替换,把有bug的方法替换成补丁文件中的方法。使用1.添加依赖和混肴maven:<dependency> <gr原创 2017-05-19 15:55:45 · 502 阅读 · 0 评论 -
注解(Annotation)自定义注解(一)
要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。元注解: 元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解: 1.@Target, 2.@R转载 2017-04-18 17:34:11 · 218 阅读 · 0 评论 -
注解(Annotation)自定义注解(二)--运行时注解解析
大幅答复转载 2017-04-18 17:47:22 · 396 阅读 · 0 评论 -
注解(Annotation)自定义注解(三)--自己动手写注解框架(仿xutils)
前面两篇文章讲解了注解的基础知识和运行时注解的解析方法。下面我们用学到的知识来手动写一个属于自己的注解框架。在写自己的注解框架前,让我们先来看下一些好的框架,相信大家对xutils应该不会太陌生。xutils主要包括网络,数据库,IOC注入,网络图片使用,那么我们这里主要看看xutils3.0的IOC注解:https://github.com/wyouflf/xUtils3原创 2017-04-21 15:39:04 · 402 阅读 · 0 评论 -
android中布局和View创建的源码分析---setContentView
android中布局和View创建的源码分析因为我们使用的是拦截view创建的过程来实现插件换肤的功能,所以首先要熟悉android中创建视图的过程,下面让我们一起来分析下源码,这里我们从两个方面来分析。一.设置布局分析1.继承至Activity时,设置布局的情况setContentView()的源码public void setContentView(@LayoutRes int layoutRe原创 2017-05-19 12:56:00 · 360 阅读 · 0 评论 -
Android6.0运行时权限处理架构搭建
Android6.0运行时权限处理架构搭建介绍对于6.0以下的权限及在安装的时候,根据权限声明产生一个权限列表,用户只有在同意之后才能完成app的安装,造成了我们想要使用某个app,就要默默忍受其一些不必要的权限(比如是个app都要访问通讯录、短信等)。而在6.0以后,我们可以直接安装,当app需要我们授予不恰当的权限的时候,我们可以予以拒绝(比如:单机的象棋对战,请求访问任何权限,我都是不同意的)原创 2017-05-23 09:57:50 · 290 阅读 · 0 评论 -
你喜欢的搞笑内容都在这里-----笑口常开
FunN(因为 数据来源,接口,app都是本人独立完成,所以可能更新会很慢,请见谅)描述:这是一款基于MVP模式开发的,目的是给用户带来快乐,其中有 段子手, 搞笑, 清纯妹子, 性感美女, 动态图, 邪恶图片 几个模块,包括了文字笑话,搞笑图片,美女图片,搞笑动态图.功能只是提供了文字小原创 2017-04-18 17:21:01 · 589 阅读 · 0 评论 -
Android使用JPEG实现图片压缩上传
Android使用JPEG实现图片压缩上传1.介绍Android中常用压缩方法分为2种:一种是降采样率压缩,另外一种是质量压缩。第一种: BitmapFactory.Options o = new BitmapFactory.Options(); o.inJustDecodeBounds = true; BitmapFactory.decodeFile(path, o); o.inSample原创 2017-06-14 10:13:10 · 3054 阅读 · 1 评论