Skip to content

Commit de21de8

Browse files
committed
修复 LogcatAdapter 获取条目出现数组越界的问题
1 parent 57da324 commit de21de8

File tree

4 files changed

+29
-11
lines changed

4 files changed

+29
-11
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
* 项目地址:[Github](https://github.com/getActivity/Logcat)[码云](https://gitee.com/getActivity/Logcat)
66

7-
* 可以扫码下载 Demo 进行演示或者测试,如果扫码下载不了的,[点击此处可直接下载](https://github.com/getActivity/Logcat/releases/download/10.2/Logcat.apk)
7+
* 可以扫码下载 Demo 进行演示或者测试,如果扫码下载不了的,[点击此处可直接下载](https://github.com/getActivity/Logcat/releases/download/10.3/Logcat.apk)
88

99
![](picture/demo_code.png)
1010

@@ -53,7 +53,7 @@ dependencyResolutionManagement {
5353
```groovy
5454
dependencies {
5555
// 日志调试框架:https://github.com/getActivity/Logcat
56-
debugImplementation 'com.github.getActivity:Logcat:10.2'
56+
debugImplementation 'com.github.getActivity:Logcat:10.3'
5757
}
5858
```
5959

@@ -275,7 +275,7 @@ android.enableJetifier = true
275275

276276
![](https://raw.githubusercontent.com/getActivity/Donate/master/picture/official_ccount.png)
277277

278-
#### Android 技术分享 QQ 群:78797078
278+
#### Android 技术 Q 群:10047167
279279

280280
#### 如果您觉得我的开源库帮你节省了大量的开发时间,请扫描下方的二维码随意打赏,要是能打赏个 10.24 :monkey_face:就太:thumbsup:了。您的支持将鼓励我继续创作:octocat:
281281

app/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ android {
77
applicationId "com.hjq.logcat.demo"
88
minSdkVersion 16
99
targetSdkVersion 31
10-
versionCode 1020
11-
versionName "10.2"
10+
versionCode 1030
11+
versionName "10.3"
1212
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
1313
}
1414

@@ -65,7 +65,7 @@ dependencies {
6565
implementation 'com.github.getActivity:TitleBar:9.3'
6666

6767
// 吐司框架:https://github.com/getActivity/ToastUtils
68-
implementation 'com.github.getActivity:ToastUtils:10.2'
68+
implementation 'com.github.getActivity:ToastUtils:10.3'
6969

7070
// 内存泄漏捕捉:https://github.com/square/leakcanary
7171
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.8.1'

library/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ android {
99

1010
defaultConfig {
1111
minSdkVersion 16
12-
versionCode 1020
13-
versionName "10.2"
12+
versionCode 1030
13+
versionName "10.3"
1414
}
1515

1616
lintOptions {

library/src/main/java/com/hjq/logcat/LogcatAdapter.java

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,10 @@
3232
* time : 2020/01/24
3333
* desc : 日志列表适配器
3434
*/
35+
@SuppressLint("NotifyDataSetChanged")
3536
final class LogcatAdapter extends RecyclerView.Adapter<LogcatAdapter.ViewHolder> {
3637

37-
/** 最大日志数量限制(避免日志过多导致 OOM) */
38+
/** 最大日志数量限制(避免日志过多导致出现 OOM) */
3839
private static final int LOG_MAX_COUNT = 1000;
3940
/** 达到阈值时删除的日志数量 */
4041
private static final int LOG_REMOVE_COUNT = LOG_MAX_COUNT / 5;
@@ -204,6 +205,12 @@ void setOnItemLongClickListener(@Nullable OnItemLongClickListener listener) {
204205
mItemLongClickListener = listener;
205206
}
206207

208+
@Override
209+
public void onViewDetachedFromWindow(ViewHolder holder) {
210+
super.onViewDetachedFromWindow(holder);
211+
holder.onDetached();
212+
}
213+
207214
@Override
208215
public void onViewRecycled(@NonNull LogcatAdapter.ViewHolder holder) {
209216
super.onViewRecycled(holder);
@@ -379,7 +386,14 @@ private void onBindView(LogcatInfo info, int position) {
379386
}
380387

381388
/**
382-
* ViewHolder 回收回调
389+
* ViewHolder 解绑时回调
390+
*/
391+
public void onDetached() {
392+
mHorizontalScrollView.removeCallbacks(mScrollRunnable);
393+
}
394+
395+
/**
396+
* ViewHolder 回收时回调
383397
*/
384398
public void onRecycled() {
385399
mHorizontalScrollView.removeCallbacks(mScrollRunnable);
@@ -398,7 +412,11 @@ public void run() {
398412
// java.lang.ArrayIndexOutOfBoundsException: length=163; index=-1
399413
return;
400414
}
401-
LogcatInfo info = getItem(getLayoutPosition());
415+
if (layoutPosition >= getItemCount()) {
416+
// 避免数组出现越界
417+
return;
418+
}
419+
LogcatInfo info = getItem(layoutPosition);
402420
int scrollX = mScrollXSet.get(info.hashCode());
403421
if (mHorizontalScrollView.getScrollX() == scrollX) {
404422
return;

0 commit comments

Comments
 (0)