2016-03-30 10 views
0

Bir Başlat düğmesine bastığınızda, bir sensörün birkaç sensörün algılandığı bir servis başlayacak, sensör değerleri değiştiğinde sensör verilerini bir nesneye kaydedecektir. Her 10 ms'de, nesnelerin mevcut değerlerini alan ve bunları veritabanına depolayan bir veritabanı eki oluşur. Bu, 30 dakika boyunca gerçekleşirAndroid: sürekli SQL eklentileri için engelleme veya engelleme kuyruğu?

Ekleme hızının ve süresinin verildiği göz önüne alındığında, bunu UI iş parçacığından ayrı bir iş parçacığında çalıştırmak istiyorum; böylece gezinme bir vuruş yapmaz. Bu yüzden hizmetim bir sıraya ekleyerek iş parçacığına bazı veriler sunacak, sonra diğer iş parçacığı (tüketici) sıradan alacak ve veritabanına eklenecek

Dur düğmesine basıldığında, emin olmanız gerekir iş parçacığını öldürmeden önce sıranın geri kalanını işlemek için.

O baktığım her yerde, kuyruğu engelleme çeşit üretici/tüketici tipi durumlar (örn LinkedBlockingQueue vs ConcurrentLinkedQueue veya What's the different between LinkedBlockingQueue and ConcurrentLinkedQueue?)

Sorum şu önerilmektedir gibi görünüyor benim durumda bir blokaj kuyruğu mantıklı mı?

Bu uygulamadaki en önemli şey tüm verilerin db'ye eklenmesidir. Anladığım kadarıyla (lütfen yanılıyorsam beni düzeltin), ancak kuyruk doluysa ve tüketici iş parçacığı daha fazla sıra alanı açmak için yeterince hızlı ekleyemiyorsa, üreticinin bir şeyler eklemesi engellenir. sıraya? Eğer zaman kuyruğuna göre o zaman serbest alan varsa, birkaç sensör okuması giderdi ve

'un engellenmesi nedeniyle db'ye eklenmezdi. Günün sonunda, sadece en iyisine ihtiyacım var Verilerin, her 10 ms'de bir atlamayı geçmeden yerleştirilmesini sağlamanın yolu. Aklımda, değerleri her 10 ms'de sınırsız, sınırsız bir sıraya dökmek ve tüketicinin mümkün olan en kısa sürede yoklamasını sağlamak anlamlıdır. Daha sonra Dur'a basıldığında, iş parçacığını öldürmeden önce sıranın geri kalanını boşaltın.

1 üretici/1 tüketici durumunda bunu gerçekleştirmenin doğru yolu nedir?

cevap

0

Yerinde olsaydım, bu görev için tek bir iş parçacığı yürütücüsünü kullanırdım - zaten kutudan çıkarmanız gereken tam işlevselliğe sahiptir. Daha fazla bilgi here.