Android进阶
AD钙奶-lalala
叩首问路 码梦为生
展开
-
EventBus 一篇文章就够了
我们知道Android开发早期各种Activity之间,Fragment之间,Activity和Fragment之间传递数据显得不是那么的友好。EventBus的出现大大提高了组件之间的数据传递效率,大大降低了接口回调传递数据所带来的代码耦合。EventBus很小巧,运行效率高,因此早期被大量运用在各种项目中。早年我写过一篇关于EventBus的文章,基本上把原理也讲的差不多了,今天再次捡起来做一个总结。原创 2022-09-19 22:02:54 · 568 阅读 · 0 评论 -
List集合等量分割工具类(Kotlin)
在日常开发中,我们经常需要将一个集合等量划分成几个集合,比如说做分批上传的时候。下面就分享一个List集合等量分割工具类:/** * 集合等量分割工具类 * */class ListSplitUtils { companion object { fun splitList( messagesList: List<T>, groupSize: Int ): List<List<T>原创 2021-08-30 17:55:41 · 2056 阅读 · 0 评论 -
EventBus源码详解
我们在使用EventBus的时候,首先要注册EventBus:EventBus.getDefault().register(this);那么我们就从这段代码作为入口,一步一步探索EventBus的秘密!我们先看看getDefault()这个方法:static volatile EventBus defaultInstance;public static EventBus g...原创 2020-01-20 17:59:47 · 343 阅读 · 1 评论 -
Handler详解
handler是什么?handler是Android提供给我们的一套更新UI的机制,也是一套消息处理机制,我们可以发送消息,也可以通过它处理消息。为什么要用handler?handler是Android设计的时候就创建的一套消息创建、传递、处理机制,如果不遵循这样的机制就无法更新UI信息。handler怎么用?public class MainActivity extend...原创 2020-01-14 18:03:17 · 230 阅读 · 0 评论 -
RecyclerView.Adapter的封装类
我们知道,Recyclerview是不直接支持点击事件以及添加头部view和底部view的,所以我们有必要进行进一步的封装。public abstract class BaseRecyclerAdapter<T> extends RecyclerView.Adapter<RecyclerViewHolder> { private static final in...原创 2019-12-31 18:02:27 · 191 阅读 · 0 评论 -
ButterKnife源码解析
关于ButterKnife的使用我就不讲了,很简单,随便搜搜网上一大堆。下面一个案例就是我使用ButterKnife生成的代码:public class MainActivity extends AppCompatActivity { @BindView(R.id.tv_01) TextView tv01; @BindView(R.id.tv_02) T...原创 2019-12-23 15:01:21 · 148 阅读 · 0 评论 -
IPC - Service保活
1.Service为什么会被杀死?1>手机内存不足时,Service有可能被杀死;2>360,手机管家等优化内存时,Service可能被杀死;2.进程的优先级1.前台进程用户当前操作所必需的进程。如果一个进程满足以下任一条件,即视为前台进程:托管用户正在交互的Activity已调用Activity的onResume()方法 托管某个Service,后者绑...原创 2019-12-11 12:08:04 · 265 阅读 · 0 评论 -
IPC进程间通信应用层走向分析
客户端会通过bindService(intent, serviceConn, Context.BIND_AUTO_CREATE)去请求连接,在onServiceConnected()通过IBinder获取aidl实例:private ServiceConnection serviceConnection = new ServiceConnection() { @Overri...原创 2019-12-05 17:47:22 · 161 阅读 · 0 评论 -
一个AIDL案例
服务端代码:生成的aidl文件:interface IMyAidlInterface { String getUserName(); String getPassword();}自定义一个服务:public class LzyService extends Service { @Nullable @Override public...原创 2019-12-05 17:20:15 · 196 阅读 · 0 评论 -
关于AppCompatActivity的setContentView的一些补充
首先我们进入AppCompatActivity这个类,搜索setContentView这个方法: @Override public void setContentView(@LayoutRes int layoutResID) { getDelegate().setContentView(layoutResID); }很明显是调用了getDelega...原创 2019-11-20 15:46:04 · 287 阅读 · 1 评论 -
Android高级面试全记录(刷题,不断补充完善)
Android刷题:1.请简述activity启动流程。2.了解过AMS、PMS源码吗?3.请简述View的绘制流程。4.MeasureSpec测量模式分别代表什么意思?UNSPECIFIED:不对View大小做限制,如:ListView,ScrollViewEXACTLY:确切的大小,如:100dp或者march_parentAT_MOST:大小不可超过某数值...原创 2019-11-19 17:42:45 · 891 阅读 · 0 评论 -
插件式换肤框架搭建 - Hook拦截View的创建
前面我们分析AppCompatActivity源码得出一个结论:class AppCompatDelegateImpl extends AppCompatDelegate implements MenuBuilder.Callback, LayoutInflater.Factory2很明显: @Nullable public final View tryCr...原创 2019-11-15 17:54:43 · 244 阅读 · 0 评论 -
插件式换肤框架搭建 - LayoutInflater源码阅读
LayoutInflater的源码我们分三个步骤去看相对来说会更加的系统:1.如何获取LayoutInflater? 2.如何使用LayoutInflater?3.布局的View是如何被实例化的?使用:View view = View.inflate(this,R.layout.activity_main,null);View view1 = LayoutInflater....原创 2019-11-15 17:20:40 · 187 阅读 · 0 评论 -
插件式换肤框架搭建 - setContentView源码阅读
Activity的setContentView源码阅读:public void setContentView(@LayoutRes int layoutResID) { getWindow().setContentView(layoutResID); initWindowDecorActionBar();}public Window getWindow(...原创 2019-11-15 15:18:26 · 183 阅读 · 0 评论 -
插件式换肤框架搭建 - 资源加载源码分析
资源加载源码分析1.首先我们来看一下ImageView是如何加载资源的: public ImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAtt...原创 2019-11-15 11:41:35 · 216 阅读 · 0 评论 -
搭建Android数据库框架(增)
定义一个IDaoInf接口:public interface IDaoInf<T> { void init(SQLiteDatabase sqLiteDatabase,Class<T> mClazz); public int insert(T t); public void insert(List<T> data); ...原创 2019-11-14 14:54:07 · 113 阅读 · 0 评论 -
java反射--Field用法
Field 类对象常用方法:getType():返回这个变量的类型getName() :获取属性的名字get(Object obj) 返回指定对象obj上此 Field 表示的字段的值原创 2019-11-14 10:37:15 · 167 阅读 · 0 评论 -
JAVA反射中的getFields()方法和getDeclaredFields ()方法的区别
Field [] fields = mClazz.getFields();Field [] fields1 = mClazz.getDeclaredFields();获取类的属性有两种方式:getFields()和getDeclaredFields()。我们先来看看这两者的区别吧:getFields():获得某个类的所有的公共(public)的字段,包括父类中的字段。getDecl...原创 2019-11-14 10:32:03 · 1287 阅读 · 0 评论