2012-01-22 7 views
0

アクティビティが破棄された後(またはアプリケーションが終了した後でも)オブジェクトにアクセスできる必要があります。アクティビティ/アプリケーション終了後のオブジェクトを維持する

オブジェクトはAACデコーダであり、ユーザーが帰宅したり、アプリにとどまったりするとバックグラウンドで再生されます。しかし、activity/appが終了すると、オブジェクトは失われます。これは、aacストリームが再生されている場合、停止する方法がない(デバイスの再起動が不十分である)ことを意味し、その後の訪問は最後のストリームの上にストリームを重ねるだけです。

私はサービスにオブジェクトを追加することを考えましたが、これがどのように機能するか、またはそれが良い考えであるかどうかはわかりません。私は答えが静的変数の中にあるかもしれないと考えましたが、アプリケーションが終了すると、これらのオブジェクトが失われても、メモリを終了/強制終了したとします。

私がaacデコーダのために使用しているライブラリはhttp://code.google.com/p/aacdecoder-androidです(それが役に立ちそうなら)。

現在、私はストリームを完全にサービスで再生しています。これは上記の問題を回避しますが、アプリの実行中(ユーザーが将来アプリにアクセスするとき)にUIを更新できる必要があります。だからこれは問題です。私は周りの道を実現するこのは、放送の意図を使用することになるだろうが、私はそれが必要以上に複雑かどうか疑問に思う。

これを回避する手段はありますか?

ありがとうございます。

答えて

2

私はサービスにオブジェクトを追加することを考えましたが、これがどのように機能するか、またはそれが良い考えであるかどうかはわかりません。

だけでなく、あなたの唯一の現実的な選択肢です。 Here is a sample projectは、再生を処理する(偽の)オーディオサービスに(偽の)オーディオクライアントがコマンドを送信し、そのサービスがユーザーのフォアグラウンド体験の一部であることをAndroidに示すことを示しています。

答えは静的変数になるかもしれないと思っていましたが、アプリケーションが終了すると、これらのオブジェクトが失われても強制終了または強制終了します。

プロセスが終了すると、オブジェクトはなくなります。もちろん、オーディオ再生もそうです。

サービスは事実上、OSにはまだ実行中のコードがあることを示すマーカーなので、Androidが他のアプリケーションを実行するためにRAMを解放する可能性は低いです。フォアグラウンドのユーザーエクスペリエンスの一部としてそれをマークすると、Androidがプロセスを終了する可能性はさらに減りますが、排除されません。

私はこれを回避する方法はブロードキャストの意図を使用することであることを認識していますが、必要以上に複雑かどうかは疑問です。

ブロードキャストよりもはるかに単純です。あなたの唯一の選択肢ではありません - MessengerまたはPendingIntentまたは他のいくつかの技術を使用できます。

これを回避する手段はありますか?

なぜ「正しい」答えを得たいのですか?

+0

私は正解を回避したくありません! :p笑私はちょうどそれが正しい答えとは思わない。それはひどく畳み込まれているように思われたので、正しい答えではないと思った。ご協力いただきありがとうございます。 :) –

関連する問題