Android ProgressDialog不';使用线程在onCreate中不显示
我想在创建活动时加载一些联系人。因为这是一个长时间运行的操作,所以我想通过ProgressDialog通知用户。此应用程序的一个请求是不使用AsyncTasks,因此我使用了线程,但没有显示进度。这是我的onCreate方法:Android ProgressDialog不';使用线程在onCreate中不显示,android,multithreading,thread-safety,progressdialog,Android,Multithreading,Thread Safety,Progressdialog,我想在创建活动时加载一些联系人。因为这是一个长时间运行的操作,所以我想通过ProgressDialog通知用户。此应用程序的一个请求是不使用AsyncTasks,因此我使用了线程,但没有显示进度。这是我的onCreate方法: public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_contacts)
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contacts);
handler = new Handler();
mActionBar = getSupportActionBar();
mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
progress = new ProgressDialog(this);
progress.setMessage("Loading Contacts ");
progress.setIndeterminate(true);
progress.show();
Thread t = new Thread(new Runnable() {
@Override
public void run() {
contacts = ContactsUtils.getContacts(getContentResolver());
handler.post(new Runnable() {
public void run() {
progress.dismiss();
// UpdateDisplay();
};
});
}
});
t.start();
try {
t.join();
} catch (InterruptedException e) {
Log.e("Interrupted Exception:", e.getLocalizedMessage());
}
// other methods
}
我错过什么了吗?谢谢
已解决:连接后,onCreate中的其余代码应移动到处理程序,并且连接应被删除每当您试图从后台线程对UI执行操作时,请使用
处理程序
,或在rununuithread(Runnable())
中调用它
Try This Code:-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.launching);
final ProgressDialog myPd_ring=ProgressDialog.show(Launching.this, "", "Loading please wait..", true);
myPd_ring.setCancelable(true);
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try
{
Thread.sleep(2000);
}catch(Exception e){}
Intent intt=new Intent();
intt.setClass(Launching.this, MainController.class);
startActivity(intt);
finish();
myPd_ring.dismiss();
}
}).start();
}
progress.show()
另外,您为什么要使用线程?您不认为异步任务可以很好地完成此任务吗
您没有看到进度对话框的原因是
try {
t.join();
} catch (InterruptedException e) {
Log.e("Interrupted Exception:", e.getLocalizedMessage());
}
这将保留主线程直到任务完成,只需对其进行注释即可尝试以下操作:
private ProgressDialog pDialog; // global
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_launcher);
color_list = (ListView) this.findViewById(R.id.color_list);
imageView1 = (ImageView)findViewById(R.id.icon);
pDialog = new ProgressDialog(Launcher.this);
pDialog.setMessage("Loading...");
pDialog.setCancelable(false);
showProgressDialog();
Thread t = new Thread(new Runnable() {
@Override
public void run() {
contacts = ContactsUtils.getContacts(getContentResolver());
handler.post(new Runnable() {
public void run() {
hideProgressDialog();
};
});
}
});
}
private void showProgressDialog() {
if (!pDialog.isShowing())
pDialog.show();
}
private void hideProgressDialog() {
if (pDialog.isShowing())
pDialog.hide();
}
我看到您创建了PD,您在哪里显示它?您在哪里调用
show()
?而且您最好使用AsyncTask我很好奇。为什么不使用AsyncTask?我必须用两种方法。使用异步任务,它可以工作,但我不明白为什么它不能使用线程。我忘了将它粘贴到这里。任务请求指定不允许我使用异步tasks@mawus为什么不使用asynctasks?我必须让我的UI线程等待线程执行,否则我的listProgress对话框中不会显示联系人,除非你让UI线程空闲。您可以通过设置pd.setCancelable(false)来停止用户取消对话框代码>你是对的,我已经删除了join,并使用了一个处理程序来执行onCreate的其余代码。谢谢我不明白你的问题我是说你的代码进度条是否显示在屏幕上?不,但是进度。isShowed()返回true。。。我认为它与连接有关,因为@nizammoidu saidI需要让我的UI线程等待线程执行,以便加载数据,这就是我使用连接的原因