静态方法中可以持有Activity对象吗,这么做不好吧GC的销毁Activity时会不会因为静态方法持有引用而销毁不了啊
认证0级讲师
メモリ リークに関する推奨記事Android のメモリ リーク - 完全な分析と解決策
次の 2 つの状況を見れば、この質問は理解できるでしょう。
A の静的メソッド a は、Activity オブジェクトを渡し、メソッドが終了し、Activity によって参照されるアクティビティのライフサイクルが終了します。これにより、リークは発生せず、問題ありません。
B の静的メソッド b は、Activity オブジェクトを渡し、B のメンバー変数 mActivity がこの参照を受け取ります。この静的メンバー変数はプロセス内に常に存在するため、メモリ リークが発生します。
メソッド内の変数はすべてローカル変数であり、メソッドの完了後は保持されません。
もちろん可能です。何も問題ありません
上記の答えに追加すると、クラス B が静的内部クラスであり、アクティビティへの参照を保持する必要がある場合は、弱参照を検討できます。
上の階で弱い参照メソッドを提案します。Handler の正式な使用も同じメソッドです
意味があれば、明らかにこのように使用できます
しかし! ! ! 前述したように、メモリ リーク
メモリ リークに関する推奨記事
Android のメモリ リーク - 完全な分析と解決策
次の 2 つの状況を見れば、この質問は理解できるでしょう。
リーリー リーリーA の静的メソッド a は、Activity オブジェクトを渡し、メソッドが終了し、Activity によって参照されるアクティビティのライフサイクルが終了します。これにより、リークは発生せず、問題ありません。
B の静的メソッド b は、Activity オブジェクトを渡し、B のメンバー変数 mActivity がこの参照を受け取ります。この静的メンバー変数はプロセス内に常に存在するため、メモリ リークが発生します。
メソッド内の変数はすべてローカル変数であり、メソッドの完了後は保持されません。
もちろん可能です。何も問題ありません
上記の答えに追加すると、クラス B が静的内部クラスであり、アクティビティへの参照を保持する必要がある場合は、弱参照を検討できます。
リーリー上の階で弱い参照メソッドを提案します。Handler の正式な使用も同じメソッドです
意味があれば、明らかにこのように使用できます
しかし! ! ! 前述したように、メモリ リーク
が発生するため、これは行わないでください。