Android “launchMode”

Android Jun 16, 2021

Sẵn tiện vừa hỗ trợ dự án có sử dụng launchMode thì hôm nay mình sẽ giới thiệu với các bạn lập trình Android về launchMode trong Android. Nó là gì và cách sử dụng ra sao? Chúng ta sẽ đi tìm hiểu trong bài viết này nhé.

Trước khi bắt đầu thì các bạn cũng nên đọc và hiểu về Task và BackStack trong link bài viết này nhé.

Nếu các bạn làm với Android thì sẽ không lạ lẫm gì với launchMode trong file Manifest.


Launch mode cho phép ta định nghĩa cách mà một instance mới của một activity được liên kết với task hiện tại. Ta có thể định nghĩa launch mode theo hai cách:

  • Sử dụng file manifest: Khi ta khai báo một activity trong file manifest, ta có thể chỉ định cách mà activity được liên kết với task khi nó bắt đầu
  • Sử dụng flag của intent: Khi ta gọi tới phương thức startActivity() và truyền vào intent để khởi chạy một activity, ta có thể thêm một hay nhiều flag vào intent để chỉ định cách mà activity được liên kết với task hiện tại. Khi sử dụng cả hai cách trên với một activity, thì cách sử dụng flag của intent sẽ có quyền ưu tiên cao hơn, tức là launch mode được chỉ định trong intent sẽ được áp dụng cho instance của activity đó.

Sử dụng file manifest

Quy ước màu xanh là Activity mới được tạo, màu vàng là instance cũ và onNewIntent sẽ được gọi.

standard: là giá trị mặc định, hệ thống luôn tạo mới instance của Activity và đưa vào stack của task gọi nó.
singleTop:
  • Giống với standard nếu chưa tồn tại instance Activity trong stack hoặc instance của Activity không ở trên top của stack.

      Trường hợp chưa tồn tại Activity D trong stack

Trường hợp đã tồn tại Activity D trong stack nhưng không ở top của stack

  • Trong trường hợp 1 instance của Activity đã tồn tại và đang ở trên top của stack thì phương thức onNewIntent sẽ được gọi.

singleTask
  • Nếu chưa tồn tại instance Activity trong stack thì sẽ tạo mới instance vào trong stack
  • Nếu đã tồn tại trong stack rồi thì nó sẽ pop tất cả những Activity trước đó ra khỏi stack và onNewIntent sẽ được gọi.


singleInstance: đây là chế độ khá đặc biệt vì nếu activity được đặt là cờ này thì bản thân nó sẽ nằm ở 1 task riêng biệt khi được gọi. Task này chỉ có duy nhất mình nó, nếu 1 activity được gọi từ task này thì nó sẽ được thêm vào task khác.

Giả sử từ Activity E start thêm activity F thì kết quả sẽ như sau

Nếu start activity với mode = “singleInstance” mà đã tồn tại thì onNewIntent sẽ được gọi.


Sử dụng flag của intent

Ngoài cách sử dụng thuộc tính launchMode để định nghĩa launch mode cho một activity như trên, ta còn có thể sử dụng flag của intent được truyền vào phương thức startActivity để định nghĩa launch mode. Các giá trị instance có thể được sử dụng:

  • FLAG_ACTIVITY_NEW_TASK: tương tự như giá trị singleTask phía trên.
  • FLAG_ACTIVITY_SINGLE_TOP: tương tự giá trị singleTop phía trên.FLAG_ACTIVITY_CLEAR_TOP: Nếu activity chuẩn bị được start đã đang chạy trong task hiện tại, thay vì tạo một instance mới của activity đó, tất cả các activity ở phía trên sẽ bị destroy và intent này sẽ được đưa tới instance đã tồn tại đó thông qua phương thức onNewInstance(). FLAG_ACTIVITY_CLEAR_TOP thường được sử dụng kết hợp với FLAG_ACTIVITY_NEW_TASK. Khi sử dụng cùng với nhau, chúng sẽ cho phép xác định một activity có tồn tại ở một task khác không và đưa nó tới vị trí có thể phản hồi instance.

Trên đây là bài viết của mình về android launch mode, hy vọng các bạn đã có thêm kiến thức về launch mode trong Android.

Hẹn mọi người vào những bài viết theo nhé.

Tags

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.