Penjelasan Afinitas Tugas Android


104

Untuk apa sebenarnya atribut itu taskAffinitydigunakan? Saya telah membaca dokumentasi tetapi saya tidak bisa mengerti banyak.

Adakah yang bisa menjelaskan afinitas tugas dalam istilah awam?


1
Berikut penjelasan yang sangat bagus dengan contoh: slideshare.net/RanNachmany/…
pengguna1269737

Saya pikir jawaban ini yang terbaik: stackoverflow.com/a/21383301/1318946
Pratik Butani

Jawaban:


161

Untuk apa Android Task Affinity digunakan?

Aplikasi android memiliki Aktivitas yang membentuk tumpukan seperti setumpuk kartu. Jika Anda memulai aplikasi android, dan memulai lima aktivitas A, B, C, D, E. Mereka akan membentuk tumpukan

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

E adalah Aktivitas terakhir yang harus dimulai dan itu terlihat. Jika Anda menutup E, D akan ditampilkan. Jika Anda menutup D, C akan ditampilkan. dll.

Perhatikan bahwa Aktivitas Bdan Dmerupakan aktivitas yang sama. Bagaimana jika pengguna membuat beberapa modifikasi pada D weather screen, dan kemudian memutuskan untuk menutup aktivitas, lalu menutup C Map view?

Kemudian pengguna akan kembali ke layar cuaca dan pengguna akan tidak senang karena perubahan yang dibuat di level D weather screentidak disimpan di level B weather screen. Meskipun merupakan aktivitas yang sama, ini adalah NEGARA yang berbeda dari aktivitas tersebut.

Pengguna memiliki 5 tumpukan aktivitas, dan dua di antaranya adalah aktivitas yang sama. Menghilangkan semua 5 dari tumpukan akan menciptakan fenomena di mana Anda akan berinteraksi dengan dua versi berbeda dari aktivitas yang sama dan bisa sangat membingungkan.

Pengguna biasanya tidak berpikir dalam kerangka aktivitas yang kaku. Mereka berpikir: "ooh tampilan cuaca saya akan membuat perubahan di sana" dan kemudian mereka ingin kembali ke tampilan Peta. Kemudian kembali lagi karena ingin kembali ke layar Login. Mengapa B weather apppertunjukan dan mengapa tidak menyimpan pengaturan dari level D?

Pemrogram mungkin dapat mengurangi kebingungan jika Aktivitas Bdan Dditautkan dalam status. Dengan cara itu, perubahan yang satu mengubah yang lain. Setiap kali pengguna membuka layar cuaca baru, itu diam-diam membuka satu contoh layar cuaca.

Dalam keadaan ini, mengubah taskAffinity dari Aktivitas mungkin diperlukan. Pengguna akan mengubah level D. Kemudian kembali ke level B. Dan melihat perubahan di B yang dibuat ke D.

Program ini menyimpan tumpukan yang dapat Anda backup, yang bagus, dan ketika pengguna membuka X instance dari aktivitas yang sama di tempat acak, semuanya adalah satu.

Slideshow dengan lebih banyak penjelasan: http://www.slideshare.net/RanNachmany/manipulating-android-tasks-and-back-stack


13
Bagaimana jika menggunakan metode singleInstancealih - alih menggunakan taskAffinity?
hguser

5
Dalam kasus yang dijelaskan di atas, saya lebih suka menggunakan Intent.FLAG_ACTIVITY_REORDER_TO_FRONT sebagai tanda di Intent memanggil Aktivitas D, ini akan membawa Aktivitas B di atas yang lainnya dan hanya menyimpan satu instansinya
EyalBellisha

63
Sebenarnya, jawaban ini hampir tidak menyentuh taskAffinitysama sekali :-( Penjelasannya tidak jelas. Luar biasa bahwa jawaban-jawaban ini mendapatkan begitu banyak suara positif.
David Wasser

6
Jawaban yang begitu panjang tetapi masih tidak menyebutkan fakta sederhananya: taskAffinitydigunakan untuk menentukan nama tugas yang lebih disukai untuk dijalankan oleh aktivitas. Ketika sebuah Intentberisi bendera FLAG_ACTIVITY_NEW_TASK, aktivitas tersebut kemudian dimasukkan ke dalam tugas khusus ini (ditentukan oleh taskAffinity).
Stan Mots

2
Although it's the same activity, it's a different STATE of that activity.Saya akan berkata, "Ini contoh lain dari aktivitas itu."
Maksim Dmitriev

6

Afinitas menunjukkan tugas mana yang lebih disukai untuk dimiliki oleh suatu aktivitas.

Afinitas berperan dalam dua situasi:

Saat maksud yang meluncurkan aktivitas berisi tanda FLAG_ACTIVITY_NEW_TASK.

Saat aktivitas memiliki atribut allowTaskReparentingnya yang disetel ke "true".

Silakan lihat http://developer.android.com/guide/components/tasks-and-back-stack.html


26
Terima kasih telah menyalin dari developer.android.com
Anirban

Ini tidak menjelaskan apa-apa. Apa artinya dalam praktik?
James Andrews

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.