2012-03-07 19 views
40

Sorumu açıklamaya çalışalım: Bir uygulama ve hizmet aldım. uygulama Şimdi kullanıcı etkinliği C.Android: Yığında olan aktiviteyi başlatmayı nasıl önleyebilirim?

Şimdi hizmet yeniden etkinlik B başlamak istiyor başlar hizmeti uygulama Etkinliği B başlayabilirsiniz yayını gönderir aktivite A. ile başlatılır. Ancak, faaliyetin hala yığında olduğunu veya bunun için bir niyet bayrağı olduğunu bilmesine nasıl izin verebilirim?

Yığında bulunduğu için B etkinliğini başlatmasını nasıl önleyebilirim?

+0

tam Ge nedir android:launchMode="singleInstance" ait kullanmayı düşünebilirsiniz? Yazdığın kod mu? Eğer öyleyse, cevap basittir, ** "StartActivity (B)" yi çağırmayın. –

+0

Üzgünüm, sorumu tekrar yazdım :) –

cevap

55

Ben zaten oluşturmak eğer tekrar oluşturmak istemediklerini etkinlik B singleInstance, o launch mode of the activity aktivite instanciated nasıl tanımlayan apaçık android:launchMode tanımlanabilir yapmak gerektiğini düşünüyorum. etkinlik zaten başlamış ise üstte olacak Eğer durum kullanımda

android:launchMode="singleInstance"

+1

İyi çalışıyor! :) Teşekkürler –

+2

Ama eğer ben launchMode'u singleInstance olarak ayarlarsam, onActivityResult geri aramalarını doğru olarak alamazdım. – DevAndroid

+1

Sorunumu çözüyorum .. –

21

Bayrağı Intent.FLAG_ACTIVITY_NEW_TASK işaretçisini kullanabilirsiniz. Etkinlik zaten çalışıyorsa, yeni etkinlik oluşturmak yerine bunu öne getirecektir.

Intent.FLAG_ACTIVITY_CLEAR_TOP ekini eklerseniz, bu etkinlikten sonra arka taraftaki tüm etkinlikler temizlenir.

+2

Bu, olmasını istemediğim şeyden çok memnun. Başlangıç ​​etkinliği üzerinde zaten bir etkinlik varsa. Bu geçersiz kılınmalıdır. –

+1

Bu, etkinliği geçersiz kılmaz.Yalnızca önceden başlatılan etkinliği ön tarafa getirecek. –

+2

Intent.FLAG_ACTIVITY_NEW_TASK benim için işe yaramıyor .. Bu her zaman yeni etkinlik başlat .. –

5

,

intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
mContext.startActivity(intent); 
+0

Bu özellikle bir kenar çubuğu/çekmece kullanıldığında kullanışlıdır ve ön tarafta iki kez bir etkinlik açmak için wanta yapmazsınız. – dermatthias

+0

Intent.FLAG_ACTIVITY_SINGLE_TOP kullanarak bir servi'den bir etkinlik başlatıyorum, etkinlik başlamıyor ve bu hatayı alıyorum: android.util.AndroidRuntimeException: Bir Activity bağlamının dışından startActivity() çağrısı FLAG_ACTIVITY_NEW_TASK bayrağını gerektirir. Bu gerçekten istediğin şey mi? – yeahman

2

android:launchMode="singleInstance" Yaklaşımları ve sadece Intent için bayraklar ekleyerek benim için işe yaramaz FLAG_ACTIVITY_SINGLE_TOP bayrağı set . ActivityThatHasToBeStarted

Intent intent = new Intent(activity, ActivityThatHasToBeStarted.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); 
startActivity(intent); 

yılında: artık ikinci aktiviteyi gerekmiyorsa

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) { 
     finish(); 
     return; 
    } 
    // Code for this creation 
} 
1

, bu iyidir etkinlik başladı alır kodunda

: Ne çalışmasıdır operasyon sona erdikten sonra bitirmek için pratik, o zaman ikinci aktivitesi üzerine yapmalısınız:

startActivity(new Intent(this, FirstActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)); 
finish(); 
0

Hedeflenen etkinliğinizin en üstünde başlayan tüm etkinlikleri kaldıracağından Intent.FLAG_ACTIVITY_CLEAR_TOP kullanmanızı öneririm.

örn:

Intent intent = new Intent(sourceActivity, Target activity); 

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

startActivity(intent) 
İlgili konular