什么是jetpack,就“盗”Google官方的解释。
Jetpack 是一套库、工具和指南,可帮助开发者更轻松地编写优质应用。这些组件可帮助您遵循最佳做法、让您摆脱编写样板代码的工作并简化复杂任务,以便您将精力集中放在所需的代码上。
Jetpack 包含与平台 API 解除捆绑的 androidx.* 软件包库。这意味着,它可以提供向后兼容性,且比 Android 平台的更新频率更高,以此确保您始终可以获取最新且最好的 Jetpack 组件版本。
Android Jetpack 组件
Jetpack分为四大类,具体包括哪些内容,可以查看Jetpack官方文档1
类别 |
---|
基础(Foundation) |
架构(Architecture) |
行为(Behavior) |
界面(UI) |
一、架构(Architecture)
1、LifeCycle
1.1、使用LifeCycle解耦界面与组件
Jetpack提供了两个类:LifecycleOwner(被观察者)和LifecycleObserver(观察者),通过观察者模式对界面的生命周期改变进行监听。
Activity和Fragment都实现了LifecycleOwner(被观察者),我们自定义只需要实现LifecycleObserver(观察者)就可以监听界面生命周期的改变来处理我们需要在生命周期方法中处理的逻辑。
- 实现监听的自定义组件
public class LifeCycleTest implements LifecycleObserver {
private static final String TAG = "LifeCycleTest";
private OnLifeCycleListener onLifeCycleListener;
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void start() {
LogUtils.d(TAG, "onResume");
if (onLifeCycleListener != null) {
onLifeCycleListener.onLifeCycle("LifeCycleTest");
}
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void stop() {
LogUtils.d(TAG, "onPause");
}
public interface OnLifeCycleListener {
void onLifeCycle(String data);
}
public void setOnLifeCycleListener(OnLifeCycleListener onLifeCycleListener) {
this.onLifeCycleListener = onLifeCycleListener;
}
}
- Activity或Fragment中设置监听
LifeCycleTest lifeCycleTest = new LifeCycleTest();
getLifecycle().addObserver(lifeCycleTest);
1.2、使用LifeycleService解耦Service与组件
需要导入第三方Google官方支持库
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
- 需要解耦的代码,实现跟服务生命周期相关方法
public class LifeCycleServiceTest implements LifecycleObserver {
private static final String TAG = "LifeCycleServiceTest";
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void create() {
LogUtils.d(TAG, "onCreate");
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void destroy() {
LogUtils.d(TAG, "onDestroy");
}
}
- 跟服务关联
服务需要继承LifecycleService,LifecycleService继承了Service并且实现了
LifecycleOwner(观察者),因此我们只需要继承LifecycleService,使用方法跟Service相同。
public class MyLifeCycleService extends LifecycleService {
private LifeCycleServiceTest lifeCycleServiceTest;
public MyLifeCycleService() {
LogUtils.d(this.getClass().getSimpleName(), "MyLifeCycleService");
lifeCycleServiceTest = new LifeCycleServiceTest();
getLifecycle().addObserver(lifeCycleServiceTest);
}
}
<service android:name=".service.MyLifeCycleService"/>
- 启动服务
public void onClick(View v) {
Intent intent = new Intent(this, MyLifeCycleService.class);
switch (v.getId()) {
case R.id.btStart:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
startForegroundService(intent);
} else {
startService(intent);
}
break;
case R.id.btStop:
stopService(intent);
break;
}
}
1.3、使用ProcessLifecycleOwner监听应用程序的生命周期
需要导入第三方Google官方支持库
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
- 监听生命周期
public class ApplicationObserver implements LifecycleObserver {
private static final String TAG = "ApplicationObserver";
// 在应用程序整个生命周期只会被调用一次
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate(){
LogUtils.d(TAG, "onCreate");
}
// 应用程序在前台时被调用
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart(){
LogUtils.d(TAG, "onStart");
}
// 应用程序在前台时被调用
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResume(){
LogUtils.d(TAG, "onResume");
}
// 当应用程序退出到后台时被调用
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause(){
LogUtils.d(TAG, "onPause");
}
// 当应用程序退出到后台时被调用
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop(){
LogUtils.d(TAG, "onStop");
}
// 永远不会被调用,系统不会分发调用“ON_DESTROY”事件
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy(){
LogUtils.d(TAG, "onDestroy");
}
}
- 在Application中进行监听注册
// 3、监听Application的声明周期
ProcessLifecycleOwner.get().lifecycle.addObserver(ApplicationObserver())
2、Navigation
https://developer.android.google.cn/jetpack ↩︎