2013-08-14 3 views
0

두 개의 짧은 소리를 연속적으로 재생하는 Android 앱을 만들려고합니다. 이동 중에 볼륨을 조정해야하며 스테레오 사운드 여야합니다. 왼쪽 볼륨이 커지고 볼륨이 더 작아 질 수 있습니다. 어떻게하면 될까요? 아래 AsyncTask를 만들었고 동시에 두 개를 실행하려고합니다. 올바른 접근 방법입니까?이동 중에 SoundPool 사운드 볼륨을 조정하는 방법은 무엇입니까?

private class PlaySoundTask extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onCancelled() { 
     super.onCancelled(); 
    } 

    @Override 
    protected void onPreExecute() { 

    SoundPool sndPool = new SoundPool(16, AudioManager.STREAM_MUSIC, 100); 
    sndPool.load(R.raw.soundOne, 1); 

    } 

    @Override 
    protected Void doInBackground(String... params) { 
     while (m_stop_sound) { 


      sndPlay.play(R.raw.soundOne, 1, 0, 0); 


     } 
     return null; 
    } 
} 

답변

0

아니요,이 접근법은 간단한 이유 때문에 정확하지 않습니다. 실행중인 버전에 따라 두 AsyncTask의 동시에 실행할 수 없습니다 :

https://groups.google.com/forum/?fromgroups#!topic/android-developers/8M0RTFfO7-M

당신은이 동작을 재정의하는 AsyncTask.executeOnExecutor(...)를 사용할 수 있지만 여전히 당신은 API (11)에서 시작하여 시스템을 목표로한다, 그들은 쉽게 메모리를 검색하는 시스템에 의해 사망 ​​할 수 있기 때문에

http://developer.android.com/about/dashboards/index.html

또한, AsyncTask가 장기 실행 작업을 위해 설계되지 않았습니다 : 가능한 장치의 약 60 %가되는 것입니다. 더 이상 사용되지 않는 활동에 대한 참조가 있으면 메모리 누수가 발생할 수 있습니다.

Thread을 사용하고 Handler을 사용하여 UI 스레드에 알릴 수 있습니다. 또한 여기 좀 봐 : RoboSpice은 AsyncTask를에 아웃 - 오브 - 박스 안전한 대안으로 제안

Android AsyncTask for Long Running Operations

합니다.