当设备旋转时,活动将被完全销毁并重新创建,以满足可能的新资源要求。不幸的是,这意味着我使用的SoundPool
被破坏,应用程序必须重新加载每个声音。
在我的code on GitHub我实施了retained fragment,您可以check out the branch。
我的问题是,即使应用程序停止,SoundPool也会保持加载状态。在这个应用程序的情况下,它可能不是必要的,但我想在这种情况下释放资源。
当运行时配置发生变化时,有没有办法让 [注意:我已经完全重写了问题以更好地反映问题。] SoundPool
加载 ?当应用停止时,免费其资源?< / p>
答案 0 :(得分:0)
我认为您可以使用Service,将SoundPool对象移动到Service,并将活动绑定到onCreate中的服务,并在onDestroy中取消绑定。如果活动绑定到服务,您可以使用binder将命令传输给它。
答案 1 :(得分:0)
SoundPool不可分配(或可序列化),因此您无法(轻松)将其放入捆绑包中。
执行所需操作的最简单方法是为应用程序创建Application的子类,使SoundPool成为自定义Application类的实例变量,并使用getApplicationContext的强制转换公开方法以从Activity管理SoundPool(应用程序类本质上是一个在应用程序存在期间存在的单身人士。
(可能有更优雅的解决方案)
答案 2 :(得分:0)
作为tato.rodrigo pointed out,与retained fragment一起使用时Activity.isChangingConfigurations
方法有效。
由于它仅在API级别11中引入,因此在旧设备上我没有释放资源:
An exception occurred while executing
'INSERT INTO UserAbstractContent(read,accept,content_id,user_id) VALUES (?,?,?,?)'
with paramas[null,null,60,3] sql state 42000 syntax error or access violation.