Android JetPack架构-2-目前最优雅的生命周期处理方式LifeCycle

281 阅读1分钟

使用生命周期感知型组件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后,管理类对业务逻辑侵入变少,想象一下,如果有多个管理类,代码流程还是会非常清晰,并且更易维护。

够了够了,后面别学了,用就是了