TabHost中的SurfaceView导致崩溃

时间:2011-05-17 07:08:18

标签: android android-tabhost surfaceview

我在TabHost中的Activity中有一个SurfaceView派生类(比如HelloTabWidget示例)。我正在使用的SurfaceView带有优秀的andrtoid-flot-chart库:FlotChartContainer.java

当我在标签之间切换时,一切正常。但是,只要包含此视图的选项卡已初始化(例如显示),我的应用程序就注定失败了。只要发生以下情况,它就会崩溃:

按主页按钮 当我重新打开我的应用程序时,它会因surfaceCreated()中的 IllegalStateException 而崩溃。

开始新活动 当我开始一个新活动( startActivity )并按下Back按钮(这会调用我的SurfaceView的 surfaceDestroyed ......?!)时,由于 IllegalStateException而崩溃在surfaceCreated()中。

  • 我的目标是API级别7(Android 2.1)。
  • 代码在不使用TabHost时有效。
  • 在标签之间切换不会调用surfaceDestroyed()。而是使用onPause()和onResume()。
  • 当一项活动结束时,即使它不在活动标签中,也会调用surfaceDestroyed()。

请帮忙!

2 个答案:

答案 0 :(得分:0)

检查android中的活动生命周期,而onPause(),onStop(),onDestroy(),破坏已在应用程序中使用的表面视图,并在onResume()中重新创建表面,然后它正常工作。 / p>

答案 1 :(得分:0)

在尝试使用onPause()onResume()surfaceChanged()surfaceDestroyed()之后,我终于想出了一个解决这个特殊情况的丑陋解决方案:

  • 没有XML!以编程方式创建的视图。
  • onResume()
  • 中重新创建并重新添加视图
  • 删除onPause()
  • 中的视图

@Karthi_heno 你指出我正确的方向。关键是要正确处理onPause()。但是,我遇到了奇怪的延迟(大约10秒,可能是由于Canvas.lockCanvas()来电)......