2014-02-04 4 views
2

Я пытаюсь подключить базовый аудиоплеер. Звуковая сторона выполнена, но я использую SeekBar в качестве трек-скруббера, и у меня возникают проблемы с производительностью.Низкая производительность SeekBar на Android

SeekBar от раскладке XML, и я использую довольно базовый код, чтобы обновить его:

updateTask = new Runnable() { 

    public void run() { 

     int elapsed = 0; 
     if (player != null) { 
      elapsed = player.getElapsedTime(); // Seconds 
     } 
     trackSeekbar.setProgress(elapsed); 
     updateHandler.postDelayed(this, 1000); 
    } 

}; 

updateHandler.postDelayed(updateTask, 1000); 

Этот код занимает от 20% -50% CPU на Nexus 10! Это делает другие части моего приложения очень прерывистыми, поэтому он должен быть быстрее.

Я уже вынимал некоторые вещи в макете, чтобы попытаться уменьшить перерисовку макета (я показывал прошедшее время в текстовом поле, но сдавался, потому что он был слишком медленным), но мне нужен базовый скруббер. Когда я вынимаю звонок до setProgress(), процессор падает до 1%. Есть ли лучший способ сделать это?

+0

ли поиск в баре без каких-либо ресурсов std (прогресс доступен, большой палец)? – pskink

+0

Да - У меня есть пользовательский большой палец и прогресс, но при его удалении он не меняет использование ЦП. –

+0

hmm действительно странно, попробуйте Log.d в вашем методе запуска, чтобы проверить, не слишком часто он вызван. – pskink

ответ

0

Причиной плохой работы был прозрачный PNG с высоким разрешением в фоновом режиме. Когда я удалил его, все различные проблемы с производительностью исчезли.

На Nexus 10 изображение было 2560x1440, которое является его родным разрешением. Похоже, Android не справляется с полноэкранными фоновыми изображениями.

+0

Может быть проблемой, связанной с переутомлением. Рекомендуемое чтение: http://www.curious-creature.org/2012/12/01/android-performance-case-study/ –

+0

Да - это было так. –

Смежные вопросы