Tích hợp Lifecycle với Compose

Thư viện Lifecycle cung cấp các API tích hợp cho phép bạn tích hợp với Jetpack Compose. Các API chính bao gồm:

  • Luồng cho Lifecycle.State hiện tại.
  • LifecycleEffects cho phép bạn chạy một khối dựa trên một Lifecycle.Event cụ thể.

Những công cụ tích hợp này cung cấp các hook thuận tiện để quản lý Vòng đời trong hệ phân cấp Compose. Tài liệu này trình bày cách bạn có thể sử dụng những công cụ đó trong ứng dụng của mình.

Thu thập trạng thái vòng đời bằng luồng

Lifecycle hiển thị một thuộc tính currentStateFlow cung cấp Lifecycle.State hiện tại dưới dạng StateFlow Kotlin. Bạn có thể thu thập Flow này dưới dạng State. Việc này cho phép ứng dụng của bạn đọc các thay đổi của Lifecycle trong quá trình kết hợp.

val lifecycleOwner = LocalLifecycleOwner.current
val stateFlow = lifecycleOwner.lifecycle.currentStateFlow
…
val currentLifecycleState by stateFlow.collectAsState()

Bạn có thể xem ví dụ trước bằng mô-đun lifecycle-common. Phương thức currentStateAsState() có trong mô-đun lifecycle-runtime-compose, cho phép bạn dễ dàng đọc trạng thái của Vòng đời hiện tại chỉ bằng một dòng. Ví dụ sau minh hoạ việc này:

val lifecycleOwner = LocalLifecycleOwner.current
val currentLifecycleState = lifecycleOwner.lifecycle.currentStateAsState()

Chạy mã trên các sự kiện trong vòng đời

Ngoài ra còn có LifecycleEffects cho phép bạn chạy một khối khi một Lifecycle.Event cụ thể xảy ra.

LifecycleEventEffect(Lifecycle.Event.ON_START) {
  // do something here
}

Ngoài LifecycleEventEffect, bạn cũng có thể dùng LifecycleStartEffectLifecycleResumeEffect. Các API này được liên kết với các sự kiện cụ thể. Chúng cũng cung cấp một khối bổ sung trong khối chính giúp dọn dẹp mọi mã mà sự kiện có thể đã khởi động.

LifecycleStartEffect

LifecycleStartEffect tương tự như LifecycleEffect, nhưng chỉ chạy trong các sự kiện Lifecycle.Event.ON_START. Ứng dụng này cũng chấp nhận các khoá hoạt động như những khoá Compose khác. Khi thay đổi, khoá sẽ kích hoạt khối để chạy lại.

Khi có một sự kiện Lifecycle.Event.ON_STOP hoặc hiệu ứng thoát khỏi cấu trúc, hệ thống sẽ thực thi một khối onStopOrDispose. Điều này cho phép dọn dẹp mọi công việc thuộc khối khởi động.

LifecycleStartEffect {
  // ON_START code is executed here

  onStopOrDispose {
    // do any needed clean up here
  }
}

LifecycleResumeEffect

LifecycleResumeEffect hoạt động giống như LifecycleStartedEffect, nhưng thực thi trên sự kiện Lifecycle.Event.ON_RESUME. Phương thức này cũng cung cấp một khối onPauseOrDispose để dọn dẹp.

LifecycleResumeEffect {
  // ON_RESUME code is executed here

  onPauseOrDispose {
    // do any needed clean up here
  }
}