在Android應用程序中,我在單獨的線程中運行任務。在線程運行時,它會在主窗口中更新進度條,以便讓用戶知道發生了什麼。問題是,如果用戶第二次啓動線程,則不會重置進度欄。它只會坐在100%沒有做任何事情。當第二次打開時,ProgressBar不會重置爲「0」
整體來源是available on github。以BackupThread 和JsonBackup(主類)爲例。請注意,「RestoreThread」顯示相同的行爲,但我認爲在這兩種情況下問題都是相同的。
在通過一個快速步行:
在各地line 300 in JsonBackup.java,我打開一個新的ProgressDialog。由於這是一個新的實例,我假設所有的都已正確初始化。在我目前的工作副本上,我添加了一行將進度設置爲「0」,但這並沒有改變任何內容。在同一個塊中,我創建備份線程並運行它。
下一個感興趣的代碼是線程將其進度傳回主應用程序的時刻。這發生在line 185 of BackupThread.java左右。
消息在line 80 of JsonBackup.java中處理,它將更新進度條。
到目前爲止的代碼演練。在寫這篇文章的時候,有一件事讓我印象深刻的是line 87 of JsonBackup.java。我認爲如果線程發送了不同的消息,明確表示已完成,那將是最好的。但我認爲這不是真正的問題。我這樣說是因爲一旦達到100%,進度對話框就會自行解散。
因此,如果這整個事情運行一次,一切都按預期工作。現在假設用戶離開應用程序,但操作系統決定將其保存在內存中。稍後用戶回來並想要創建新的備份。然後,該應用程序將無法正常工作,因爲進度一直保持在100%。如果你殺了應用程序,所以它完全卸載它將再次工作。所以我假設一些對象實例仍然在內存中,並且在重新運行時具有不清潔的狀態。但是對於我的生活,我無法找到正在發生的事情。作爲一個切線,我可能會補充:除了記事本教程外,這是我的第一個Android應用程序,以及bla di blah blah ...
我在這裏缺少什麼......?
只是爲了解釋更多像我這樣的人,如果您在Asynctask中使用進度欄,則可以將進度對話框的進度設置爲onPostExecute函數爲零以便下次使用。 – Behzad 2013-04-12 13:10:29