Lifecycles
Lifecycles可以让任何一个类都能轻松感知到 Activity的生命周期,同时又不需要在Activity中编写大量的逻辑处理。
使用步骤:
- 定义一个方法实现LifecycleObserver,方法中可以定义任何方法
- 用@OnLifecycleEvent注解感知Activity的生命周期
- 在Activity中的oncreate用LifecycleOwner把定义的方法加入进去
- lifecycle.addObserver
- Activity是继承自AppCompatActivity的,或者你的Fragment是继承自 androidx.fragment.app.Fragment的,那么它们本身就是一个LifecycleOwner的实例
- 主动获知当前的生命周期状态
- 要在MyObserver的构造函数中将Lifecycle对象传进来,在任何地方调用lifecycle.currentState来主动获知当前的生命周期状态
EventBus(参考Android EventBus 的使用 - 简书)
EventBus是一种用于Android的事件发布-订阅总线,由GreenRobot开发,Gihub地址是:EventBus。它简化了应用程序内各个组件之间进行通信的复杂度,尤其是碎片之间进行通信的问题,可以避免由于使用广播通信而带来的诸多不便。
使用:
1、Event:事件,可以定义一个通用的事件,里面放入flag标志是什么事件,携带的参数可以用Any?类型
2、Subscriber:事件订阅者,即事件接收方,3.0之前有固定写法,3.0之后方法名可以随意命名,加上@subscribe即可,指定线程模型,线程模型有:POSTING:默认,表示事件处理函数的线程跟发布事件的线程在同一个线程。MAIN:表示事件处理函数的线程在主线程(UI)线程,因此在这里不能进行耗时操作。BACKGROUND:表示事件处理函数的线程在后台线程,因此不能进行UI操作。如果发布事件的线程是主线程(UI线程),那么事件处理函数将会开启一个后台线程,如果果发布事件的线程是在后台线程,那么事件处理函数就使用该线程。ASYNC:表示无论事件发布的线程是哪一个,事件处理函数始终会新建一个子线程运行,同样不能进行UI操作
- POSTING:默认,表示事件处理函数的线程跟发布事件的线程在同一个线程。
- MAIN:表示事件处理函数的线程在主线程(UI)线程,因此在这里不能进行耗时操作。
- BACKGROUND:表示事件处理函数的线程在后台线程,因此不能进行UI操作。如果发布事件的线程是主线程(UI线程),那么事件处理函数将会开启一个后台线程,如果果发布事件的线程是在后台线程,那么事件处理函数就使用该线程。
- ASYNC:表示无论事件发布的线程是哪一个,事件处理函数始终会新建一个子线程运行,同样不能进行UI操作。
3、Publisher:事件的发布者,即事件发送方,可以在任意线程里发布事件。一般情况下,使用EventBus.getDefault()
就可以得到一个EventBus对象,然后再调用post(Object)
方法即可。
黏性事件:指发送了该事件之后,能被其他订阅者接收,即某个activity接收事件后,再另一个activity也能接收该事件。调用EventBus的postSticky
方法可以用来发布黏性事件
MMKV(参考MMKV使用 - 简书)
使用:
1、引入依赖
implementation 'com.tencent:mmkv:1.0.15'
2、初始化
MMKV.initialize(this)
3、存、取、删数据
//……一个全局的实例
// MMKV kv = MMKV.defaultMMKV();
MMKV mMkv = MMKV.mmkvWithID(Constant.MMKV_PREFERENCES, MMKV.SINGLE_PROCESS_MODE);
// 存储数据:
mMkv.encode("Stingid", "123456");
mMkv.encode("bool", true);
mMkv.encode("int", Integer.MIN_VALUE);
// 取数据:
String id=mMkv.decodeString("id", null);
boolean bValue = mMkv.decodeBool("bool");
int iValue = kv.decodeInt("int");
// 移除数据:
mMkv.remove("Stingid");
mMkv.remove("bool");
mMkv.remove("int");
Glide(参考Google推荐——Glide使用详解 - 简书)
Glide,图片加载库,对于 Android SDK 的最低要求是 API level 10。
基础使用:
Glide.with(context)
.load(url)
.into(imageView);
占位图设置:
Glide.with(context)
.load(url)
.placeholder(R.drawable.place_image)//图片加载出来前,显示的图片
.error(R.drawable.error_image)//图片加载失败后,显示的图片
.into(imageView);