我有这个site.
的片段final ProgressDialog dialog = ProgressDialog.show(this, "Title",
"Message", true);
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
dialog.dismiss();
}
};
Thread checkUpdate = new Thread() {
public void run() {
//
// YOUR LONG CALCULATION (OR OTHER) GOES HERE
//
handler.sendEmptyMessage(0);
}
};
checkUpdate.start();
我不完全理解它是如何完全有效的,除了它为ProcessDialog创建一个新线程以便在进程完成之前运行。
我假设我当然纠正了我,如果我错了,这会创建一个新线程,使现有线程仍在运行,这将导致.xml项目的空值。
我的问题是
如何在不进入null的情况下运行此代码 指针异常?
是否有其他替代方案可以做类似的事情 此?
答案 0 :(得分:0)
更优雅和首选的方法是使用AsyncTask:
private class DownloadTask extends AsyncTask<Object, Object, Object>
{
@Override
protected Object doInBackground(final Object... urls)
{
// long calculation
return null;
}
@Override
protected void onPostExecute(final Object result)
{
closeDialog();
}
@Override
protected void onPreExecute()
{
showDialog();
}
}
private void closeDialog()
{
if (dialog != null)
{
dialog.dismiss();
}
}
private void showDialog()
{
if (dialog !=null && !dialog.isShowing())
{
dialog = new ProgressDialog(this);
dialog.setMessage("Loading. Please wait...");
dialog.show();
}
}
用这一行称呼它:
new DownloadTask().execute();