2011-12-02 149 views
0

好家伙,为什么当我添加ProgressDialog它成为不响应ProgressDialog没有响应

  ProgressDialog dialog = ProgressDialog.show(AppsInspectorActivity.this, "", 
        "Scanning package " + pkgInfo.packageName, true); 
      dialog.setCancelable(true); 
      dialog.show(); 

上述Log.v(TAG, "Scanning package " + pkgInfo.packageName);

private List<PackageInfo> getAdPackages() { 

[沉重的东西]

return new ArrayList<PackageInfo>(adPackages); 
} 

}

+0

对不起,我不知道我理解你所说的“它变得没有响应” – Kaediil

回答

1

ASyncTask是要走的路。只是覆盖doInBackground()。并使用Handler类来停止(取消())progressDialog。

http://www.helloandroid.com/tutorials/using-threads-and-progressdialog 似乎有用..

http://www.vogella.de/articles/AndroidPerformance/article.html 非常深入的版本..

+0

如何扩展?它是'扩展AsyncTask ,Void,ArrayList > {'? – xAnGz

+0

它的arg列表是flux,im当前使用“extends AsyncTask ”和“protected String doInBackground(String ... url)”。如果你需要更复杂的结构,我会将它绑定到范围(私有成员/字段)。 –

0

你可以吗?罚款没有回应意味着什么?对话框不会显示,或者在按Back时不会退出?当操作完成后,试图拒绝与对话:

dialog.dismiss() 
0

所以我要以此来猜测的问题,如果你说进度对话框冻结和应用程序变得无响应,看来您尚未建立对话框旨在表示的长期过程。默认情况下,所有代码都在UI线程上运行,因此如果您的过程需要很长时间,屏幕不会更新,并且用户会收到死亡通知(未响应)。您应该在onProgressUpdate方法中根据需要线程处理长期流程(最好在异步任务中)并将更新发布到进度对话框。

+0

所以,如果我用ASYN是什么意思我应该扩展哪一部分的任务? '私人名单'? – xAnGz

+0

您应该创建一个扩展异步任务的新类,在预执行中启动对话框,并在后执行中清除对话框,并在进度更新部分根据需要发布更新。 – Pyrodante

+0

另外:如果不明显,将您的长期过程迁移到“doInBackground” – Pyrodante