Android singleTask veya singleInstance başlatma modu? [kapalı]


84

Ana etkinliği olarak bir listeye sahip bir uygulamam var ve ardından bu öğenin ayrıntılı bir görünümünü açan öğeleri tıklayabilirsiniz. Ayrıca ana faaliyete benzer ve amaçlandığı gibi çalışan bir arama faaliyetim var.

Bununla birlikte, bu arama etkinliğinin yığında yalnızca bir örneğinin olmasını istiyorum, böylece kullanıcılar birden çok kez arama yapabilir ve geri tıklamak, onları aramaya başlamadan önceki önceki görünüme döndürür (önceki arama sonuçlarına geri dönmek yerine)

hem singleTask hem de singelInstance başlatma modu istediğimi yapıyor gibi görünüyor, bu nedenle bu amaç için hangisini kullanmam gerektiğinden emin değilim ve neden?

Yanıtlar:


141

Gönderen Uygulamasıyla İlgili Temel Android dev kılavuzda sayfa:

Varsayılan olarak, bir uygulamadaki tüm etkinliklerin birbirine yakınlığı vardır - yani, hepsinin aynı göreve ait olması tercih edilir.

"SingleInstance" etkinliği, kendi görevindeki tek etkinlik olarak durur. Başka bir etkinlik başlatırsa, bu etkinlik başlatma modundan bağımsız olarak farklı bir görevde başlatılacaktır - sanki FLAG_ACTIVITY_NEW_TASK niyetindeymiş gibi. Diğer tüm açılardan, "singleInstance" modu "singleTask" ile aynıdır.

Yukarıda belirtildiği gibi, "singleTask" veya "singleInstance" etkinliğinin hiçbir zaman birden fazla örneği yoktur, bu nedenle örneğin tüm yeni amaçları ele alması beklenir. Bir "singleInstance" etkinliği her zaman yığının en üstündedir (görevdeki tek etkinlik olduğu için), bu nedenle her zaman amacı yerine getirebilecek konumdadır. Bununla birlikte, bir "tekGörev" etkinliği yığında üzerinde başka etkinliklere sahip olabilir veya olmayabilir. Eğer öyleyse, niyeti idare edecek konumda değildir ve niyet düşer. (Niyet bırakılsa bile, gelişi görevin ön plana çıkmasına, orada kalmasına neden olacaktır.)

Bir Görevdeki 4 Aktivite

Her iki başlatma modunda da Aktivitenin hiçbir zaman birden fazla örneği olmadığından, geri düğmesi sizi her zaman durumunuzdaki Aktivitenin mevcut örneğine götürür.

Önemli bir fark, "tek görev" in, bir şey seçildiğinde başlatılan yeni Etkinlikler için yeni bir görevin oluşturulmasını gerektirmemesidir. Ayrıca her seferinde geri düğmesinden bu yeni görevi kaldırması gerekmeyecek.

Etkinlik yığınınızın tümü tek bir kullanıcı "görevi" ile ilgili olduğundan ve singleInstance'ın bunları her zaman işlemek için yararlı olabileceği karmaşık bir Amaç yapınız gibi görünmediğinden, singleTask başlatma modunu kullanmanızı öneririm.

İşte daha fazla bilgi için iyi bir blog yazısı ve aynı zamanda görselin adı verilmiştir: Android Aktiviteleri ve Görevleri serisi - Android'in kullanıcı arayüzü bileşen modeline giriş


4
Teşekkürler! iyi bir okumaya benziyor ... şey fark edildi Aslında bir faaliyetin birden fazla örneğini İSTİYORUM ve yalnızca ön plan etkinliği bir arama etkinliği olduğunda ve mevcut etkinliği kullanması durumunda başka bir arama yapıldığında (pazarın nasıl çalıştığı gibi) ve bunun için singeTop tam olarak peşinde olduğum şey ama yine de yardım için teşekkürler =) teşekkürler
Kman

1
Hey teşekkürler. Bu iyi yazılmış gönderi bana biraz yardımcı oldu.
icecreamman

Detaylar için teşekkürler, özellikle de bu (Niyet düşse bile, gelişi görevin ön plana çıkmasına, orada kalmasına neden olacaktı) , bu da kafa karışıklığımı anında temizliyor. Tek bir Görev Aktivitesi yığının en üstünde değilse ne olur diye düşünüyordum ama yine de belirtmeden ona gitmek istiyorum FLAG_ACTIVITY_CLEAR_TOP .
neevek


30

Basit bir şekilde-

singleTask:

Sistem yeni bir görev yaratır ve etkinliği yeni görevin kökünde somutlaştırır. Bununla birlikte, etkinliğin bir örneği ayrı bir görevde zaten mevcutsa, sistem onNewIntent(), yeni bir örnek oluşturmak yerine , bir yöntem çağrısı aracılığıyla amacı mevcut örneğe yönlendirir . one instanceBir seferde yalnızca etkinlik olabilir.

Not: Etkinlik yeni bir görevde başlamasına rağmen, Geri düğmesi kullanıcıyı yine de önceki etkinliğe döndürür.

tek örnek-

"singleTask"Sistemin örneği tutan göreve başka herhangi bir etkinlik başlatmaması dışında aynıdır . Faaliyet her zaman görevinin tek ve tek üyesidir; bununla başlatılan tüm etkinlikler ayrı bir görevde açılır .


4

singleTaskve singleInstanceetkinlikler yalnızca bir göreve başlayabilir. Her zaman etkinlik yığınının temelindedirler. Dahası, cihaz aynı anda aktivitenin yalnızca bir örneğini tutabilir - bu türden yalnızca bir görev.
daha fazla android için: launchMode .


1
son cümle singleInstance için doğru değil, singleTask
Serdar Samancıoğlu

@SerdarS. yorumunuz için teşekkür ederiz. Daha fazlasını ekleme singleTask- Sistem yeni bir görev oluşturur ve etkinliği yeni görevin kökünde başlatır. Bununla birlikte, etkinliğin bir örneği ayrı bir görevde zaten mevcutsa, sistem onNewIntent(), yeni bir örnek oluşturmak yerine , bir yöntem çağrısı aracılığıyla amacı mevcut örneğe yönlendirir . Bir seferde etkinliğin yalnızca bir örneği var olabilir. daha developer.android.com için
Rupesh Yadav

Anladım, sonra yanılmışım. Rahatsız ettiğim için özür dilerim.
Serdar Samancıoğlu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.