使用生命周期感知型组件Lifecycle
处理生命周期
Lifecycle 是一个类,用于存储有关组件(如 Activity 或 Fragment)的生命周期状态的信息,并允许其他对象观察此状态。
先来看下在使用Camera的两个示例, 需要在activity启动时启动摄像头,activity销毁时关闭摄像头
示例1:通常处理方式
//定义管理类
public class CameraManager {
public void openCamera() {
System.out.println("open camera done!");
}
public void closeCamera() {
System.out.println("close camera done!");
}
}
//使用代码
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;
private CameraManager cameraManager;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
cameraManager = new CameraManager();
}
@Override
protected void onResume() {
super.onResume();
cameraManager.openCamera();
}
@Override
protected void onDestroy() {
super.onDestroy();
cameraManager.closeCamera();
}
}
示例2: 使用Livecycle处理方式
//定义Camera管理类
public class CameraManager implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void openCamera() {
System.out.println("open camera done!");
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void closeCamera() {
System.out.println("close camera done!");
}
}
//应用中使用
public class MainActivity extends AppCompatActivity {
ActivityMainBinding binding;
private CameraManager cameraManager;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
cameraManager = new CameraManager();
getLifecycle().addObserver(cameraManager);
}
}
以上两个程序实现的功能完全一致,应用Lifecycle后,管理类对业务逻辑侵入变少,想象一下,如果有多个管理类,代码流程还是会非常清晰,并且更易维护。
够了够了,后面别学了,用就是了