学习计划2016.1

开源网站
做一个诚实的人,万事起于乎微,量变引起质变,用自身之力而为之
1、Rxjava与eventBus的区别,
2、ImageLoad和Picasso和glide和fresco四者源码和使用的区别
3、必须有相应的demo
4、插件间的消息传递机制aidl,插件的开发研究,插件的第三方开发包,
   主要解决打包和资源的问题,插件化与模块化的区别
5、一个是包大小的问题,一个就是UI动态更新,A/Btes
6、网络框架okHttp,reTrofit,androidXref源码搜索内核








引用方式:
build.gradle     compile 'de.greenrobot:eventbus:2.4.0'


源码引用位置:
C:\Users\haodf548\.gradle\caches\modules-2\files-2.1\de.greenrobot\eventbus\2.4.0\ddd166d01b3158d1c00576d29f7ed15c030df719\eventbus-2.4.0.jar!\de\greenrobot\event\ThreadMode.class


eventBus的(thread)线程模式主要有四种
PostThread 与订阅者同处一个线程
mainThread UI线程
backGroundThread 后台线程
Async 异步线程


SubscriberMethod 中主要封装了线程类型,方法类,调用类
CopyOnWriteArrayList 应对并发数组列表的列表(CopyOnWriteArrayList)
三个常用的集合类
非线性安全类
import java.util.HashMap;
import java.util.List;
import java.util.Map;
线性安全类
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutorService;


eventBus使用感觉很方便


imageLoad和Picasso的线程区别
imageLoad是CachThreadPool
picasso是fixThreadPool默认三条线程


一定要突出自己的亮点,表达问题一定要说到关键处
用自己的大脑去想程序,分析程序能解决的问题,深入其中背后隐藏出现的原因


360插件机制 droidPlugin 视频
http://bj2015.archsummit.com/presentation/2747
http://www.infoq.com/cn/news/2015/09/droidplugin-zhangyong-interview?from=timeline
http://www.oschina.net/p/droid-plugin


 每日站立会 Daliy Meeting
  在会议上每个团队成员回答三个问题(During the meeting, each team member answers three questions)
  1. 昨天你完成了那些工作?(What have you done since yesterday?)
  2. 今天天你打算做什么?(What are you planning to do today?)
  3. 完成你的目标是否存在障碍?(Do you have any problems that would prevent you from accomplishing your goal?)
  会议准时举行(The meeting starts precisely on time.)
  任何人都可以参加,,但只有团队内部人员发言(All are welcome, but normally only the core roles speak.)
  会议时长限制为15分钟(The meeting is timeboxed to 15 minutes.)
  会议时间地点应该固定(The meeting should happen at the same location and same time every day)


Hudson和jenkins快速构建模板学习,(动态加载apk包)dexmaker.jar,研究动态加载技术
Ashmem内存共享区,ReactiveX


fresco
1、内存堆  java引用的,c++引用的堆,ashemem堆,5.0以前不会OOM,因为native原生堆栈一但   到达36M左右后, 就会停止加载,只会加一些小图,不费内存的图,java虚拟机都会有一个堆栈上限,每个都不一样,有些是120,有些是180
2、stream closeable,cloneable
3、动画   AnimatedDrawable
4、fresco的线程按排
mExecutorSupplier——执行各个任务的线程池配置,包括配置执行IO任务、后台任务、优先级低的后台任务、Decode任务的线程池的配置。这些线程池Fresco默认都配置为Fix固定线程数量的。


mDecodeExecutor——负责图片解码成Bitmap的线程池,最大并发数为CPU的数量。
mIoBoundExecutor——负责从硬盘缓存中读取缓存图片的IO线程池,最大并发数为2。
mBackgroundExecutor——负责后台的线程任务,一般是负责图片的resize和旋转、webp的转码、后处理器的执行,最大并发数为CPU数量。
mLightWeightBackgroundExecutor——低优先级的后台线程任务,最大并发数为1。


目前流行的网络图片框架:
http://www.2cto.com/kf/201601/456334.html
Picasso、Universal Image Loader、Volley的(ImageLoader、NetworkImageView)、Glide和Fresco


picasso的原理 是最轻量级的,下载器+线程池+Handler,Picasso达到128M后,会OOM,但是被捕获后,不会报错
其中Picasso和Universal Image Loader相比其它的算是最轻量级的图片框架了,它们拥有较少的方法数,
Universal Image Loader是这五个框架中定制性最强的,它内部实现还是按网络框架的套路走:HttpUrlConnection+线程池+Handler,支持渐显效果。


而Picasso只有一些图片加载框架应有的基本功能,所以因此它是最轻量的,在需求只要基本的图片加载与双缓存功能下,可以选Picasso作为项目的基础库,Picasso它内部默认是使用OkHttpClient作为加载网络图片的下载器,毕竟不用自家用谁的,在OkHttpClient没有的情况下则使用HttpUrlConnection,同上面一样,下载器+线程池+Handler,不过它内部的线程池比较有意思,线程池的线程数量是根据当前的网络环境来动态改变的,wifi网络下为4,4G为3,3G为2,2G为1,其它情况下默认为3,支持渐显效果。


Volley的没什么可说的,基本功能都有,网络框架的附赠功能。


Glide的话,Google官方推荐,支持Gif、图片缩略图、本地视频解码、请求和动画生命周期的自动管理、渐显动画、支持OkHttp和Volley等等,默认是使用HttpUrlConnection加载图片的,源码灰常多,200多个类,不想看


23种设计模式
Fresco我认为是这几个框架中性能最佳的一个框架,着重介绍,它内部用了大量的建造者模式、单例模式、静态工厂模式、生产/消费者模式。内部实现比较复杂,就拿图片加载来说,是通过在异步线程中回调图片的输入流,然后通过一系列读取、写入、转化成EncodedImage,然后再Decode成Bitmap,通过Handler转给UI线程显示,通过IO操作存储在硬盘缓存目录下。








在Android开发过程中,我发现很多安卓源代码里应用了设计模式,比较常用的有适配器模式(各种adapter),建造者模式(Alert Dialog的构建)等等。虽然我们对大多数设计模式都有所了解,但是在应用设计模式的这个方面,感觉很多人在这方面有所不足。所以,我们可以看看Android源代码里面是怎样实现各种设计模式的,从而可以加深我们对设计模式的理解,从而方便我们以后对它的应用。今天,我们就来谈谈设计者模式(Builder Pattern)。


个推sdk
http://docs.getui.com/pages/viewpage.action?pageId=3211761


DrodPlugin插件机制的缺点


Manifest中注册的信息由系统控制,因此插件需要权限信息需要预先注册在主程序中。
目前实现有一定的限制,如插件宿主的相互调用、插件间的相互调用


堆和栈的分析工具DumpSys,ClassLoader类加载器DexClassLoader和PathCalssLoader


学习Throwable Throwable 类是 Java 语言中所有错误或异常的超类
http://www.apihome.cn/api/java/Throwable.html


java.lang.Process类 
http://lavasoft.blog.51cto.com/62575/15599
java.lang.Object类
http://lavasoft.blog.51cto.com/62575/15456


 Runtime.getRuntime().freeMemory();
 Runtime.getRuntime().totalMemory();
                   
 ProcessBuilder.class.cast(this);
 android.os.Process.myPid();




Android分包MultiDex原理详解
代理模式

http://yangguangfu.iteye.com/blog/815787


取消网络图片加载的方法

1、取消缓存中的请求

2、对于已经发出的请求采用暂停或关闭线程池的方式


你可能感兴趣的:(android代码类)