SORU
9 EKİM 2012, Salı


Uzun süren İşlemler için Android AsyncTask

AsyncTask belgelerine alıntı buldu here, diyor

AsyncTasks ideal kısa operasyon (en fazla birkaç saniye.) için kullanılır Eğer iş parçacıkları uzun süre çalışmasını sağlamak için ihtiyacınız varsa, çeşitli API, java tarafından sağlanan kullanmanız tavsiye edilir.açıklama.Vasi, ThreadPoolExecutor ve FutureTask gibi eşzamanlı pacakge.

Benim soru ortaya çıkıyor neden şimdi ? DoİnBackground işlevi UI iş parçacığı çalışır. Ne zararı uzun işlem burada çalışan alabilir miyiz ?

CEVAP
26 EKİM 2012, Cuma


Çok güzel bir soru, tam olarak sorunu anlamak için bir Android Programcısı olarak zaman alır. Gerçekten AsyncTask ilgili iki ana konu var :

  • kötü aktivite yaşam döngüsü bağlı
  • bu çok kolay bir bellek sızıntısı oluşturur.

RoboSpice Motivasyon uygulaması (available on Google Play) içinde ayrıntılı olarak bu soruya cevap. Derinlemesine bir AsyncTasks, Yükleyiciler, özellikleri ve dezavantajları görünüm vermek ve aynı zamanda ağ istekleri için alternatif bir çözüm tanıtacağım : RoboSpice. Ağ isteklerini Android ortak bir gereği ve doğası gereği uzun işlemleri . İşte uygulamasından bir alıntı :

AsyncTask ve Aktivite yaşam döngüsü

AsyncTasks Etkinlik örnekleri' yaşam döngüsü takip etmeyin. Bir Faaliyet içinde bir AsyncTask başlatın ve aygıtı döndürmek, Aktivite yok olacak ve yeni bir örneği oluşturulur. Ama AsyncTask ölmeyecek. Tamamlanıncaya kadar yaşamaya devam edecektir.

Ve tamamlandığında, AsyncTask yeni Etkinlik UI güncelleme olmayacak. Gerçekten de bu etkinlik eski örneği güncellemeleri artık görüntülenmez. Bu tür java bir özel Durum neden olabilir.lang.Sınıftır: Görünüm eğer pencere yöneticisi ve ona bağlı kullanın, örneğin, Etkinlik içinde bir görünüm almak için findViewByİd.

Bellek sızıntısı sorunu

Çok uygun Faaliyetleri iç sınıflar olarak AsyncTasks oluşturmak için. Bu AsyncTask görüşlerini değiştirmek gerekecek gibi görev tamamlandı ya da devam eden, Aktivite bir iç sınıf kullanarak rahat görünüyor zaman Etkinliği : iç sınıflar olabilir dış sınıfının herhangi bir alana doğrudan erişim.

Bununla birlikte, iç dış sınıf sınıf örnek üzerinde görünmez bir başvuru yapacak demek : Faaliyet.

Uzun vadede, bu bir bellek sızıntısı oluşturur : eğer AsyncTask için uzun süren etkinliği "canlı" tutuyor artık görüntülenebilir olarak Android ise ondan kurtulmak ister. Aktivite ve bir merkez çöp toplanabilir. Android için mekanizma aygıt kaynaklarını korumak için.


Çok uzun süren işlemler için AsyncTasks kullanmak çok kötü bir fikirdir. Yine de, 1 ya da 2 saniye sonra bir Görünüm güncelleştirme gibi kısa yaşayan olanlar için iyi.

Sen gerçekten bu derinlemesine açıklar RoboSpice Motivations app indirmek için teşvik ve bazı arka plan işlemleri yapmak için farklı yolları örnekleri ve gösteriler sağlar.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • boburnham

    boburnham

    11 Temmuz 2006
  • ehowhome

    ehowhome

    22 NİSAN 2009
  • martin shervington

    martin sherv

    7 EKİM 2011