Bu soru StackOverflow's
standartlarını geçemeyecek kadar belirsiz olabilir, ama ben seçenekleri ... dışarı çalıştırıyorum çünkü yayınlamayı deneyin zorunda:/AVAudioPlayer ve Rastgele yavaşlık
Uzun lafın kısası: Bir uygulama olduğunu rastgele yavaşlık dönemlerini yaşar. Çok sık gerçekleşmez (muhtemelen her ay bir kez), ancak olduğunda sadece iDevice üzerinde çalışan tam bir yeniden başlatma yardımcı olur. Semptomlar: 2-3 saniye yanıt süreleri ve durgun, dalgalı animasyonlar; tüm uygulama temelde kullanılamaz hale gelir.
Uygulamayı her hangi bir hata teşhis aracıyla çalıştırmıştım; bellek sızıntısı veya olağandışı yüksek CPU kullanımı yok. Ancak, bu uygulama son derece basit, bir kart oyunu için bir izci uygulaması göz önüne alındığında, şaşırtıcı değildir.
Tüm bunlar, kullanıcı button
numaralı bağlantıya dokunduğunda ses çalmak için kullandığım AVAudioPlayer
Bu uygulamanın nedeninin (belki de uygulamanın tamamında göreceli olarak yüksek karmaşıklık unsuru) olabileceğine inanmamı sağladı. Ancak, emin değilim, nerede yardıma ihtiyacım var. Burada örnek bir kod ekledim ve belki de iOS
ses çalma deneyimine sahip biri bunu gözden geçirebilir ve gözden kaçırdığım bir hata olup olmadığını görebilir.
İşte biz: İlk olarak, AVAudioPlayer
'u canlı tutmak için her saniyede sessiz bir parça çalmaya devam eden bir "sessiz oyuncu" başlatıyorum. Daha uzun bir hareketsizlik süresinden sonra çağrıldığında görece uzun yanıt süresi AVAudioPlayer
deneyimleri nedeniyle gereklidir.
- (void) repeatSilence
{
if (isAudioON == YES)
{
if (silencePlayer.playing)
{
[silencePlayer stop];
silencePlayer.currentTime = 0;
[silencePlayer play];
}
else
{
[silencePlayer play];
}
}
}
gerisi oldukça basittir:
NSString *silenceFilePath = [[NSBundle mainBundle] pathForResource: @"silence" ofType: @"wav"];
NSURL *silenceFileURL = [[NSURL alloc] initFileURLWithPath: silenceFilePath];
silencePlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: silenceFileURL error: nil];
[silencePlayer setDelegate: self];
[silencePlayer prepareToPlay];
silenceTimer = [NSTimer scheduledTimerWithTimeInterval:1.0f
target:self
selector:@selector(repeatSilence)
userInfo:nil
repeats:YES];
NSTimer şu yöntemi çağırır.
NSString *buttonSoundFilePath = [[NSBundle mainBundle] pathForResource: @"button_pushed" ofType: @"wav"];
NSURL *buttonFileURL = [[NSURL alloc] initFileURLWithPath: buttonSoundFilePath];
buttonPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL: buttonFileURL error: nil];
[buttonPlayer setDelegate: self];
[buttonPlayer prepareToPlay];
Ve düğmesine basıldığında (Sessiz oyuncuyla yaptığı gibi aynı şekilde) Ben ses çalma: Ben (bunlardan iki tane vardır) Belirli düğme sesi çalmak için başka AVAudioPlayer başlatmak
if (isAudioON == YES)
{
if (buttonPlayer.playing)
{
[buttonPlayer stop];
buttonPlayer.currentTime = 0;
[buttonPlayer play];
}
else
{
[buttonPlayer play];
}
}
Ve gerçekten hepsi bunun için var. Bununla birlikte, korkarım ki, bu yöntemin basit doğasına rağmen, bir şekilde bu sürekli ses çalma, iOS'un çıldırdığı nadir bir örnek oluşturur. Ama bütün bunlar sadece bir teori, ve bu yüzden koduma bir göz atmak ve görüşlerini paylaşmak için daha fazla deneyime sahip birine ihtiyacım var.
Teşekkürler!
Güncelleştirme: Sorunla ilgili olabilecek başka bir kod satırı da buldum. Onlarla birlikte, ben AVAudioPlayer müzik (örneğin başka bir uygulamanın) arka planda çalmaya ile eş zamanlı çalışmak ayarlayın:
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];
[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[AVAudioSession sharedInstance] setDelegate:self];
İyi analizlere ulaşın. Bu haftasonu deneyecek ve sonuçları paylaşacağım! –