Java 从缓存中清除应用程序时,应用程序异常

Java 从缓存中清除应用程序时,应用程序异常,java,android,android-studio,Java,Android,Android Studio,大家好,谢谢阅读 这个问题是我在这里的原始帖子中的一个后续问题。 . 然而,我现在已经知道了发生了什么,但仍然需要一些关于如何解决它的建议 只是简单地回顾一下 基本上,我已经编写了一个媒体播放器应用程序,它使用了许多标准进度条,这些进度条是在播放列表中的每个曲目标题下以编程方式创建的。每个进度条都会跟踪其位于播放列表下方的歌曲的进度 我还在清单中使用以下代码来确保应用程序始终返回到相同的主活动 android:alwaysRetainTaskState="true" android:launch

大家好,谢谢阅读

这个问题是我在这里的原始帖子中的一个后续问题。 . 然而,我现在已经知道了发生了什么,但仍然需要一些关于如何解决它的建议

只是简单地回顾一下

基本上,我已经编写了一个媒体播放器应用程序,它使用了许多标准进度条,这些进度条是在播放列表中的每个曲目标题下以编程方式创建的。每个进度条都会跟踪其位于播放列表下方的歌曲的进度

我还在清单中使用以下代码来确保应用程序始终返回到相同的主活动

android:alwaysRetainTaskState="true"
android:launchMode="singleTask"
现在我遇到的问题是,当用户返回主屏幕,然后在30到60分钟后重新启动应用程序时,尽管其他一切都是一样的-如果进度条只是部分满了(即,曲目在中途暂停或停止),它会突然跳到100%

我发现,当应用缓存进程被其他应用从列表的末尾冲出时,就会发生这种情况。也就是说,我可以通过暂停应用程序,然后打开其他应用程序的加载,然后返回到它来立即重新创建问题。我还注意到,当它不再出现在缓存的进程列表中时,“oncreate”也会被调用,因此看起来应用程序已经关闭,它实际上是在重新创建活动。然而,奇怪的是,以前设置为某个值的进度条突然被重新创建,而进度设置为100%。进展

现在,如果正在重新创建它们,那么它们的进度应该默认为0?我甚至尝试在创建进度时将其设置为0(即myprogbar.setProgress=(0)),但这似乎没有什么区别

我怎么能

a、 确保在创建进度条时将其设置为0

b、 在oncreate期间检查应用程序是否已在运行并销毁其所有早期版本

c、 确保应用不会从缓存进程中删除

d、 解决这个问题的其他方法

我很感激我可以创建一个循环,在进度条被创建后循环并重置它们,但我试图了解进度条从何处获得100%的值,以及这与将应用程序推出缓存进程列表的关系


非常感谢

不幸的是,我从未弄清楚为什么会发生这种情况,但为了以防万一,其他人也会遇到同样的问题,我找到了解决办法

基本上,我设置了一个计时器来循环浏览屏幕上的所有进度条,并在活动加载时重置它们。这既不优雅也不聪明,但很有效

    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);
final Timer myTimer=new Timer();
myTimer.schedule(新TimerTask(){
@凌驾
公开募捐{
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
进度条;
对于(int i=0;i<(ProgressBars总数);i++){
temppb=(进度条)findviewbyd(i+1);
temppb.setProgress(0);
}
}
});
myTimer.cancel();
}
}, 50,50);