我有一个问题,我编写的代码如
private class SomeClass extends AsyncTask {
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(CheckOutActivity.this);
pDialog.setMessage(getText(R.string.wait));
pDialog.setIndeterminate(false);
pDialog.setCancelable(true);
pDialog.show();
}
@Override
protected Void doInBackground(Void... arg0) {
//some code
}
@Override
protected void onPostExecute(final Void unused) {
if (pDialog.isShowing()) {
pDialog.dismiss();
}
}
}
我像这样执行类
new SomeClass().execute();
Toast.makeText(getApplicationContext(), "msg msg", Toast.LENGTH_SHORT).show();
现在我的问题是.execute()启动代码就像不等待它意味着Toast就像在执行SomeClass()之前执行一样.execute();有没有等待这个.execute()方法的属性。
编辑:我为globle变量分配了一些值,在执行之后我只想比较这个值。所以我只是把Toast的消息。
答案 0 :(得分:5)
如果您希望在工作完成后显示Toast
逻辑,请将其移至onPostExecute()
。
答案 1 :(得分:0)
在异步任务上调用get()
实际上会使它不再异步并阻塞主线程。
来自android docs
Waits if necessary for the computation to complete, and then retrieves its result.
注意这不是一个好主意,因为你永远不应该阻止主线程。
用法:
new SomeClass().execute().get();