SORU
15 HAZİRAN 2011, ÇARŞAMBA


Etkinlik ana ekrandan Android uygulaması yükleyici ve uygulama başlatılıyor sipariş yığın sorun

Test amaçlı sadece, app benim MUAYENE ve bir URL ile yüklenen izin veriyorum. Telefonda indirdikten sonra, bir kullanıcı cihaza yüklemek ve daha sonra çalıştırmak için bir seçenek sunar Android uygulaması yükleyici ile başlatılabilir.

Biz indirilen ve yukarıda açıklandığı şekilde uygulama koştu eğer düşünün. Benim app ana/başlatıcı etkinlik giriş sayfası (Activity A). Kullanıcının kimliği doğrulandıktan sonra, bu uygulama, örneğin Activity B ana alana alınır. Şimdi geçerli etkinlik bu görevin yığını A > B.

Ben telefonda sonra ev düğmesine basın ve Android ana ekran için alınır. Ben yeniden başlatma menü simgesi ile benim app ve Activity A yerine Activity B alındım. Ya da yığın şimdi A > B > A, ya şimdi aktivite ile iki ayrı görevleri var etkinlik* *10 ve A sırasıyla yığınları. Ben istediğimi uygulamayı yeniden başlatın zaman Activity B geri alınacak. Bu durumda iken basarak beni geri geri Activity B.

Bu istenmeyen davranış, yalnızca ben ilk yükleyici) uygulamayı açın, ve eğer ana ekran üzerinden Uygulama açık değilse/menü olur.

Bu faaliyetler her bir mekanizma tarafından başlatıldı nasıl içine baktım. App yükleyici kullandığımızda, aşağıdaki günlükleri görüyoruz:

INFO/ActivityManager(XXXX): Starting activity: Intent { dat=file:///mnt/sdcard/download/[my app].apk cmp=com.android.packageinstaller/.InstallAppProgress (has extras) }
INFO/ActivityManager(XXXX): Starting activity: Intent { act=android.intent.action.MAIN flg=0x10000000 cmp=[my package]/[Activity A] }

ana ekran / başlatıcısı ile:

INFO/ActivityManager(XXXX): Starting activity: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=[my package]/[Activity A] }

Bayrağı kullanarak gördüğümüz yükleyici ile başladı 0x10000000 ama launcher ile başladı 0x10200000 kullanıyor görüyoruz. Ayrıca bir niyet kategori kullanıyor.

docs bayraklarını görüyoruz:

public static final int FLAG_ACTIVITY_NEW_TASK
Constant Value: 268435456 (0x10000000)

public static final int FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
Constant Value: 2097152 (0x00200000)

Bayrak FLAG_ACTIVITY_RESET_TASK_IF_NEEDED (kullanılan zaman uygulaması başlattı gelen launcher) gibi genellikle önlemek için yeni bir görev olarak yaratmıştır eğer zaten bir tane var, ve geri olacak son kullanılan aktivite. Bu istenen bir davranıştır. Neden bu durumda işe yaramıyor? Benim uygulama her zaman son Aktivite ne olursa olsun, app yükleyici/başlatıcısı ile başlatılmış olup bana geri dönecek emin olmak için yapabileceğim bir şey var mı?

Eğer singleTask kullanırsam her zaman bu uygulama aynı zamanda uygun olmayan () çalıştırmak zaman ben bana ana faaliyet (Activity A) geri alacak.

Burada birisi benzer bir sorun, kabul cevabı vardır) nerede yaşıyor bulduğum bir soru: App loses its ability to remember its stack when launched from another application.

EDİT: Kontrol etmek için bayrak FLAG_ACTIVITY_BROUGHT_TO_FRONT onCreate() bizim başlatıcısı aktivite (ve daha sonra bitirme ayarlandıysa) göre düzeltme ana belirtisi, ama açıkça temel sorun hala orada. Daha eksiksiz bir düzeltme var mı?

EDİT2: yukarıda bazı ayrıntılar alakalı olmayabilir bu yüzden aynı sonucu Android Market uygulamasını Çalıştır/karşıdan oluşur.

CEVAP
28 Temmuz 2011, PERŞEMBE


Eklenen bu antonyt cevap verdi:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
        // Activity was brought to front and not created,
        // Thus finishing this will get us to the last viewed activity
        finish();
        return;
    }

    // Regular activity creation code...
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Derek Banas

    Derek Banas

    12 AĞUSTOS 2008
  • kamaniusilelis

    kamaniusilel

    10 HAZİRAN 2011
  • TROPFEST

    TROPFEST

    27 Mart 2007