AsyncTaskLoader vs AsyncTask


129

Beri Honeycombve v4 Compatibility Librarykullanmak mümkündür AsyncTaskLoader. Anladığım kadarıyla AsyncTaskLoaderekran çevirmeleri gibi yapılandırma değişiklikleriyle hayatta kalabilir.

AsyncTaskLoaderBunun yerine kullanılması tavsiye edilir AsyncTaskmi? Does LoaderManagerde resimde olsun?

Ancak AsyncTaskLoader. Dokümanlar da örnek vermiyor. Herkes bazı iyi örnekler verebilir mi?

Yanıtlar:


51

Daha fazla bilgi almak için uyumluluk kitaplığının kaynak koduna bakabilirsiniz. Ne FragmentActivityyapar:

  • bir listesini tutmak LoaderManager's
  • kullanarak örnekleri kaydederek telefonunuzu çevirdiğinizde (veya başka bir yapılandırma değişikliği gerçekleştiğinde) zarar görmediklerinden emin olun. onRetainNonConfigurationInstance()
  • initLoader()Etkinliğinizde aradığınızda doğru yükleyiciyi tekmeleyin

LoaderManagerYükleyicilerle arayüzünü kullanmanız ve yükleyicilerinizi oluşturmak ve görünümlerinizi döndürdükleri verilerle doldurmak için gerekli geri aramaları sağlamanız gerekir.

Genelde AsyncTaskkendi başınıza yönetmekten daha kolay olmalıdır . Bununla birlikte, AsyncTaskLoadertam olarak iyi belgelenmemiştir, bu nedenle dokümanlardaki örneği incelemeli ve / veya daha sonra kodunuzu modellemelisiniz CursorLoader.


5
Buna bir bakacağım. Belki hakkında iyi örnekler bulmak için henüz çok erken AsyncTaskLoaderve daha fazla geliştirici onu kullanmaya başladığında daha fazla örnek gelecek.
OKA

47

AsyncTaskLoader ile AsyncTask karşılaştırıldığında , cihazınızın ekranını döndürdüğünüzde bildiğiniz gibi, ağ işlemi devam ederken görüntünün cihazınızı döndürmesine izin vermek için etkinliğinizi yok edebilir ve yeniden oluşturabilir:

AsyncTask tekrar arka plan iş parçacığı olarak yeniden yürütülecek ve önceki arka plan iş parçacığı işleme sadece gereksiz ve zombi olacaktı.

AsyncTaskLoader , daha önce Loader Manager'da kayıtlı olan Loader ID temel alınarak yeniden kullanılacaktır, bu nedenle ağ işlemlerini yeniden yürütmekten kaçının.

Özetle, AsyncTaskLoader arka plan iş parçacıklarının çoğaltılmasını önler ve zombi etkinliklerinin yinelenmesini ortadan kaldırır.


11

AsyncTaskLoader gerçekleştirdiği aynı şekilde işlev AsyncTask biraz daha iyi ama. Etkinlik yapılandırma değişikliklerini daha kolay halledebilir ve Parçaların ve Etkinliklerin yaşam döngüleri içinde hareket eder. Güzel olan şey, AsyncTaskLoader'ın AsyncTask'ın kullanıldığı herhangi bir durumda kullanılabilmesidir. Etkinlik / Parçanın işlenmesi için verilerin belleğe yüklenmesi gerektiğinde, AsyncTaskLoader işi daha iyi yapabilir.

Yine de AsyncTasks kullanımıyla ilgili birkaç sorun vardır:

  • Yapılandırma değişiklikleri işleri karıştırabilir
  • Bir aktiviteyi duraklatmak AsyncTask'ı duraklatmaz
  • Adil miktarda standart kod (bu, daha fazla olası hata anlamına gelir)

AsyncTaskLoader belgesi


8

Diğer yanıtlarda açıklananların dışındaki bazı farklılıklar:

Kullanırken AsyncTaskLoader üzerinde AsyncTask :

  • AsyncTaskLoader , yeni veriler tarafından döndürülene kadar eski önbelleğe alınmış verileri yükleme özgürlüğü verir.forceLoad()

  • AsyncTaskLoader için gecikmeler ayarlayabiliriz , setUpdateThrottle()bu sayede istemcide art arda güncellemeleri engelleyebilir (Activity / Fragment)

  • AsyncTaskLoader , ortak ana etkinliğe sahiplerse ve başlangıçtan başlatıldıysa birden çok parçayla paylaşılabilir.getActivity().getSupportLoaderManager()

  • AsyncTaskLoader , LoaderMangerbağlantılı etkinliği artık mevcut olmadığında yok edilir . Arayan etkinliği yok edilirse AsyncTasks'i manuel olarak yok etmemiz gerekir . Bu, zamanımızı tüm takas işlerini yazmaktan kurtarır. AsyncTaskLoader, ilgili yaşam döngüleriyle iyi oynuyor.

Yani, AsyncTaskLoader, AsyncTask'tan çok daha iyidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.