exh*_*uma 5 multithreading android progress-bar
在Android应用程序中,我在一个单独的线程中运行任务.在线程运行时,它会更新主窗口中的进度条,让用户知道发生了什么.问题是,如果用户第二次启动线程,则不会重置进度条.没有做任何事情,它只会100%坐下.
整个源代码可以在github上找到.以BackupThread 和JsonBackup(主类)为例.请注意,"RestoreThread"显示相同的行为,但我认为在这两种情况下问题都是相同的.
快速浏览:
在JsonBackup.java的第300行,我打开一个新的ProgressDialog.由于它是一个新实例,我假设所有都已正确初始化.在我当前的工作副本中,我添加了一行将进度设置为"0",但这并未改变任何内容.在同一个块中,我创建备份线程并运行它.
下一段感兴趣的代码是线程将其进度传回主应用程序的时刻.这发生在BackupThread.java的第185行附近.
该消息在JsonBackup.java的第80行处理,它将更新进度条.
到目前为止代码演练.写这篇文章时让我感到震惊的是JsonBackup.java的第87行.我认为最好是线程发送不同的消息,明确说明它已经完成.但我认为这不是真正的问题.我这样说是因为进度对话框一旦达到100%就会正确地解散.
所以,如果整个事情运行一次,一切都按预期工作.现在假设用户离开了应用程序,但操作系统决定将其加载到内存中.稍后用户回来并想要创建新备份.然后应用程序将无法正常工作,因为进度挂起100%.如果你杀了应用程序,所以它完全卸载它将再次工作.所以我假设一些对象实例仍在内存中并且在重新运行时具有不洁状态.但对于我的生活,我无法找到正在发生的事情.作为一个切线我可能会补充:除了记事本教程,这是我的第一个Android应用程序,而bla di blah blah ...
我在这里想念的是什么......?
被Dialog缓存Activity,这是预期的行为。
选项有:
onPrepareDialog(..)以重置其状态 removeDialog(..)再次显示之前先致电show(),dismiss()对于常用的,我通常选择#1,Dialog对于罕见的,我通常选择#3。
| 归档时间: |
|
| 查看次数: |
2984 次 |
| 最近记录: |