Android 如何使线程在循环语句中同步?

Android 如何使线程在循环语句中同步?,android,multithreading,asynchronous,android-asynctask,Android,Multithreading,Asynchronous,Android Asynctask,我是个新手。我正在尝试加载一小组照片。现在我正在使用异步任务/线程,但是如何使结果按顺序进行?下面是一个例子: 我想要的是: a[0] = photo1; a[1] = photo2; a[2] = photo3; a[3] = photo4 我的程序给了我什么。请注意,顺序会发生变化,并且是随机的: a[0] = photo[2]; a[1] = photo[1]; a[2] = etc 以下是我的代码片段: ... for (int i = 0; i < mNoOfContacts

我是个新手。我正在尝试加载一小组照片。现在我正在使用异步任务/线程,但是如何使结果按顺序进行?下面是一个例子:

我想要的是:

a[0] = photo1;
a[1] = photo2;
a[2] = photo3;
a[3] = photo4
我的程序给了我什么。请注意,顺序会发生变化,并且是随机的:

a[0] = photo[2];
a[1] = photo[1];
a[2] = etc
以下是我的代码片段:

...
for (int i = 0; i < mNoOfContacts; i++) {
    String stringContactUri = storeSettings.getString("contactUri"+i, "");
    if (stringContactUri != ""){
        Uri contactUri = Uri.parse(stringContactUri);
        loadContactInfo(contactUri);
    }
...
private void loadContactInfo(Uri contactUri) {

    AsyncTask<Uri, Void, ContactInfo> task = new AsyncTask<Uri, Void, ContactInfo>() {

        @Override
        protected ContactInfo doInBackground(Uri... uris) {             
            return mContactAccessor.loadContact(getContentResolver(), uris[0]);
        }

        @Override
        protected void onPostExecute(ContactInfo result) {
            Contacts[mNoOfContacts] = result;
        Toast.makeText(getApplicationContext(), mNoOfContacts+"Picked Contact"+Contacts[mNoOfContacts].getDisplayName(), Toast.LENGTH_SHORT).show();
            mNoOfContacts++;
        } 
    };

    task.execute(contactUri);
}
...
。。。
for(int i=0;i
我的代码是对谷歌Android演示应用程序-名片的修改。
请帮助!谢谢!

最简单的方法是将
onPostExecute
方法调用一个执行排序的例程:传递ContactInfo和Uri,然后将Uri与原始Uri进行比较,并将其放置在正确的位置


或者修改您的
AsyncTask
,这样您就可以一次通过所有
Uri
来启动一个Uri,而不是每个Uri启动一个。

我认为,根据定义,“异步任务”是不同步的……异步的字面意思是“不同步”如果你想让它同步,只需通过一个URI调用来加载它们,获取你的照片,并在最后一张照片加载后再次加载