2012-03-14 17 views
7

Bir telefon kapatma olayını engellemek ya da belki de bunun etrafında farklı bir kesmek kullanmak mümkün mü? Bazı analitik verileri toplayan, piyasa dışı bir uygulamanın parçası olan sürekli çalışan bir hizmetim var. Analitiği sona erdirmek ve raporlamak, ardından sistem kapatmaya devam etmek istiyorum.Android'de Kapatma Olayları

Olayı, hizmetlerin onDestroy veya onShutdown bölümlerinden tetiklemeyi denedim, ancak telefon bildirmek için zaman vermeden kapanacak.

Etkinlik ekranlarına dayanarak çok sayıda kısa oturum yaparak bu konuyla ilgili çalışma yapmak, kaçınmak istediğim duyumsal olmayan analitik bilgiler verir.

cevap

8

ACTION_SHUTDOWN amacını yakalayan bir yayın alıcısı oluşturun.

OnReceive() yönteminde, yapmaya çalıştığınız şeyi başarabilirsiniz.

http://developer.android.com/reference/android/content/Intent.html#ACTION_SHUTDOWN

+1

Bu iş bitti ve tüm testleri geçti. –

+1

@TimCapes Duymak harika! Android'in attığı çok fazla amaç var. Veri toplamanıza yardımcı olmak için, telefon açıldığında uygulamanızı başlatmak için BOOT_COMPLETE eylem amacını yakalayabilirsiniz;) – jjNford

+0

Bunu yeniden başlatırken hizmeti başlatmak için bunu yapıyorsunuz, ancak bunu belirtdiğiniz için teşekkürler. –

3

Sen Runitme addShutdownHook(Thread hook) yöntemini kullanarak bir Shutwdown kanca kayıt deneyebilirsiniz.

Aditionally

yöntem referans durumları: runFinalizersOnExit (boolean) gerçek değişkeni ile çağrıldığında edilmişse

, çöp toplama ve sonuçlandırma tüm kanca sonra gerçekleşecek ya bitmiş ya başarısız oldular. Sonra VM sona erer.

Yani

, teorik VM senin iplik bitirmek kadar sonlandırılacak.

+1

Bu fikir için teşekkürler, bazı potansiyel var. Ancak, sanal makine aslında kapanırken ve diğer olaylar gerçekleştiğinde belgeler oldukça seyrek. Belli olmayan belgelere büründüğümde, eylemin kapatılmasından daha iyi olacağımı düşünüyorum. Yayın alıcısı yaklaşımıyla ilgili herhangi bir sorunla karşılaşırsam bunu aklımda tutacağım. –

+1

@TimCapes Haklısınız, bu konuda doktor oldukça açık değil. –