我知道这是描述这个问题的一种奇怪的标题。我有一个代码如下:
new AlertDialog.Builder(getActivity()).setView(myScrollView)
.setPositiveButton("Sent Query", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
try {
JSONStringURL = myURL_here;
image = new AsyncTaskParseJson1(JSONStringURL).execute().get();
if (image.size() == 0) {
Toast.makeText(getActivity(), "no data", Toast.LENGTH_LONG).show();
} else {
overlayImage(image);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}.show();
当我按下“Positive Button”时,应用程序应立即取消AlertDialog,然后执行AsyncTask。不幸的是,AlertDialog会滞后3~4秒,然后运行AsyncTask会让用户体验真的很糟糕,但我不知道它为什么会滞后?
答案 0 :(得分:1)
while(1){
Scanner input2 = new Scanner(System.in);// the user select the 1 option from 4
int select = input2.nextInt(); // to save what user enter it
switch(select)
{
case 1:
input2.equals(1);
convert.getBinary(binaryString);
convert.displayMenu();
break;
case 2:
input2.equals(2);
convert.convertBtD(binaryString);
convert.displayMenu();
break;
case 3:
input2.equals(2);
convert.convertBtO(binaryString);
convert.displayMenu();
break ;
case 4:
break;
}
if(select == 4)
break;
使用NEVER
。这使你等待任务完成,这完全破坏了它异步的想法。功能甚至存在的事实是Android中的设计缺陷。相反,在AsyncTask.get()
完成之后需要完成的任何事情都应该在任务的AsyncTask
中完成(或者在从那里调用的函数中完成)。
显然这是你的问题 - 你没有关闭对话框并且并行执行任务,你等待任务完成(记住onPostExecute()
不会更新,直到控制权为止返回UI线程looper)。
答案 1 :(得分:0)
您必须使用这些更改
dialog.dismiss();
取代
dialog.cancel();