2011-08-11 11 views
5

Action Bar'ı kullanan iki Etkinlik içeren bir android uygulama yapıyorum (Android 2.2'yi hedeflerken https://github.com/johannilsson/android-actionbar).android etkinliğe döndüğünde, imha edilir ve yeniden başlatılmaz

Çok sayıda etkinliğe sahiptir. Feed adı verilen bir "Ana Sayfa" Etkinliği ve "Ayarlar" adlı başka bir etkinlik var.

Kullanmakta olduğum sorun, kullanıyorum eylem çubuğuna örnekte verilen createIntent işlevini kullanmanın, Kullanıcı giriş etkinliğine dönmek için ana düğme düğmesine dokunduğunda devam ettirilmek yerine, yine de imha edilir olmasıdır. .

Biraz hata ayıklama işlemi ile, bu işlemin ilk kez durdurulduğu ve durdurulduğu, ancak isteğinin devam etmesi istendiğinde değil, yok edildiğini fark ettim.

public static Intent createIntent(Context context) 
{   
    Intent i = new Intent(context, Feed.class);   
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);   
    return i;  
} 

Bu önemli bir sıkıntı ve hatırı sayılır ölçüde yem için verileri yeniden var gibi uygulama yavaşlatır (önbelleğe, ancak anlık olmayan almak için veri yeniden).

Bu davranıştan nasıl kurtulabilirim? ve bu neden oluyor, çünkü ekstra bayrakın bu davranışı durdurması gerektiğine inanıyorum.

cevap

4

Sen kullanmak istediğiniz

Context.startActivity() geçirilen bir Niyet içinde ayarlarsanız

, bu bayrak olmak başlatılan faaliyeti neden olur zaten çalışıyorsa, görevinin geçmiş yığınının önüne getirildi. Örneğin, dört etkinlikten oluşan bir görevi düşünün: A, B, C, D.D, startActivity() öğesini B etkinliğinin bileşenine çözen bir Niyetle çağırırsa, B, geçmiş yığınının ön tarafına getirilir ve bu da aşağıdaki sırayla olur: A, C, D, B. Bu bayrak olacaktır. FLAG_ACTIVITY_CLEAR_TOP da belirtilmişse göz ardı edilmemelidir.

public static Intent createIntent(Context context) 
{   
    Intent i = new Intent(context, Feed.class);   
    i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);   
    return i;  
} 
1

Hangi sınıfı başlattığınıza bağlı olarak, etkinliğinizin yeni bir örneğinin başlatıldığı ve eski olanın yok edildiği bir sorunla karşılaşıyor olabilirsiniz. Bu belgeler ne diyor yaklaşık FLAG_ACTIVITY_CLEAR_TOP:

ayarlayın ve başlatılmaktadır aktivite zaten üstüne diğer faaliyetlerinin tüm, o zaman, şimdiki görev çalışan yerine o faaliyetin yeni bir örneğini başlatıyor Eğer

kapalı olacak ve bu niyet yeni bir niyet olarak (şimdi üstte) eski faaliyete teslim edilecektir. sizin ayıklama faaliyeti olduğunu göstermiştir olmadığından emin değilim Yani "etkinliği başlatılmaktadır eğer zaten ... Geçerli görevin çalışan", ancak bu mantıklıdır diyor

Bildirimi ayrıca yok ediliyor.

Hata ayıklama yaparken, sınıf nesneleriniz için "kimlik" numaralarına bakıyor musunuz? Sınıfınızın hem onCreate() hem de onDestroy() yöntemlerinde bir kesme noktası ayarlayın ve her birinin içinde sınıfın kimliğine bakın. Farklılarsa, aktivitenizin iki farklı örneğini biliyorsunuzdur.

Yan not/soru olarak, 3.0'a kadar ActionBar kullanıma sunulmadıysa nasıl "hedefleme" yapıyorsunuz?

FLAG_ACTIVITY_REORDER_TO_FRONT 

Teklif Android docs den:

+1

Onun kullandığı İşlem Çubuğu 3.0 :) yılında göz simüle etmek için bir ev yapımı versiyonu olduğunu düşünüyorum. Ben kendim kullandım ve oldukça iyi çalışıyor. – Jack

+0

Kesme noktalarını belirledim ve kimlikleri ve aynı kimliği izledim, yok olduğunda ve daha sonra yeniden oluşturulduğunda (böylece kimliğin değişmesi durumunda) etkinliğe dönmeye çalışana kadar, ancak niyet çağrıldığında yok olur. Sorunun durdurulan etkinlikle ilgili olduğunu hissediyorum, bu nedenle çalışmıyor ve bu nedenle neden yok ve yeniden oluşturulur. – lloydsparkes

İlgili konular