android - 静态方法中可以持有Activity对象吗
PHP中文网
PHP中文网 2017-04-17 17:29:34
0
7
691

静态方法中可以持有Activity对象吗,这么做不好吧
GC的销毁Activity时会不会因为静态方法持有引用而销毁不了啊

PHP中文网
PHP中文网

认证0级讲师

全員に返信(7)
大家讲道理

メモリ リークに関する推奨記事
Android のメモリ リーク - 完全な分析と解決策

いいねを押す +0
巴扎黑

次の 2 つの状況を見れば、この質問は理解できるでしょう。

リーリー リーリー

A の静的メソッド a は、Activity オブジェクトを渡し、メソッドが終了し、Activity によって参照されるアクティビティのライフサイクルが終了します。これにより、リークは発生せず、問題ありません。

B の静的メソッド b は、Activity オブジェクトを渡し、B のメンバー変数 mActivity がこの参照を受け取ります。この静的メンバー変数はプロセス内に常に存在するため、メモリ リークが発生します。

いいねを押す +0
洪涛

メソッド内の変数はすべてローカル変数であり、メソッドの完了後は保持されません。

いいねを押す +0
黄舟

もちろん可能です。何も問題ありません

いいねを押す +0
巴扎黑

上記の答えに追加すると、クラス B が静的内部クラスであり、アクティビティへの参照を保持する必要がある場合は、弱参照を検討できます。

リーリー
いいねを押す +0
巴扎黑

上の階で弱い参照メソッドを提案します。Handler の正式な使用も同じメソッドです

いいねを押す +0
Peter_Zhu

意味があれば、明らかにこのように使用できます

しかし! ! ! 前述したように、メモリ リーク

が発生するため、これは行わないでください。
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート