2012-12-27 12 views
9

Paralel olarak 4 iş parçacığı çalıştırmaya çalışıyorum ancak başarısız oluyor.Android'de çoklu iş parçacığı nasıl çalışır?

Ben senkron wait() ve notify()CyclicBarrierThreadPoolExecutorCountDownLatchAsyncTask ve diğerleri kullanarak denedi, ama paralel konuları çalışan başaramadı.

biz (yani robot aynı zamanda) paralel 4 mesajları çalıştırabilir? Nasıl?

Not: Ses Akışı ile AudioRecord ve AudioTrack API'lerini kullanarak çalışıyorum.

+0

Sorunun ne olduğunu açıklayabilir misiniz? – Henry

+0

@Henry Bir defada tüm 4 ileti dizisini çalıştıramıyorum. Bunu nasıl başarabilirim? –

cevap

13

biz robot aynı zamanda Şekil 4, iplik paralel, yani çalışabilir ??

Evet, paralel 4 parçacığı çalıştırabilir. Daha fazla iş parçacığı eklemek genellikle yardımcı olur, ancak bir noktadan sonra bazı performans düşüşlerine neden olur. ama 4 iş parçacığı bir soruna neden olmaz.

Sorunlar: 4 kez, 2 3'üncü n 4 sadece 1 kez: Ben ishal yani 1 konu paralel iplik çalıştırmak mümkün değilim. Nasıl çalıştırılır ( belirtilen thread'lar kullanılarak çalıştırıldı, ancak tüm iplikleri paralel çalıştıramadı) paralel mi? Amacınız bütün konuları aktif olarak işlem olması basitçe ise

, ben Java thread pools bakarak öneririz (ve Executors daha genel).

android destek ÇOK DİŞ? Evet ise çok iş parçacığı nasıl android çalışıyor?

Evet, Android Multithreading destekler. (Pool ve Executor Konu hariç) gibi uygulanmasının en tercih edilen yol

AsyncTascAsyncTask Eğer iplik onun görevi uzakta krank doInBackground(), uygulamaya olanak vermesidir. Bu, Thread'dan alacağınız işlevsellikle benzer. Her iki UI iş parçacığı üzerinde yürütülen onPreExecute() ve onPostExecute(), geçersiz olduğunda

gerçek sihir olmuyor. Bu, Etkinliğinizin eklenmemesiyle ilgili mesaj almanızı engellemelidir. Bu answer, AsyncTask için küçük bir kod örneği içerir; bu, başlatabileceğiniz AsyncTask için küçük bir kod örneği içerir. Ayrıca

, araştırmam tüm kayıt gönderme ve ses alma oldukça interaktif preocesses olup senkronizasyon ve IO kaynak gerektirir, yani sırasında buldum Ne Android

Edit- yılında Handlers de bakabilirsiniz. Bunun için mümkün olan en iyi çözüm, her işlem için ayrı bir Async Task yaratabilirsiniz, böylece her işlem ayrı Async Task uygulamasında gerçekleştirilir.

+0

Teşekkürler .. Ama AsyncTask'ı denediğimde, birçok ses verisini kaybediyorum. yani, AsyncTask kullanarak sunucuya sesli ses verileri gönderiyorum, göndermek için kendi zamanını alıyor. Bu zamana kadar uygulama tarafında ses verilerini kaybedeceğim. –

+0

Async görevinde herhangi bir sorunla karşılaşmadım, yine de eşzamanlı iş parçacıklarını kullanmak istiyorsanız, iş parçacığı havuzuna ve yürütücülere bakabilirsiniz. –

+0

Ben de denedim. Ses verilerini 16 ms başına 40 ms kaydediyorum. Paralel başka bir iplik çalıştırmak için zaman ayırmak. –

-4

Sen paralel olarak çalıştırmak için zaman uyumsuz Görevi kullanabilirsiniz.

+0

Ben bunu denedim .. ama yürütmek için kendi zaman alır. N bana yardımcı olmadı .. AsyncTask –

+4

@Taruni ile çalışan birçok ses verisini kaybedeceğim Bu yorum lütfen !! – swiftBoy

2
  1. 4 farklı iş parçacığı çalıştırabilirsiniz, ancak paralel olarak yürütmek için (eşzamanlı olarak) arkayı desteklemek zorundasınız. Tek bir çekirdek cpu'nız varsa, iş parçacıklarının hangi sırayla düzenlendiğini programlayıcıya kadar alırsınız ve yalnızca bir iş parçacığı
  2. yürütülür. Yürütme sırası ve zamanlaması zamanlayıcıya bağlıdır.
  3. evet öyle. AsyncTask veya java özelliklerine güvenebilirsiniz (Yürütücüler örn.)
İlgili konular