Android | arraylist.size() 即使声明为全局变量也返回 0?

Android | arraylist.size() returning 0 even if it is declared as global variable?

我有一个方法可以获取所有图像 uri 并将其存储到 arrayList。它在任何方法声明之前被声明为全局变量。它有一个 while 循环,它获取图像直到 cursor 有下一个条目。当没有剩余项目时,while 循环终止。在 while 循环内 arrayList.size() returns 4 这是预期的,因为我的设备只有 4 张照片。但是,在 while 循环之外它 returns 0。我不明白为什么。

...
 public ArrayList<ImageModel> fetchImages() {
        imageModel = new ImageModel();
       if(!FETCHED || !previousList.equals(arrayList)) {
            uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
            projection = new String[]{MediaStore.Images.Media._ID,MediaStore.Images.Media.BUCKET_DISPLAY_NAME};
            orderBy = MediaStore.Images.Media.DATE_ADDED;
            cursor = activity.getApplicationContext().getContentResolver().query(uri, projection, null, null, orderBy + " DESC");
            column_index_data = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns._ID);

            new Thread(() -> {
                while (cursor.moveToNext()) { //Start of while loop....
                    Log.d("FetchImages(): ", " Started");
                    long mediaId = cursor.getLong(column_index_data);
                    name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.BUCKET_DISPLAY_NAME));
                    if (!list.contains(name))
                        list.add(name);
                    Uri uriMedia = Uri.withAppendedPath(uri, "" + mediaId);
                    imageModel.setUri(uriMedia);
                    arrayList.add(imageModel);
                }// End of while loop
                cursor.close();
                Log.d("FetchImages(): ", " Ended");
                Log.d("FetchAlbums(): ", " Ended with list size "+list.size());
                Log.d("Inside of While", "fetchImages: "+arrayList.size()); //returns 4
            }).start();
            FETCHED = true;
            previousList = arrayList;
        }
        Log.d("Out of While", "fetchImages: "+arrayList.size()); // returns 0
        return arrayList;
    }
...

变量数组在顶部声明。

public class FetchImages {

   
    private static ArrayList<ImageModel> arrayList;
    private static ArrayList<String> list;
...

同样的事情发生在另一个 arraylist 变量 list

此类问题是由于线程的不同步行为引起的。避免使用过多线程。

线程不共享变量的单个副本。所以,在 while loop 它有自己的变量,其中主变量是 0.