【问题标题】:Assigning null to SoundPool object to save resources将 null 分配给 SoundPool 对象以节省资源
【发布时间】:2020-08-31 14:38:01
【问题描述】:

如果声音文件已经加载到内存中,那么将“null”分配给 SoundPool 对象是否可以为设备节省一些资源?

【问题讨论】:

    标签: java android null


    【解决方案1】:

    如果你想释放资源......请致电SoundPool.release()javadoc 说:

    释放SoundPool 资源。释放SoundPool 对象使用的所有内存和本机资源。 SoundPool 不能再使用,引用应设置为null

    只需将保存您应用的SoundPool 引用的变量清空可能使其无法访问,并且资源可能在未来某个时候被垃圾收集器回收.

    但是,根据我对 API 的阅读,如果您调用 release 或只是将 null 分配给变量,您将无法再调用 SoundPool 方法来播放、暂停、恢复和等等您之前加载的声音文件。所以这可能不是你想做的。

    【讨论】:

    • 感谢您的回复。我尝试使用 SoundPool.release(),但在那之后,我无法通过 if (mSoundPool !=null) 或 if (mSoundPool ==null) 检查应用程序中是否存在 SoundPool 对象。我可以添加一个额外的字节或布尔变量来标记现有对象,但我认为这不是节省资源的好习惯。
    • 我引用给您的 javadoc 解释了该做什么。 SoundPool 不能再使用,引用应设置为null。”SoundPool 上调用release 后,将引用设置为null。需要明确的是,调用release() 会释放资源,分配null 会阻止您使用该对象...并为您提供一种向应用指示池资源已被释放的方法。
    • 谢谢,现在我想通了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-11
    相关资源
    最近更新 更多