LifecycleObserver
就像名字上說的串前,它是用于觀察宿主的生命周期,這里的宿主指的是Activity
或Fragment
荡碾【肿埃可以通過實現(xiàn)LifecycleObserver
接口劳殖,在方法上添加@OnLifecycleEvent(Lifecycle.Event.ON_XXX)
注釋,當(dāng)生命周期回調(diào)到相應(yīng)的生命周期的時候哆姻,就會調(diào)用上面的方法玫膀。這是管理內(nèi)容泄露的一個很好的方法,同時這也是生命周期的一個切面帖旨。
LifeCycle events
class ConnectivityChecker(private val connectivityManager: ConnectivityManager) : LifecycleObserver {
private val _connectedStatus = MutableLiveData<Boolean>()
val connectedStatus: LiveData<Boolean>
get() = _connectedStatus
private val connectivityCallback = object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
_connectedStatus.postValue(true)
}
override fun onLost(network: Network) {
_connectedStatus.postValue(false)
}
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun stopMonitoringConnectivity() {
connectivityManager.unregisterNetworkCallback(connectivityCallback)
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun startMonitoringConnectivity() {
val activeNetworkInfo: NetworkInfo? = connectivityManager.activeNetworkInfo
val connected = activeNetworkInfo != null && activeNetworkInfo.isConnected
_connectedStatus.postValue(connected)
connectivityManager.registerNetworkCallback(
NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).build(),
connectivityCallback
)
}
}
ConnectivityChecker
代碼很簡單碉就,在ON_RESUME
時,注冊監(jiān)聽器瓮钥,在ON_PAUSE
的時候取消注冊監(jiān)聽器。然后通過connectedStatus
暴露連接狀態(tài)桨武。下面是調(diào)用的代碼。
private fun listeningNetChange() {
val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
connectivityManager.apply {
ConnectivityChecker(this).apply {
lifecycle.addObserver(this)
connectedStatus.observe(this@MainActivity, Observer {
if (it) {
//網(wǎng)絡(luò)已經(jīng)連接上
} else {
//網(wǎng)絡(luò)已斷開
}
})
}
}
}