Coder Social home page Coder Social logo

androidadvance's Introduction

AndroidAdvanceDemo

不定时更新中...

Question:这个仓库有什么东西?

这个仓库都是一些手写的Android进阶框架,如:IOC框架、图片加载框架、网络请求框架等。

Question:为什么要弄这个仓库?

现在项目中网络请求用 Retrofit 或者 Okhttp,图片加载 Glide之类的,用了好几年,一直都处于使用阶段。 每次看源码看了好久,过一段时间就忘了,所以想自己动手把这些框架都写一遍。

Question:动手撸一遍框架有什么用?

工作大部分时间都是写业务代码,写久了都差不多,如果一直这样,时间再长也不可能晋升到高级工程师。 自己动手撸一遍框架可以提升自己的架构设计**、设计模式的熟练度,更轻松的阅读流行开源框架的源码, 简直就是好处多多。

PS:

这个仓库中很有多的代码非本人所写,我只是来收集用来学习,感谢网上各路大神的无私贡献。

库里面有什么东西

  • AOP编程
  • 手写IOC框架
  • 手写图片加载框架
  • 手写OkHttp框架
  • DialogFragment封装
  • Android全局异常捕获
  • 手写EventBus框架
  • 插件化和Hook技术
  • 待添加

AOP编程

  1. AOP编程检查权限是否开启
  2. AOP编程检查网络状态是否可用
  3. AOP检查用户登录
  4. AOP用户行为统计
  5. 待开发

手写IOC框架

使用实例:

    @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) {}

image

手写图片加载框架

主要来自何洪辉大神: https://blog.csdn.net/column/details/android-imageloader.html

具体使用跟 Glide 差不多

image image

手写OkHttp框架

主要来自 https://github.com/ouyangshengduo/SenduoHttp

image

DialogFragment封装

Q:为什么要使用 DialogFragment?

  • 继承自Fragment,拥有Fragment的生命周期。
  • 当旋转屏幕和按下后退键时可以更好的管理其声明周期

PS:我见过很多的 Dialog 的库都把 Listview 或者 RecycleView 封装进去了,个人并不是很赞同这种做法。为了把列表封装进去, 将整个 lib 瞬间多了很多的代码,不同情况下的列表并不一样,也不能通用所用情况,还不如直接通过 setView(recycleVIew) 这中方式将列表 set 进去。

具体使用见 DialogTestFragment

手写 EventBus

XEventBus 就只有四个类,如下:

image

  • register()流程 和 post()流程

image

  • unRegister()流程
    //private Map<Object, List<SubscribeMethod>> mSubscribeMethodMap;
    public void unRegister(Object object) {
        if (mSubscribeMethodMap != null) {
            mSubscribeMethodMap.remove(object);
        }
    }

主要通过注解和反射来实现

插件化和Hook技术

  • 从sd中加载apk
  • hook AMS
  • hook PMS

内存优化

  • MemoryHandler 每隔一分钟监控应用内存,如果内存占用超过了80%,回调 onLowMemory() 方法。

触顶率:可以反映 Java 内存的使用情况,如果超过 85% 最大堆限制,GC 会变得更加频繁,容易造成 OOM 和卡顿。 内存 UV 触顶率 = Java 堆占用超过最大堆限制的 85% 的 UV / 采集 UV

androidadvance's People

Contributors

keaitao0321 avatar ldlywt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.