2012-01-05 2 views
1

Мое приложение воспроизводит звуковую дорожку и переходит в фоновый режим. До сих пор фоновое воспроизведение звука (с использованием AudioTrack) работало нормально. Я реализовал это с помощью сервиса. Но после обновления android os (от 1,2 до 2,3 и от 2,2 до 2,3) проблема теперь смотрела на фоновое воспроизведение звука заиканиями или stucks, когда пользователь перешел в другие приложения, такие как gallary и электронная почта.приложение для Android в фоновом режиме замедляет работу устройства

Приложение обращается к фону, нажимая кнопку «Назад» на главной операции. Хотя он также заикается, когда вы идете на задний план, используя ключ «Домой».

Это из-за обновления? Как я могу проверить приоритеты приложения или потоков моего приложения?

Любая подсказка или кто-то столкнулся с такой неудобной проблемой?

m_thread1 = new Thread(
       new Runnable() 
       { 
        //! \brief Thread that updates time display and related fields 
        public void run() 
        {      
         int tid,pri; 
         tid = Process.myTid(); 
         Process.setThreadPriority(Process.THREAD_PRIORITY_MORE_FAVORABLE); 
         pri = Process.getThreadPriority(tid); 


         while (!Thread.interrupted()) 
         { 
          try 
          { 
           JNI_performAudioPlayback();        

           Thread.sleep(10); 
           break; 
          } 
          catch (InterruptedException e) 
          { 
           break; 
          } 

         } 
        } 
       },"threadname" 
     ); 

Process.THREAD_PRIORITY_AUDIO Process.THREAD_PRIORITY_BACKGROUND + Process.THREAD_PRIORITY_MORE_FAVORABLE Process.THREAD_PRIORITY_BACKGROUND + Process.THREAD_PRIORITY_FOREGROUND Process.THREAD_PRIORITY_BACKGROUND

Всего 7 нитей там, который использует упомянутые выше приоритетов во время их жизненный цикл в обслуживании.

Спасибо, JRC

ответ

0

Вы можете попробовать определение, какой поток потребляют большую часть ресурсов центрального процессора. Зная, что вы можете делать дальнейшие предположения, что действительно происходит.

Вот пример кода, чтобы увидеть результат команды top для потоков.

int count = 0; 
int bufferSize = 8*1024; 
Process process = Runtime.getRuntime().exec("top -t -n 1"); 
BufferedInputStream bis = new BufferedInputStream(process.getInputStream(), bufferSize); 
try { 
    while ((count = bis.read(data, 0, bufferSize)) != -1) { 
     //output text data 
    } 
} finally { 
    if (bis != null) 
     bis.close(); 
} 
1

Этот код был именно тем, что я искал, но мне пришлось слегка изменить его, чтобы он работал для меня. Таким образом:

private void outputTop(){ 
    int count = 0; 
    int bufferSize = 8*1024; 
    byte [] data; 
    Process process = null; 
    String out = "";   

    data = new byte[bufferSize]; 

    try { process = Runtime.getRuntime().exec("top -t -n 1"); } 
    catch (IOException e) {} 

    if(process != null) 
    { 
     BufferedInputStream bis = new BufferedInputStream(process.getInputStream(), bufferSize); 
     try 
     { 
      while ((count = bis.read(data, 0, bufferSize)) != -1) 
      { 
       out += org.apache.http.util.EncodingUtils.getAsciiString(data, 0, count);     
      } 
     } 

     catch(IOException e){ } 

     if (bis != null) 
     {    
      try { bis.close();} 
      catch (IOException e) {} 

      writeToLogFile(out);     
     } 
    }     
} 
Смежные вопросы