Giải thích sở thích tác vụ Android


104

Chính xác thì thuộc tính taskAffinityđược sử dụng để làm gì? Tôi đã xem qua tài liệu nhưng tôi không thể hiểu nhiều.

Bất cứ ai có thể giải thích mối quan hệ nhiệm vụ trong thuật ngữ laymans?


1
Dưới đây là lời giải thích rất tốt với các ví dụ: slideshare.net/RanNachmany/...
user1269737

Tôi nghĩ rằng câu trả lời này là tốt nhất: stackoverflow.com/a/21383301/1318946
Pratik Butani

Câu trả lời:


160

Android Task Affinity được sử dụng để làm gì?

Một ứng dụng android có các Hoạt động tạo thành một ngăn xếp giống như một bộ bài. Nếu bạn khởi động một ứng dụng Android và bắt đầu năm hoạt động A, B, C, D, E. Chúng sẽ tạo thành một ngăn xếp

E   - chat view
D   - weather screen
C   - map view
B   - weather screen
A   - login screen

E là Hoạt động cuối cùng được bắt đầu và nó đang hiển thị. Nếu bạn đóng E, D sẽ được hiển thị. Nếu bạn đóng D, C sẽ được hiển thị. Vân vân.

Lưu ý rằng Hoạt động BDlà cùng một hoạt động. Điều gì sẽ xảy ra nếu người dùng thực hiện một số sửa đổi đối với D weather screenvà sau đó quyết định đóng hoạt động, sau đó đóng C Map view?

Sau đó, người dùng sẽ quay lại màn hình thời tiết và người dùng sẽ không hài lòng vì những thay đổi được thực hiện ở cấp độ D weather screenkhông được lưu trong cấp độ B weather screen. Mặc dù đó là cùng một hoạt động, nhưng đó là một STATE khác của hoạt động đó.

Người dùng có 5 lớp hoạt động và hai trong số đó là cùng một hoạt động. Việc bật tất cả 5 khỏi ngăn xếp sẽ tạo ra hiện tượng mà bạn sẽ tương tác với hai phiên bản khác nhau của cùng một hoạt động và có thể khá khó hiểu.

Người dùng thường không nghĩ về một chồng hoạt động cứng nhắc. Họ nghĩ: "ooh chế độ xem thời tiết, tôi sẽ thực hiện thay đổi ở đó" và sau đó họ muốn quay lại chế độ xem Bản đồ. Sau đó sao lưu lại vì họ muốn quay lại màn hình Đăng nhập. Tại sao lại B weather apphiển thị và tại sao nó không lưu cài đặt từ cấp D?

Lập trình viên có thể giảm bớt một số nhầm lẫn nếu các Hoạt động BDđược liên kết ở trạng thái. Cách này thay đổi cách khác. Mỗi lần người dùng mở một màn hình thời tiết mới, nó sẽ bí mật mở một phiên bản duy nhất của màn hình thời tiết.

Trong những trường hợp này, có thể mong muốn thay đổi nhiệm vụ Mối quan hệ của Hoạt động. Người dùng sẽ thay đổi cấp độ D. Sau đó sao lưu lên cấp B. Và xem những thay đổi ở B đã được thực hiện đối với D.

Chương trình giữ một ngăn xếp mà bạn có thể sao lưu thông qua, điều này thật tuyệt và khi người dùng mở X phiên bản của cùng một hoạt động ở những nơi ngẫu nhiên, tất cả chúng đều là một.

Trình chiếu với giải thích thêm: http://www.slideshare.net/RanNachmany/manipulation-android-tasks-and-back-stack


13
Làm thế nào về nếu sử dụng singleInstancethay vì sử dụng taskAffinity?
hguser

5
Trong trường hợp được mô tả ở trên, tôi muốn sử dụng Intent.FLAG_ACTIVITY_REORDER_TO_FRONT như một lá cờ trong tiếp cận mục đích Hoạt động gọi D, điều này sẽ mang lại Hoạt động B trên đầu trang của tất cả những người khác và giữ chỉ có một thể hiện của nó
EyalBellisha

63
Trên thực tế, câu trả lời này hầu như không liên quan đến taskAffinitychút nào :-( Lời giải thích rất mơ hồ. Thật ngạc nhiên khi câu trả lời của luận văn nhận được rất nhiều phiếu tán thành.
David Wasser

5
Câu trả lời dài như vậy nhưng vẫn không đề cập đến thực tế đơn giản: taskAffinityđược sử dụng để chỉ định tên của tác vụ mà hoạt động thích chạy trong. Khi an Intentchứa cờ FLAG_ACTIVITY_NEW_TASK, hoạt động sau đó sẽ được đưa vào tác vụ cụ thể này (được định nghĩa bởi taskAffinity).
Stan Mots

2
Although it's the same activity, it's a different STATE of that activity.Tôi sẽ nói, "Đó là một ví dụ khác của hoạt động đó."
Maksim Dmitriev

6

Mối quan hệ chỉ ra nhiệm vụ mà một hoạt động thích thuộc về.

Mối quan hệ phát huy tác dụng trong hai trường hợp:

Khi ý định khởi chạy một hoạt động có chứa cờ FLAG_ACTIVITY_NEW_TASK.

Khi một hoạt động có thuộc tính allowTaskReparenting được đặt thành "true".

Vui lòng tham khảo http://developer.android.com/guide/components/tasks-and-back-stack.html


26
Cảm ơn cho sao chép từ developer.android.com
Anirban

Điều này không giải thích được gì. Nó có ý nghĩa gì trong thực tế?
James Andrews

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.