2012-09-18 18 views
5

Çoklu çekirdeklere sahip Android telefonların kullanılabilirliği sayesinde, uygulama geliştiricileri uygulamalarının bu çekirdeklerin ek işlem gücünü kullanmasını nasıl sağlayabilirler. Anladığım kadarıyla, uygulama geliştiricilerin yapabileceği tek şey, uygulamalarını çok iş parçacıklı hale getirmek ve android çekirdeğinin farklı çekirdekteki görevleri temsil etmesine izin vermektir.Çoklu çekirdekler için android uygulamaları nasıl optimize edilir

Birden çok çekirdek için en iyi duruma getirmek için yapılabilecek başka bir şey olup olmadığını öğrenmek istiyorum.Ayrıca, android en iyi çok iş parçacıklı uygulamalar nelerdir.

+2

Benim en çok tavsiye çoklu kullanım içeren ayrı iş parçacığı üzerinde yapılmalıdır: * yapamaz * .. * hariç * parallelleştirme nöbetleri Sorun iyi * ve * ölçülebilir bir fayda var. Doğru olması zor ve birçok şey (UI gibi) kendiliğinden güvenli bir şekilde işlenemez *. (Arka plan işleme gerektiren kullanıcı arayüzü görevleri için, genellikle "AsyncTask" (http://developer.android.com/reference/android/os/AsyncTask.html) dahil olmak üzere "arka plan çalışanları" nı doğrudan kullanmak yerine kullanmak daha basittir.) –

+1

Android API'nin 'Bağlam' izleme-sızdırma cehennemini hafifletmeye yardımcı olmak için uzun bir yol kat ettiğini düşünürsek, 'senkronize' bizim dostumuzdur ve son olarak, buradaki paradigmanın burada kalmasıdır. Basit uygulamalar bile (genellikle) bilgileri görüntülemeden önce başlayacak/yükleyecek/yükleyecek (ayrı) şeylere sahip, bu yüzden bu "çok çekirdekli faydasız" (kullanıcı) veya "çok çekirdekli zor" (devs) sona erdirmek için elimizden geleni yapmalıyız. Ayrıca, UI iş parçacığı ayrımcılığına (# 1 yavaş uygulamaların sebebi) bakma konusunda çoğu devin zihniyetini değiştirme yararına sahiptir. Önemli bir çok avantaj var. – davidcesarino

cevap

2

AsyncTask gibi yerleşik paradigmaları kullanmak için iş parçacığını en iyi şekilde kullanmaya çalışmak yerine, en iyisi. Eğer

//Sets up a thread pool where NUM_THREADS is the amount that can run at the same time 
ExecutorService threadPool = null; 
threadPool = Executors.newFixedThreadPool(NUM_THREADS); 

//Will execute something on one of the threads queuing if necessary 
threadPool.execute(new Runnable() { 
    @Override 
    public void run() { 

         }}); 

Tipik bir web aramaları ve veri ayrıştırma istiyorsanız

İlgili konular