Presenter層耗時操作,例如網(wǎng)絡請求
如果P層持有Activity的強引用鹃骂,網(wǎng)絡請求結束前Activity銷毀了吱型,會導致P層一直持有Activity的引用,使Activity無法被回收立镶,發(fā)生內存泄漏
解決辦法:
abstract class BasePresenter<T> {
//使用弱引用
protected var mViewRef: Reference<T>? = null
fun attachView(view: T) {
mViewRef = WeakReference<T>(view)
}
fun detachView() {
if (mViewRef != null) {
mViewRef?.clear()
mViewRef = null
}
}
fun getView(): T? {
return mViewRef?.get()
}
fun isViewAttached(): Boolean {
return mViewRef != null && mViewRef?.get() != null
}
}
//設置一個MVPBaseActivity
abstract class MVPBaseActivity<V,T:BasePresenter<V>>: AppCompatActivity() {
protected var mPresenter:T? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mPresenter = createPresenter()
mPresenter?.attachView(this as V)
}
abstract fun createPresenter(): T?
override fun onDestroy() {
super.onDestroy()
mPresenter?.detachView()
}
}