Java 如何知道后台线程何时完成AsyncTask?

Java 如何知道后台线程何时完成AsyncTask?,java,android,android-asynctask,Java,Android,Android Asynctask,我把人们的名字和电话号码用背景线串起来,然后用在某个地方。一切正常,但我想做点什么。我想在线程用完时向用户展示一些东西。但是我不知道如何检查这个线程的状态。如果你能帮忙,我将不胜感激。提前谢谢 cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null, ContactsContract.Contacts.DISPLAY_

我把人们的名字和电话号码用背景线串起来,然后用在某个地方。一切正常,但我想做点什么。我想在线程用完时向用户展示一些东西。但是我不知道如何检查这个线程的状态。如果你能帮忙,我将不胜感激。提前谢谢

cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,
                ContactsContract.Contacts.DISPLAY_NAME + " ASC");

        AsyncTask.execute(new Runnable() {
            @Override
            public void run() {

                while (cursor.moveToNext()){

                    String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                    String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)).trim();

                }
                cursor.close();
            }
        });
    }

我想这就是你的意思

    final TextView textView1 = findViewById(R.id.sample_text);
    final Handler uiHandler = new Handler(Looper.getMainLooper());
    AsyncTask.execute(new Runnable() {
        @Override
        public void run() {
            //... your work
            uiHandler.post(new Runnable() {
                @Override
                public void run() {
                    textView1.setText("finish");
                }
            });
        }
    });

您可以这样做:

public class Processing extends AsyncTask<Void, Void, Void>

  ProgressDialog mProgress;
  @Override
        protected void onPreExecute() {
        super.onPreExecute();
        mProgress = new ProgressDialog(YOUR_ACTIVITIY.this);
        mProgress.setTitle("Processing");
        mProgress.setMessage("Please wait ...");
        mProgress.show();

        @Override
        protected Void doInBackground(Void... voids) {
        cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,
                ContactsContract.Contacts.DISPLAY_NAME + " ASC");

        AsyncTask.execute(new Runnable() {
            @Override
            public void run() {

                while (cursor.moveToNext()){

                    String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                    String phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)).trim();

                }
                cursor.close();
            }
        });
    }
}
 @Override
    protected void onPostExecute(Void v) {
        super.onPostExecute(v);
        mProgress.dismiss();
   }
}
公共类处理扩展了异步任务
进步;
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
mpprogress=newprogressdialog(您的活动.this);
mProgress.setTitle(“处理”);
设置消息(“请稍候…”);
mProgress.show();
@凌驾
受保护的空位背景(空位…空位){
cursor=getContentResolver().query(ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,null,null,null,
Contacts contract.Contacts.DISPLAY_NAME+“ASC”);
AsyncTask.execute(新的Runnable(){
@凌驾
公开募捐{
while(cursor.moveToNext()){
String contactName=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataTypes.Phone.DISPLAY_NAME));
String phoneNumber=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER)).trim();
}
cursor.close();
}
});
}
}
@凌驾
受保护的void onPostExecute(void v){
super.onPostExecute(v);
mProgress.disclose();
}
}

AsyncTask
在调用
onPostExecute
时已完成执行。您应该在
AsyncTask
中重写
onPostExecute
。非常感谢您的回答。我用你给我的信息做了研究,学到了新东西。我已经为后台线程创建了一个测试,现在可以跟踪使用AsyncTask完成的所有作业。再次感谢你的好意。谢谢你的回答。但这不是答案。当你在后台完成时,我们不得不检查这个。非常感谢你的回答。我在朋友的帮助下做了研究,得到了答案。然而,我得出的解决办法与你的答案相似。我选择了一个有效的答案来回答你的问题。祝你一天愉快。