Skip to content

Commit d4fda13

Browse files
committed
添加防抖参数
1 parent 08a5cb1 commit d4fda13

File tree

5 files changed

+80
-23
lines changed

5 files changed

+80
-23
lines changed

README.md

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ Step 2. Add the dependency
2424

2525
``` glide
2626
dependencies {
27-
implementation 'com.github.kongqw:NetworkMonitor:1.0.1'
27+
implementation 'com.github.kongqw:NetworkMonitor:1.1.0'
2828
}
2929
```
3030

@@ -37,6 +37,17 @@ dependencies {
3737
NetworkMonitorManager.getInstance().init(this)
3838
```
3939

40+
41+
42+
``` kotlin
43+
/**
44+
* 初始化
45+
* @param application 上下文
46+
* @param jitterTime 设置抖动时间(即多久之后网络状态没有发生变化,才回调网络状态,单位:毫秒,默认1500毫秒)
47+
*/
48+
NetworkMonitorManager.getInstance().init(this, 1_500)
49+
```
50+
4051
### 注册与反注册
4152

4253
在需要监听网络状态的页面进行注册与反注册

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ android {
1212
minSdkVersion 21
1313
targetSdkVersion 30
1414
versionCode 1
15-
versionName "1.0"
15+
versionName "1.1.0"
1616
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1717
}
1818
buildTypes {

app/src/main/java/com/kongqw/networkmonitor/MainActivity.kt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,19 +55,19 @@ class MainActivity : AppCompatActivity() {
5555
}
5656
}
5757
}
58-
59-
@NetworkMonitor(monitorFilter = [NetworkState.WIFI, NetworkState.CELLULAR])
60-
fun onNetWorkStateChangeWIFI(networkState: NetworkState) {
61-
Log.i(TAG, "onNetWorkStateChangeWIFI networkState = $networkState")
62-
}
63-
64-
@NetworkMonitor(monitorFilter = [NetworkState.CELLULAR])
65-
fun onNetWorkStateChangeCellular(networkState: NetworkState) {
66-
Log.i(TAG, "onNetWorkStateChangeCellular networkState = $networkState")
67-
}
68-
69-
@NetworkMonitor(monitorFilter = [NetworkState.NONE])
70-
fun onNetWorkStateChangeNONE(networkState: NetworkState) {
71-
Log.i(TAG, "onNetWorkStateChangeNONE networkState = $networkState")
72-
}
58+
//
59+
// @NetworkMonitor(monitorFilter = [NetworkState.WIFI, NetworkState.CELLULAR])
60+
// fun onNetWorkStateChangeWIFI(networkState: NetworkState) {
61+
// Log.i(TAG, "onNetWorkStateChangeWIFI networkState = $networkState")
62+
// }
63+
//
64+
// @NetworkMonitor(monitorFilter = [NetworkState.CELLULAR])
65+
// fun onNetWorkStateChangeCellular(networkState: NetworkState) {
66+
// Log.i(TAG, "onNetWorkStateChangeCellular networkState = $networkState")
67+
// }
68+
//
69+
// @NetworkMonitor(monitorFilter = [NetworkState.NONE])
70+
// fun onNetWorkStateChangeNONE(networkState: NetworkState) {
71+
// Log.i(TAG, "onNetWorkStateChangeNONE networkState = $networkState")
72+
// }
7373
}

monitor/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ android {
1212
minSdkVersion 21
1313
targetSdkVersion 30
1414
versionCode 1
15-
versionName "1.0"
15+
versionName "1.1.0"
1616

1717
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
1818
consumerProguardFiles 'consumer-rules.pro'

monitor/src/main/java/com/kongqw/network/monitor/NetworkMonitorManager.kt

Lines changed: 51 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ class NetworkMonitorManager private constructor() {
2222

2323
private const val ANDROID_NET_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE"
2424

25+
// 默认网络防抖时间
26+
private const val DEFAULT_JITTER_TIME: Long = 1_500
27+
2528
@JvmStatic
2629
private var INSTANCE: NetworkMonitorManager? = null
2730

@@ -32,13 +35,28 @@ class NetworkMonitorManager private constructor() {
3235
}
3336

3437
private var mApplication: Application? = null
38+
private var mJitterTime: Long = DEFAULT_JITTER_TIME
3539
private var mNetworkBroadcastReceiver = NetworkBroadcastReceiver()
3640
private var mNetworkCallback = NetworkCallback()
3741
private var netWorkStateChangedMethodMap: HashMap<Any, ArrayList<NetworkStateReceiverMethod>> = HashMap()
3842
private val mUiHandler = Handler(Looper.getMainLooper())
3943

40-
fun init(application: Application) {
44+
private var mLastNetworkState: NetworkState? = null
45+
private var mRunnable: Runnable? = null
46+
47+
/**
48+
* 初始化
49+
* @param application 上下文
50+
* @param jitterTime 设置抖动时间
51+
*/
52+
fun init(application: Application, jitterTime: Long = DEFAULT_JITTER_TIME) {
4153
mApplication = application
54+
mJitterTime = jitterTime.let {
55+
if (it < 0) {
56+
return@let 0
57+
}
58+
return@let it
59+
}
4260
initMonitor(application)
4361
}
4462

@@ -90,11 +108,39 @@ class NetworkMonitorManager private constructor() {
90108
}
91109
}
92110

111+
93112
private fun postNetworkState(networkState: NetworkState) {
94-
for ((_, methods) in netWorkStateChangedMethodMap) {
95-
methods.forEach { networkStateReceiverMethod ->
96-
if (true == networkStateReceiverMethod.monitorFilter?.contains(networkState)) {
97-
mUiHandler.post { networkStateReceiverMethod.method?.invoke(networkStateReceiverMethod.any, networkState) }
113+
// Log.i("NetworkMonitorManager", "postNetworkState($networkState)")
114+
if (mLastNetworkState == networkState) {
115+
// Log.i("NetworkMonitorManager", "已经回调过该状态,不再多次回调")
116+
return
117+
}
118+
119+
mRunnable?.also { mUiHandler.removeCallbacks(it) }
120+
121+
122+
mRunnable = Runnable {
123+
for ((_, methods) in netWorkStateChangedMethodMap) {
124+
125+
methods.forEach { networkStateReceiverMethod ->
126+
if (true == networkStateReceiverMethod.monitorFilter?.contains(networkState)) {
127+
networkStateReceiverMethod.method?.invoke(networkStateReceiverMethod.any, networkState)
128+
// 记录最后一次回调的网络状态
129+
mLastNetworkState = networkState
130+
}
131+
}
132+
}
133+
}
134+
135+
when (networkState) {
136+
NetworkState.NONE -> {
137+
mRunnable?.also {
138+
mUiHandler.postDelayed(it, mJitterTime)
139+
}
140+
}
141+
else -> {
142+
mRunnable?.also {
143+
mUiHandler.postDelayed(it, mJitterTime)
98144
}
99145
}
100146
}

0 commit comments

Comments
 (0)