2010-07-16 10 views
20

Sadece bir widget tarafından yandım. Sorunun sebebini görebiliyordum, ama nedenini veya çözümünü belirleyemedim. Widget'ım bir arama (SearchManager) yayınladı ve etkinlik bir arama iletişim kutusu başlattı, ancak widget'ıma geri çağrıldığında, widget'a başka bir referans oluşturdu (yani, thread-id aynıydı, ancak widget-id 65'ten 0'a değiştirildi.Bir android widget'ında veya uygulamasında singleTop launchMode'u kullanmak ne zaman gereklidir?

Bu, yeni bir örneğin oluşturulduğuna inanmamı sağladı ve sorun için geçerli olan ayarların belgelerini aradım. Sonunda, ben android:launchMode="singleTop" tökezledim ve AndroidManifest içinde ayarladığınız anda, viola! Widget'ım işe yaradı. Bu, iki günlüğün hata ayıklama işleminin daha iyi bir parçasını almamı sağladı.

Başka bir durum var mı ya da benim sorunum için teknik olarak doğru bir cevap var mı?

+1

Soru başlığının içerik için yararlı olduğunu sanmıyorum. Ben tek Top için uygun kullanım durumları hakkında bir soru ve cevaplar görmeyi umuyordum. Bu biraz gelişim hikayesi ve daha sonra belgelerden bir alıntı. – helloPiers

+1

@ Lot105 - yeterince adil. Devam et ve bazı cevaplar ekle. Karşılaştığım çok büyük bir problemdi, bu yüzden SO tarafından önerildiği gibi “kendi sorunuzu sorup cevapla” yı yaptım. Yanıt katkınız ve diğerlerinin bu Soru-Cevap bölümünü geliştireceğinden eminim. 3000'den fazla görüşe sahipti, bu yüzden açıkça ilgi var. Cevabımın * SADECE * Cevap :) olduğundan şüphe duyuyorum. Tabii ki, bu benim cevabımı aldığım yerden doktora bir referans ve alıntı. Şahsen, DOC'u açıklığa kavuşturarak bu tarz sorun/cevapta gerçek bir değer buluyorum. – mobibob

+1

Daha açık olmalıydım. Soru gövdesi ve cevabı, kesinlikle kendi başlarına faydalı ve ilginçtir. – helloPiers

cevap

36

Android Dokümanlar'da daha fazla okuma yaptım - Bir ömür boyu dokümanlarını okuyarak ve beynimi kıran yeni bir ince ayrıntı bulabilirdim :) Bu, beklemediğim birden çok örneğimi açıklıyor, ancak meydana gelir.

sadece bir açıdan birbirinden farklı "standart" ve "singleTop" modları

Android Doc on Activity definition for AndroidManifest.xml

: Her zaman bir "standart" etkinliği için yeni niyet , yeni örneği var sınıf, bu amaç için yanıtı oluşturulur. Her bir örnek , tek bir amaç taşır. Benzer şekilde, yeni bir niyeti ele almak için bir "tekTop" aktivitesinin yeni bir örneği de yaratılabilir. Ancak, hedef görevinin zaten varolan bir örneğinin yığınının üstündeki etkinliğe sahip olması durumunda, numaralı yeni niyeti (onNewIntent() çağrısında) alır; yeni örnek oluşturulmadı. Diğer koşullarında - örneğin, "tekTop" etkinliğinin etkinliğinin mevcut örneği hedef görevdeyken, ancak yığının üstündeki değilse veya bir yığının üstündeyse, ancak hedef görev - yeni bir örnek oluşturulacak ve yığının üzerine itilecek.

+6

"veya bir yığının en üstünde, ancak hedef görevde değilse - yeni bir örnek oluşturulacak ve yığının üzerine itilecek." Niye ya? Birisi bu alıntılanan bölümü daha açıklayabilir mi? – Patrick

+0

@Patrick Bu senaryoyu FLAG_ACTIVITY_NEW_TASK kullandığınızda olduğuna inanıyorum. Bu durumda, mevcut görevle ilgilenmezsiniz ve yeni bir görev oluşturuyorsunuz, bu nedenle etkinliğiniz yeni görevdeki tek kişi olur.Yanlışsam düzelt. –

İlgili konular