- 博客(17)
- 资源 (7)
- 收藏
- 关注
原创 Android Studio 插件开发
为了提高自己开发Android的效率,用过几款别人写的插件,或许每个人编程习惯不一样,别人插件虽然好用,不免要改这改那。so打算自己开发一款符合自己的插件(其实很简单,也就是findViewById,相信你也也是又爱又恨),顺便学习一下AS的插件开发。环境搭建Android Studio 是基于 IntelliJ IDEA 开发的,但是并不支持插件开发,我们需要下载 IntelliJ IDEA 来开
2017-08-21 09:15:04 572
原创 Android 获取APK编译时间
由于项目中,需要显示APK编译的时间,方便用户知道APK时什么时候更新的。用手动的方式的话,经常会忘记!现在知道AS在build.gradle中可以定义变量,在此记录一下。在build.gradle定义时间变量:defaultConfig {....buildConfigField "String", "BUILD_TIME", getDate()}String getDate() {
2017-08-15 17:31:27 5548 3
原创 Android 热修复 Tinker接入方法
什么是热修复简单的说就是用户不用重新下载一个新的apk安装,而是直接下载一个补丁包,通过补丁来替换一些出现bug的类,当然下载补丁的过程用户一般是感觉不到的,表面上看是直接修复了bug。热修复原理简单的来说,就是把最后修改的类打包成dex,插入到ClassLoader的dex数组的最前面,当ClassLoader找类时,会按顺序遍历dex文件,然后从当前遍历的dex文件中找类,如果找到则返回,如果找
2017-08-15 11:13:10 1316
原创 Android 组件化之路 资源冲突问题
比如我现在有3个模块:app模块,user模块,me模块,其中app模块依赖user模块和me模块。然后我在user模块和me模块的strings.xml中都定义了greet字符串:// user模块<resources> ... <string name="greet">Hello!</string> ...</resources>// me模块<resources>
2017-08-11 17:41:41 7938
原创 Android 组件化之路 路由设计
基于公司业务发展,公司的APP需求不断增加,应用也略显“臃肿”。想着趁现在不那么“糟糕”,时间也比较宽裕,把项目结构整整,因而走上了组件化之路。模块化 VS 组件化模块化: 将一个程序按照其功能做拆分,分成相互独立的模块,以便于每个模块只包含与其功能相关的内容。组件化: 基于可重用的目的,将一个大的软件系统按照分离关注点的形式,拆分成多个独立的组件。区别: 模块化和组件化本质思想是一样的,都是“大
2017-08-11 16:10:52 1309
原创 Android 内存泄露分析
编程工具:Android Studio 分析内存工具:Android Studio和MAT内存泄露的例子:// MainActivity类public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) {
2017-08-10 11:23:07 380
原创 Android 常见的内存泄露
当一个对象不再需要时,本应该被回收,而被另一个正在使用的对象(可能是静态对象,也有可能是匿名内部类对象,等等)引用导致不能正常被回收,就会一直存活在堆中,造成内存泄露。内存泄露会使程序造成程序OOM(Out Of Memory),导致应用Crash。单例造成的内存泄漏由于单例的静态特性,使得单例对象和应用的生命周期一样长。所以被单例对象引用的对象,如果不主动置为null释放对象,那么被引用的对象便和
2017-08-09 17:46:26 271
原创 Android 内存 - 垃圾回收(GC)机制
虽然Java大部分内存由垃圾回收器(GC)管理着,但是对内存的释放还是有必要知道一点的,毕竟对我们编程也是有一定的帮助的。例如,解决内存泄露问题等等!!GC回收哪个区域的垃圾这里所说的区域指的是运行时数据区,有5种:程序计数器,虚拟机栈,本地方法栈,堆,方法区。 我们一一分析哪个区域由GC管理:程序计数器:这里只保存当前线程锁执行的字节行号,也就是执行到了哪里,只是一块很小的内存,不在GC管理范
2017-08-09 14:53:16 1381
原创 Android 内存 - 运行时数据区
Android程序运行时,产生的变量和状态,都会保存在运行时数据区。所以要理解内存管理,我们要先对运行时数据区有个了解。运行时数据区分为5个部分:程序计数器虚拟机栈本地方法区堆方法区程序计数器每个线程都有一个程序计数器,用于记录当前线程所执行的字节码行号,通俗的说,就是记录当前线程执行到了哪里。Java支持多线程执行程序,由于一个内核同一时间只能执行一条指令,也就是一个内核同一时间只能执
2017-08-09 09:14:01 640
转载 Android 冷启动实现APP秒开
转自Android冷启动实现APP秒开因为之前也遇到过白屏/黑屏的情况,虽然时间不长,但是还是给用户体验不好,这篇博文说的很好,故做一下记录。造成白屏/黑屏的情况是因为有个冷启动时间,什么是冷启动时间呢?冷启动时间是指用户从手机桌面点击APP的那一刻起到启动页面的Activity调用onCreate()方法之间的这个时间段。那在冷启动的时间段内发生了什么?首先我们要知道当打开一个Activity的时
2017-08-08 15:14:16 518
原创 Android View - 实现流式布局
流式布局,就是一个容器(ViewGroup),往里面添加元素(子View),元素会一直跟在前一个元素的左边,如果超过容器的边界,就把元素放在下一行的第一个位置。Like This:我们自己来实现一下这么一种布局,在实现之前,你需要理解关于自定义ViewGroup相关的知识,可以参考 Android 手把手教您自定ViewGroup;如果没问题,接着往下看。网上已经很多都是静态的数据,就是说在xml直
2017-08-08 14:38:22 515
原创 Android 使用ActivityOptions实现Activity转场动画
之前一直都是用这种方式实现Activity的转场动画:// MainActivityoverridePendingTransition(enterAnim, exitAnim);从Android5.0之后,Google提供了一种新的方式来实现:ActivityOptions。前提在使用前,需要声明允许使用ActivityOptions。 在styles.xml文件,设置App主题时,添加andr
2017-08-07 16:28:36 12681
原创 Rxjava - 线程调度
很多开发者喜欢使用Rxjava的原因之一应该就是 – 自由的控制线程,而且控制的方式超级简单,利用 subscribeOn() 结合 observeOn()便可切换你想要的线程,超帅的有木有!!调度器所谓调度器,其实实质就是线程,想要程序执行的地方。Rxjava提供了一下几种调度器:// 在当前线程立即开始执行任务Schedulers.immediate( )// 用于IO密集型任务,如异步阻塞I
2017-08-03 15:03:07 841
原创 Rxjava - 简单实现
由于Rxjava比较强大,自然代码量也挺多,源码学习难度相当大。因此,当我分析flapMap时,已经晕了,所以决定顺藤摸瓜,以简单的代码模拟Rxjava小部分功能,相信能帮助大家理解Rxjava原理。在阅读Rxjava源码时,我都是以观察者模式阅读,观察者频繁变换,搞得我晕晕的,可是我以生产者-消费者模式模拟Rxjava时,发现顿时豁然开朗,所以这里我以生产者-消费者模式类命名,这样更容易理解。数据
2017-08-03 09:45:25 734
原创 Rxjava - flapMap变换
Rxjava是一个异步框架,类似于AsyncTask,其优点在于让你的异步代码更简洁,阅读代码会更轻松。知己知彼,百战不殆。我们从源码分析Rxjava原理,可以让我们更轻松的使用Rxjava,最主要还能学到Rxjava响应式编程的思想。照例,先来个小例子:Observable<String> originObservable = Observable.just("1", "2", "3");Ob
2017-08-02 16:45:39 691
原创 Rxjava - map变换
Rxjava是一个异步框架,类似于AsyncTask,其优点在于让你的异步代码更简洁,阅读代码会更轻松。知己知彼,百战不殆。我们从源码分析Rxjava原理,可以让我们更轻松的使用Rxjava,最主要还能学到Rxjava响应式编程的思想。还是先来一个小例子:Observable<String> observable = Observable.create(new Observable.OnSubsc
2017-08-01 17:43:56 475
原创 Rxjava - 基本流程
Rxjava是一个异步框架,类似于AsyncTask,其优点在于让你的异步代码更简洁,阅读代码会更轻松。知己知彼,百战不殆。我们从源码分析Rxjava原理,可以让我们更轻松的使用Rxjava,最主要还能学到Rxjava响应式编程的思想。先看一下简单的例子:// 被观察者Observable<String> observable = Observable.create(new Observable
2017-08-01 15:58:25 515
gradle-5.4.1-all.zip
2020-10-27
MacOS Unlocker For VMware15
2020-05-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人