diff --git a/README.md b/README.md index 315f2df5..7a1cddb4 100644 --- a/README.md +++ b/README.md @@ -153,6 +153,8 @@ QQ交流群:[288600953](https://jq.qq.com/?_wv=1027&k=5QGgCDe) ## 更新日志 +**2.5.0:** +- 优化:修复ArrayList在多线程中addItem出现的角标越界问题 **2.4.9:** - 重要:升级到gradle:3.4.2,低版本studio可能因为该项升级而产生错误,建议升级studio或手动修改classpath 'com.android.tools.build:gradle:3.4.2'到你的可用版本 diff --git a/demo/release/demo-release.apk b/demo/release/demo-release.apk index c6798d5f..404b37bc 100644 Binary files a/demo/release/demo-release.apk and b/demo/release/demo-release.apk differ diff --git a/easyPhotos/src/main/java/com/huantansheng/easyphotos/models/album/AlbumModel.java b/easyPhotos/src/main/java/com/huantansheng/easyphotos/models/album/AlbumModel.java index 780c1f01..2588175f 100644 --- a/easyPhotos/src/main/java/com/huantansheng/easyphotos/models/album/AlbumModel.java +++ b/easyPhotos/src/main/java/com/huantansheng/easyphotos/models/album/AlbumModel.java @@ -18,7 +18,7 @@ import com.huantansheng.easyphotos.utils.String.StringUtils; import java.io.File; -import java.util.ArrayList; +import java.util.List; /** * 专辑模型 @@ -227,7 +227,7 @@ public String getAllAlbumName(Context context) { * * @return 当前专辑项目的图片集 */ - public ArrayList getCurrAlbumItemPhotos(int currAlbumItemIndex) { + public List getCurrAlbumItemPhotos(int currAlbumItemIndex) { return album.getAlbumItem(currAlbumItemIndex).photos; } @@ -236,7 +236,7 @@ public ArrayList getCurrAlbumItemPhotos(int currAlbumItemIndex) { * * @return 专辑项目集 */ - public ArrayList getAlbumItems() { + public List getAlbumItems() { return album.albumItems; } diff --git a/easyPhotos/src/main/java/com/huantansheng/easyphotos/models/album/entity/Album.java b/easyPhotos/src/main/java/com/huantansheng/easyphotos/models/album/entity/Album.java index b11b9887..8e07c5cc 100644 --- a/easyPhotos/src/main/java/com/huantansheng/easyphotos/models/album/entity/Album.java +++ b/easyPhotos/src/main/java/com/huantansheng/easyphotos/models/album/entity/Album.java @@ -1,7 +1,9 @@ package com.huantansheng.easyphotos.models.album.entity; import java.util.ArrayList; +import java.util.Collections; import java.util.LinkedHashMap; +import java.util.List; /** * 专辑模型实体类 @@ -9,17 +11,23 @@ */ public class Album { - public ArrayList albumItems; + final public List albumItems; private LinkedHashMap hasAlbumItems;//用于记录专辑项目 public Album() { - albumItems = new ArrayList<>(); + albumItems = Collections.synchronizedList(new ArrayList()); hasAlbumItems = new LinkedHashMap<>(); } private void addAlbumItem(AlbumItem albumItem) { - this.hasAlbumItems.put(albumItem.name, albumItem); - this.albumItems.add(albumItem); + synchronized (albumItems) { + boolean absent = !albumItems.contains(albumItem); + if (absent) { + this.albumItems.add(albumItem); + this.hasAlbumItems.put(albumItem.name, albumItem); + } + } + } public void addAlbumItem(String name, String folderPath, String coverImagePath) { diff --git a/easyPhotos/src/main/java/com/huantansheng/easyphotos/models/album/entity/AlbumItem.java b/easyPhotos/src/main/java/com/huantansheng/easyphotos/models/album/entity/AlbumItem.java index 997d4d80..36faf4b5 100644 --- a/easyPhotos/src/main/java/com/huantansheng/easyphotos/models/album/entity/AlbumItem.java +++ b/easyPhotos/src/main/java/com/huantansheng/easyphotos/models/album/entity/AlbumItem.java @@ -1,6 +1,8 @@ package com.huantansheng.easyphotos.models.album.entity; import java.util.ArrayList; +import java.util.Collections; +import java.util.List; /** * 专辑项目实体类 @@ -11,17 +13,22 @@ public class AlbumItem { public String name; public String folderPath; public String coverImagePath; - public ArrayList photos; + public final List photos; AlbumItem(String name, String folderPath, String coverImagePath) { this.name = name; this.folderPath = folderPath; this.coverImagePath = coverImagePath; - this.photos = new ArrayList<>(); + this.photos = Collections.synchronizedList(new ArrayList()); } public void addImageItem(Photo imageItem) { - this.photos.add(imageItem); + synchronized (photos) { + boolean absent = !photos.contains(imageItem); + if (absent) { + this.photos.add(imageItem); + } + } } public void addImageItem(int index, Photo imageItem) {