SurfaceView внутри TabHost вызывает сбой - PullRequest
0 голосов
/ 17 мая 2011

У меня есть производный от SurfaceView класс в Activity внутри TabHost (например, образец HelloTabWidget).Используемый мной SurfaceView поставляется с превосходной библиотекой andrtoid-flot-chart: FlotChartContainer.java

Когда я переключаюсь между вкладками, все работает.Однако, как только вкладка, содержащая это представление, была инициализирована (например, показана), мое приложение обречено.Он будет аварийно завершать свою работу всякий раз, когда происходит следующее:

Нажатие кнопки «Домой» При повторном открытии приложения происходит сбой из-за IllegalStateException в surfaceCreated ().

Начало нового действия Когда я начинаю новое действие ( startActivity ) и нажимаю кнопку «Назад» (это вызывает surfaceDestroyed ...?!), происходит сбой из-за IllegalStateException в surfaceCreated ().

  • Я нацеливаюсь на уровень API 7 (Android 2.1).
  • Код работает, когдаTabHost не используется.
  • Переключение между вкладками не вызывает surfaceDestroyed ().Вместо этого используются onPause () и onResume ().
  • Когда действие завершается, SurfaceDestroyed () вызывается, даже если его нет на активной вкладке.

Пожалуйста, помогите!

Ответы [ 2 ]

0 голосов
/ 18 мая 2011

После экспериментов с onPause(), onResume(), surfaceChanged() и surfaceDestroyed() я наконец нашел уродливое решение, которое решает этот конкретный случай:

  • Нет XML! Вид создан программно.
  • Пересоздайте и заново добавьте представление в onResume().
  • Удалить представление в onPause().

@ Karthi_heno Вы указали мне в правильном направлении. Ключ должен обрабатывать onPause() правильно. Однако я столкнулся со странными задержками (около 10 секунд, вероятно из-за вызовов Canvas.lockCanvas()) ...

0 голосов
/ 17 мая 2011

Проверьте жизненный цикл активности в Android, пока onPause (), onStop (), onDestroy (), уничтожают представление поверхности, которое использовалось в вашем приложении, и воссоздают поверхность в onResume (), тогда она работает нормально.

...