0

これはしばらくの間私を悩ませてきました。

簡単に言えば、必要に応じて OS がアクティビティ コンテキストを破棄するのを妨げずに、アクティビティ コンテキストを渡すことができますか?

例:

ソケットで非同期リクエストが作成され、キー=request_id および値=activity_context のハッシュマップが添付されます。応答時に、id がリンクされて activity_context が取得され、アクティビティ内のメソッドが呼び出されます (つまり、インターフェイス、キャストなどを使用)。

コンテキストへの弱い参照を保存していることは認識していますが、Android OS ガベージ コレクションは、頻繁に「生きている」場合に弱い参照をクリーンアップすることが知られています。

詳細な情報をお気軽にリクエストしてください。これに関する決定的な回答が本当に必要です。

4

2 に答える 2

1

ご回答ありがとうございます。

ご発言につきましては、

アクティビティの破壊を防ぐことはできません。しかし、そのようなオブジェクトへの参照を保持している場合、ガベージ コレクションは行われませんが、実際には役に立ちません。簡単に言えば、回避したいメモリリークです。これにより、同じコンテキストが作成される新しいアクティビティが妨げられることはありますか? つまり、以前のコンテキストに戻りたくありません。

あなたの質問に答えて:

  1. ソケットのライフサイクル: アクティビティ関連? プロセスが強制終了されるか、ユーザーがログアウトするまで、アプリ全体に 1 つですか?
    • ソケットはアプリ プロセスにリンクされ、ユーザーのログインで開始され、ユーザーのログオフで切断されます (およびアプリのバックグラウンド...私は知っています、顧客の要求)
  2. デバイス構成が変更され、アクティビティが再作成されたとき: 古いリクエストへの応答を新しいアクティビティで受け取りますか?
    • はい、はい、これは今のところ大きな問題ではありませんが、android:configChanges="orientation|screenSize" や android:screenOrientation="nosensor" などのメタタグで向きの変更が無効になっているためです。
  3. 応答の準備が整う前にアクティビティを終了したとき (またはユーザーが [戻る] を押したとき)、応答の準備ができてからアクティビティに戻った場合、それが表示されると思いますか?
    • うーん...トリッキーですが、ほとんどありません。スティッキーイベントを許可する @CommonsWare で言及されている greenrobot の EventBus を使用しています。例: ログイン プロセスの開始中にユーザーがアプリをバックラウンドします。ログイン セッションの繰り返しを避けるために、結果を取得する必要があります。

に関してで

オブジェクトへの強い参照がある間、WeakReference の参照が null になるということですか? これはあり得ないと思います。

申し訳ありません。現時点ではバックアップできません。Google グループでこれについて読んだことを覚えているだけです。また見かけたらここに書き込みます。

于 2013-07-08T09:50:16.563 に答える