2011-07-01 15 views
7

Benim uygulama, bir arka plan iş parçacığı üzerinde çalıştırmak için gereken bileşenler arasında paylaşılan bir kaç operasyonları için bir HandlerThread yararlanır. Çoğu zaman bu iş parçacığı bekleme durumunda olur.Bir HandlerThread çıkmak için gerekli?

Uygulamamda bu HandlerThread (bekleme) çalışmasını bırakabilir miyim, gerektiğinde mesaj gönderiyor, ancak HandlerThread.getLooper().quit() aracılığıyla bırakmıyor musunuz? Bu, tüm uygulama bileşenleriim yok edildikten sonra bile, bu HandlerThread'un bekleme durumunda kalmaya devam edeceği anlamına gelebilir.

Başlangıçta buna büyük bir hayır gibi ben kesinlikle istemem bana-bir şey gibi görünüyordu do-ama artık emin değilim. Android, süreçimi öldürürken, CPU zamanını veya belleğini boşaltması gerektiğinde yapacağınız gibi, bu iş parçacığı UI iş parçacığımla birlikte sonlandırır. Ayrıca, iş parçacığı bekliyor olacak, bu yüzden herhangi bir CPU zamanı tüketmeyecek. Ve bunun ötesinde, uygulamam bir iş parçacığı havuzu kullanmayı bildiğim birçok AsyncTasks kullanıyor. Benim anlayış, AsyncTask herhangi bir uygulama yaşam döngüsü geri aramalar (kullanımda, sadece bekleyen oturmayın havuzda konu) yapışmayan ThreadPoolExecutor kullanmaktadır.

Benim sorum şu ki, çok sayıda uygulama bileşeninde bir HandlerThread kullanabilir miyim, hiç bir zaman (ya da nadiren) bırakmadan ve kullanılmadığında, korkunç bir yan etkilere maruz kalmadan beklemede bırakabilir miyim?

cevap

1

Benim kişisel tercihi buna ihtiyaç olduğunda yeni bir iş parçacığı oluşturmak ve bitince bunu temizlemek etmektir. Bu sayede aynı iş parçacığını aynı anda kullanmaya çalışan birden fazla bileşenle ilgili bir sorunum yok ve "temiz bir gemi" bulunduruyorum. Ayrıca Android sizin için bu kolaylaştırır güzel AsyncTask vardır.

söyleniyor, sana parçacığı erişimi düzenleyen VE etkinliklerinizi tahrip edildiğinde düzgün temizlemek sağlanan Birden bileşenler için handlerthread yeniden kullanamazsınız hiçbir neden bkz. Ben doğru this post anladıysam, senin iplik senin süreç çalışmaya devam edebilir çünkü tüm faaliyetlerine son dahi çalışmaya devam edebilir. Bunu çözmek için iş parçanızı bir daemon iş parçacığı olarak ayarlayabilirsiniz. Uygulamanızdaki son non-daemon iş parçacığı bittiğinde Daemon iş parçacıkları otomatik olarak yok edilir.

BTW

, alternatif olarak da kullanarak düşünebilirsiniz bir ThreadPoolExecutor

+0

başka iş parçacığı üzerinde yapması gereken bir şey kez bir çok için yapılırsa, parçacığı çok yaratacak çünkü Sizce katılmıyorum , muhtemelen uygulamayı kilitleyecektir. –

İlgili konular