2011-12-02 142 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