ゲームにコンテニュー処理を実装していて、コンテニューする度、音が鳴らなくなっていってこれはメモリが原因だと思い、調べたところ
「リソースが確保出来なくなっている」、「ネイティブヒープの圧迫だからreleaseしてね」
みたいなことが書いてありました。画面もときどきフリーズしますので原因はかなりコレだとおもいます。
私も実装したときにこうなると思ったんで、画像同様解放して使いたかったのですがsoundpoolのloadはあらかじめ読み込んでおくことがベストですよね。
**
ここで質問なのですが、メモリが圧迫しないようreleaseした場合、再loadのタイミングはいつになるのでしょうか?
**
今回使っているのはsurfaceviewなので、surfacecreated()に書いてもリリース後にロードはされませんでした。
ちなみにコンテニュー処理は座標を全て修正する処理なのでたいしたことはやってません。
追記
ほぼ自己解決に近づいてきたのですが、SoundPoolはインスタンスを一度生成したからと言ってrelease()すればload()で使いまわせるというわけではないですよね。
そこでインスタンス生成とload処理をセットにして使いまわしたところ
java
1 //サーフェイス生成時 2 public void surfaceCreated(SurfaceHolder holder) { 3 4 //SoundPoolインスタンス生成&load処理の書かれたメソッド 5 soundLoad(); 6 7} 8 9 10 //サーフェイス破棄 11 public void surfaceDestroyed(SurfaceHolder holder) {} 12 13 //soundpoolのrelease処理の書かれたメソッド 14 soundRelease(); 15 16 //サーフェイス変更 17 public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 18 19 }
としてみたところ、ホームボタンを押して戻ってきたら鳴ってくれました。
一応、上記のsoundLoad();メソッドを外して実験したところ鳴らなかったので確かだと思います。
ところがですね、、、
あるThread上でGAMEOVERになり、座標修正(疑似初期化)と同時にsoundRelease()とsoundLoad()を行ったところ、鳴りませんでした。って書いててわかったんですが、
これって別スレッドでsoundLoad()すればいいんですかね?
または今回の場合、完全初期化同様なので一回別Activityに飛んでインスタンスを新しく生成して作り直すとかすればいいんですかね?、、、
実際使われているコンテニュー処理はどんなものが多いのだろうか、、、
疑問が増えました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/03/29 04:37
2018/03/29 05:51
退会済みユーザー
2018/03/29 11:10