在AlertDialog中使用AsyncTask会导致用户体验滞后吗?

时间:2015-04-27 06:06:18

标签: android performance android-asynctask android-alertdialog

我知道这是描述这个问题的一种奇怪的标题。我有一个代码如下:

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会让用户体验真的很糟糕,但我不知道它为什么会滞后?

2 个答案:

答案 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();