2016-03-19 10 views
0

Ekibimin gerçek zamanlı ses akışını yönetecek uygulaması var. Yaptığımız şey, sunucudan ses almak ve bir iş parçasında MediaCodec tarafından PCM'ye çözümlemek ve daha sonra başka bir iş parçasında çalmak için AudioTrack'e göndermek. Android 4.x'te, APP arka planda çalışırken sorun olmaz. Ancak, 5.x'te arka planda çalışmaz.Android 5.1 arka planda çalışan uygulama yapmak APP yavaş ve zamanlayıcı hassas

Logcat, App arka planda çalışırken iki sorun bulundu. İlk olarak, zamanlayıcı yavaş olsun. PCT'yi AudioTrack'e periyodik olarak göndermek için bir zamanlayıcı kullanıyoruz ve verimlilik için Android tarafından önerilen Handler.sendMsgDelay() yöntemini kullanıyoruz. Ancak test, arka planda çalışırken, Handler'ın msg'dan ön plana göre çok daha geç olduğunu gösteriyor (20ms istiyoruz, ama 50 ~ 60ms'ye dönüyor). Java.util.Timer'i denedik ama aynı sonuçla arka plandaydık. İpliği maksimum öncelik olarak ayarlamaya çalışıyoruz. Ama ya etkisi yok.

İkinci olarak, MediaCodec çalışması bile arka planda çalışıyor. Ön planda çalışırken arka planda 30 ~ 50ms iken, MediaCodec'ten her 7 ~ 8 ms'de deşifre edilen verileri alabildiğimizi gördük!

Google Play'den çevrimiçi radyo gibi bazı uygulamaları indirdik ve Android 5.1'de çalıştırdık. Arka planda çalışırken böyle bir sorun yok. Bundan kaçınmak için bir yer olmalı. Ne yazık ki, biz nasıl yapmıyoruz?

Android 5.1'de arka planda çalışan uygulamaların iş parçacığının daha az CPU işgaline sahip olmasını sağlamak için bazı güç tasarrufu politikalarının olması gerektiğini biliyorum. Ama google onu kapattığında başka bir pencere açmalı. APP'nin ön planda olduğu gibi arka planda çalışmasına izin veren yeni API var mı? Ya da başka yol?

cevap

2

Önplan Hizmeti kullanın ve sorununuz gider.

+0

Teşekkür ederiz. Önce bunu deneyeceğim ve sonucu burada paylaşacağım. – Chandler

İlgili konular