弱い引用の正しい使用

1433 ワード

使用シーンを見ました.adpterを初期化する時、例えばfragmentなどの大きな引用が入ってきたら、WeakReferencを使います.
private Fragment mFragment
WeakReference FragmentWeakReference = new WeakReference<>(Fragment);
mFragment = bindFragmentWeakReference.get();
ちょっと変なのを見ましたが、このままではメモリの漏れを防ぐことができますか?
このような書き方で弱い引用getから出た対象を賦課するべきですか?それとも強い引用ですか?
Weak Referenc:オブジェクトが強い参照先がない場合は、gc操作を行い、ソフト参照先のオブジェクトも回収されます.
weakReference = new WeakReference<>(object);
Log.e("before_sleep",""+weakReference.get());
//  profiler  gc ,      
Log.e("after_sleep",""+weakReference.get());
2019-07-09:07:240508 13836-3836/comp.example.mypplication E/before_sleep:12345
2019-07-09:07:32.853 138-3836/comp.example.myappication I/art:Starting a blocking GC Explicit 2019-07:07:46.075 13836/comp.example.myappication E/after_sleep:null
上記の方法を用いてテストを行い、最後に結論を出す.
弱引用使用:1 gc操作を行いました.2強引用対象なし.
彼の書き方に問題があります.
1弱引用getから出た対象を賦課するか、それとも強引用するかは、そのまま回収することはできません.
2ここではメモリが漏れているとは思いません.一つのページに結びつけられています.きっと手動でnullを置くと思います.メモリ漏れが発生しません.
正しい書き方は
private WeakReference FragmentWeakReference
WeakReference FragmentWeakReference = new WeakReference<>(Fragment);

参照
https://www.jianshu.com/p/964fbc30151a