不定时更新中...
Question:这个仓库有什么东西?
这个仓库都是一些手写的Android进阶框架,如:IOC框架、图片加载框架、网络请求框架等。
Question:为什么要弄这个仓库?
现在项目中网络请求用 Retrofit 或者 Okhttp,图片加载 Glide之类的,用了好几年,一直都处于使用阶段。 每次看源码看了好久,过一段时间就忘了,所以想自己动手把这些框架都写一遍。
Question:动手撸一遍框架有什么用?
工作大部分时间都是写业务代码,写久了都差不多,如果一直这样,时间再长也不可能晋升到高级工程师。 自己动手撸一遍框架可以提升自己的架构设计思想、设计模式的熟练度,更轻松的阅读流行开源框架的源码, 简直就是好处多多。
PS:
这个仓库中很有多的代码非本人所写,我只是来收集用来学习,感谢网上各路大神的无私贡献。
- AOP编程
- 手写IOC框架
- 手写图片加载框架
- 手写OkHttp框架
- DialogFragment封装
- Android全局异常捕获
- 手写EventBus框架
- 插件化和Hook技术
- 待添加
- AOP编程检查权限是否开启
- AOP编程检查网络状态是否可用
- AOP检查用户登录
- AOP用户行为统计
- 待开发
使用实例:
@ViewById(R.id.tv_ioc)
private TextView tvIoc;
@StringById(R.string.ioc)
private String text;
@ColorById(R.color.colorAccent)
private int color;
@ContentViewById(R.layout.activity_main)
@OnClick({R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn5})
@OnLongClick({R.id.btn4})
@CheckNet()
public void openIoc(View view) {}
主要来自何洪辉大神: https://blog.csdn.net/column/details/android-imageloader.html
具体使用跟 Glide 差不多
- 实现跟 OkHttp 一样的调用
- 具体使用见 HttpFragment
- Okhttp的源码解析文章见:https://www.jianshu.com/p/897964b79732
Q:为什么要使用 DialogFragment?
- 继承自Fragment,拥有Fragment的生命周期。
- 当旋转屏幕和按下后退键时可以更好的管理其声明周期
PS:我见过很多的 Dialog 的库都把 Listview 或者 RecycleView 封装进去了,个人并不是很赞同这种做法。为了把列表封装进去,
将整个 lib 瞬间多了很多的代码,不同情况下的列表并不一样,也不能通用所用情况,还不如直接通过 setView(recycleVIew)
这中方式将列表 set 进去。
具体使用见
DialogTestFragment
XEventBus 就只有四个类,如下:
- register()流程 和 post()流程
- unRegister()流程
//private Map<Object, List<SubscribeMethod>> mSubscribeMethodMap;
public void unRegister(Object object) {
if (mSubscribeMethodMap != null) {
mSubscribeMethodMap.remove(object);
}
}
主要通过注解和反射来实现
- 从sd中加载apk
- hook AMS
- hook PMS
- MemoryHandler
每隔一分钟监控应用内存,如果内存占用超过了80%,回调
onLowMemory()
方法。
触顶率:可以反映 Java 内存的使用情况,如果超过 85% 最大堆限制,GC 会变得更加频繁,容易造成 OOM 和卡顿。 内存 UV 触顶率 = Java 堆占用超过最大堆限制的 85% 的 UV / 采集 UV