SORU
9 Temmuz 2010, Cuma


Android uygulaması - birden fazla faaliyetleri ile ilgili Google Analytics

Oldukça heyecanlı ne kadar kolay benim app ile Google Analytics kurmanın ne kadar kolay olduğunu görmek için sabırsızlanıyordum, ama belgelerin eksikliği bir kaç soru ile beni oturuyorlar. Bulabildiğim tek bilgi olan belgeler değil, sadece bir Etkinlik Sayfa ve Olaylar raporlama bakar here,. Benim app birden çok Faaliyetleri üzerinde Sayfa görüntüleme ve Olayları bildirmek istiyorum.

Şimdi onCreate() benim tüm etkinliklerin, arıyorum:

    tracker = GoogleAnalyticsTracker.getInstance();
    tracker.start("UA-xxxxxxxxx", this);

Ve onDestroy() faaliyetleri:

    tracker.stop();

Ben o zaman gerektiği gibi Sayfa görüntüleme ve Olayları izlemek ve gösteri yapıyorum başka bir HTTP isteği ile birlikte göndermek. Ama en iyi yol bu olduğundan pek emin değilim. Başlangıç haber vermem gerekiyor mu() ve stop() her bir faaliyet, ya da ben sadece Aramayı Başlat() ve stop() ana başlatıcısı benim aktivitede?

CEVAP
6 HAZİRAN 2011, PAZARTESİ


Başlat Arama ile sorun()/stop() sonuçlar her faaliyet Hıristiyan tarafından önerildiği gibi) yeni bir "her faaliyet için Kullanıcı gider." ziyaret edin. Eğer bu kullanım için iyi ise, o zaman sorun yok, ancak, çoğu insan ziyaretleri iş beklediği şekilde değil. Örneğin, bu web veya iphone numaralarına android numaralarını karşılaştırmak çok zor olur, Bir bu yana "" bir oturum için web ve iphone haritalar, sayfa/bir aktivite değil. ziyaret

Başlat Arama ile sorun()/stop() Android garanti son aktivite kapandıktan sonra uygulamayı sonlandırmak için yapar beklenmedik şekilde uzun ziyaretler sonucu, bu uygulamada. Eğer uygulama bildirimleri veya hizmetleri ile bir şey yaparsa, buna ek olarak, bu arka plan görevleri, uygulamayı başlatmak ve neden "hayalet" ziyaret etti.GÜNCELLEME: stefano düzgün onTerminate() asla aramayı durdurmak için belli bir yer yok hayır yani gerçek bir cihaz üzerinde denir işaret().

Sorun ile Aramayı Başlat()/stop() bir tek "ana" etkinliği (olarak önerilen tarafından Aurora) yok garanti etkinlik olacak buralarda süresi senin kullanıcı kullanmadan app. "Aktivite yok (bellek boşaltmak için), diğer etkinliklere GA olayları yazmaya sonraki girişimleriniz oturum durduruldu. çünkü başarısız olur "ana eğer

Buna ek olarak, orada bir hata Google Analytics, en azından sürüm 1.2 nedenleri tutmak için güçlü bir başvuru kapsamında geçirmek için start () önleme ve ondan hiç alma, çöp toplama sonra onun yok. İçerik boyutuna bağlı olarak, bu oldukça büyük bir bellek sızıntısı olabilir.

Bellek sızıntısı yeterince kolay tamir etmek için, başlangıç arayarak çözülebilir() etkinlik örneği kendisi yerine. Uygulamayı kullanarak docs muhtemelen bu yansıtacak şekilde güncellenmelidir.

örn. Etkinlik: içinden

// Start the tracker in manual dispatch mode...
tracker.start("UA-YOUR-ACCOUNT-HERE", getApplication() );

yerine

// Start the tracker in manual dispatch mode...
tracker.start("UA-YOUR-ACCOUNT-HERE", this ); // BAD

Başlama çağrısı ile ilgili()/stop(), manuel referans sayma bir tür Aktivite.her çağrı için bir sayısı artan uygulayabilirsiniz() onCreate ve her onDestroy için azaltma(), arama GoogleAnalyticsTracker.() durak sayısı sıfır olduğunda.

Google'dan EasyTracker yeni kütüphane sizin için halleder.

Eğer EasyTracker faaliyetleri alt sınıf varsa. alternatif olarak, bu el ile kendi faaliyet ana sınıfında kendinize uygulayabilirsiniz:

public abstract class GoogleAnalyticsActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Need to do this for every activity that uses google analytics
        GoogleAnalyticsSessionManager.getInstance(getApplication()).incrementActivityCount();
    }

    @Override
    protected void onResume() {
        super.onResume();

        // Example of how to track a pageview event
        GoogleAnalyticsTracker.getInstance().trackPageView(getClass().getSimpleName());
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        // Purge analytics so they don't hold references to this activity
        GoogleAnalyticsTracker.getInstance().dispatch();

        // Need to do this for every activity that uses google analytics
        GoogleAnalyticsSessionManager.getInstance().decrementActivityCount();
    }

}



public class GoogleAnalyticsSessionManager {
    protected static GoogleAnalyticsSessionManager INSTANCE;

    protected int activityCount = 0;
    protected Integer dispatchIntervalSecs;
    protected String apiKey;
    protected Context context;

    /**
     * NOTE: you should use your Application context, not your Activity context, in order to avoid memory leaks.
     */
    protected GoogleAnalyticsSessionManager( String apiKey, Application context ) {
        this.apiKey = apiKey;
        this.context = context;
    }

    /**
     * NOTE: you should use your Application context, not your Activity context, in order to avoid memory leaks.
     */
    protected GoogleAnalyticsSessionManager( String apiKey, int dispatchIntervalSecs, Application context ) {
        this.apiKey = apiKey;
        this.dispatchIntervalSecs = dispatchIntervalSecs;
        this.context = context;
    }

    /**
     * This should be called once in onCreate() for each of your activities that use GoogleAnalytics.
     * These methods are not synchronized and don't generally need to be, so if you want to do anything
     * unusual you should synchronize them yourself.
     */
    public void incrementActivityCount() {
        if( activityCount==0 )
            if( dispatchIntervalSecs==null )
                GoogleAnalyticsTracker.getInstance().start(apiKey,context);
            else
                GoogleAnalyticsTracker.getInstance().start(apiKey,dispatchIntervalSecs,context);

          activityCount;
    }


    /**
     * This should be called once in onDestrkg() for each of your activities that use GoogleAnalytics.
     * These methods are not synchronized and don't generally need to be, so if you want to do anything
     * unusual you should synchronize them yourself.
     */
    public void decrementActivityCount() {
        activityCount = Math.max(activityCount-1, 0);

        if( activityCount==0 )
            GoogleAnalyticsTracker.getInstance().stop();
    }


    /**
     * Get or create an instance of GoogleAnalyticsSessionManager
     */
    public static GoogleAnalyticsSessionManager getInstance( Application application ) {
        if( INSTANCE == null )
            INSTANCE = new GoogleAnalyticsSessionManager( ... ,application);
        return INSTANCE;
    }

    /**
     * Only call this if you're sure an instance has been previously created using #getInstance(Application)
     */
    public static GoogleAnalyticsSessionManager getInstance() {
        return INSTANCE;
    }
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ionized Digital Air Studios

    Ionized Digi

    20 HAZİRAN 2009
  • Dylan Dubay

    Dylan Dubay

    10 Temmuz 2013
  • Xbox

    Xbox

    1 Kasım 2005