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完成的所有作业。再次感谢你的好意。谢谢你的回答。但这不是答案。当你在后台完成时,我们不得不检查这个。非常感谢你的回答。我在朋友的帮助下做了研究,得到了答案。然而,我得出的解决办法与你的答案相似。我选择了一个有效的答案来回答你的问题。祝你一天愉快。