大家好,感谢您的阅读。
这个问题是我原帖中的一个问题。 https://stackoverflow.com/questions/25828412/main-activity-progress-bars-and-strike-through-text-reset-after-a-period-of-app。但是,我现在已经研究了发生了什么,但仍然需要一些如何解决它的建议。
回顾一下......
基本上我编写了一个媒体播放器应用程序,它使用了许多标准进度条,这些进度条是以编程方式在播放列表中的每个曲目标题下创建的。每个进度条都会跟踪播放列表中位于其下方的歌曲的进度。
我还在清单中使用以下代码,以确保应用程序始终返回到相同的主要活动。
android:alwaysRetainTaskState="true"
android:launchMode="singleTask"
现在我遇到的问题是,当用户返回主屏幕然后在30到60分钟之后重新启动应用程序,尽管其他所有内容都是如此 - 如果进度条仅部分已满(即赛道已经暂停或中途停止了)突然之间它已经跳到了100%。
我发现,当应用程序缓存进程被其他应用程序排除在列表末尾时会发生这种情况。即我可以通过暂停应用程序然后打开其他应用程序然后返回到它来立即重新创建问题。我还注意到,当它不再出现在缓存进程列表中时,“oncreate”也会被调用,因此看起来应用程序已经关闭并且它本质上重新创建了活动。然而,奇怪的是,先前设置为某个值的进度条突然重新创建,进度设置为100%。进展
现在如果他们正在被重建,他们的进度肯定会默认为0?我甚至尝试将它们创建为0时设置进度(即myprogbar.setProgress =(0)但这似乎没有区别。
我怎么能......
一个。确保在创建进度条时将其设置为0?
湾在oncreate期间检查应用程序是否已经运行并销毁以前的所有版本?
℃。确保应用程序不会从缓存的进程中删除?
d。解决问题的其他一些方法。
我很欣赏我可能会创建一个循环,在创建进度条之后循环它们并重置它们但我正在尝试了解进度条在哪里获得100%这个值以及它与应用程序的关系被推出缓存的进程列表。
非常感谢
答案 0 :(得分:0)
不幸的是,我从来没有弄清楚为什么会发生这种情况,但为了防止其他人遇到同样的问题我找到了解决方法。
基本上我设置了一个计时器来遍历屏幕上的所有进度条,并在活动加载时重置它们。不优雅或聪明,但它的工作原理。
final Timer myTimer = new Timer();
myTimer.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
ProgressBar temppb;
for (int i = 0; i < (totalnumberofprogressbars); i++) {
temppb = (ProgressBar) findViewById(i + 1);
temppb.setProgress(0);
}
}
});
myTimer.cancel();
}
}, 50,50);