我有两个活动。 A
和B
。 A
开始B
。
在B.onCreate()
I中调用一个函数来下载我在该活动中需要的文件:DownloadFile()
。
为此,B
有一个进度条,我在下载完成后立即隐藏。
我的预期是以下进展:
A
称startActivity()
B
B
展示了progressbar
B
称onCreate
B.DownloadFile()
被称为
B
隐藏progressBar
但实际发生的是:
A
称startActivity()
屏幕卡在A
上
B
称onCreate
B.DownloadFile()
被称为
B
从未展示过progressBar
现在,当我在相同的进程中做同样的事情,但不是下载文件,我流式传输,它一切正常。但这可能与B
如何处理事情有关。
我尝试从MediaPlayer
上看到的onCreate
或onStart
切换onResume
。但同样的事情发生了。
我想切换活动,只有在显示this answer后,我才想开始下载,但我不知道如何。
编辑:根据要求,B
的代码
B
正如我所说的,我已经尝试将package com.skillcademy360.lite.activities
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
class DownloadActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
DownloadFile()
}
fun DownloadFile() {
}
}
切换为onCreate
和onStart
甚至onResume
,无论如何都不应该使用它。但它们都不起作用。
编辑:
我意识到有一些方法可以解决这个问题,但我需要一个直接的方法。所有这一切都与继承和库相关联,所以做“将文件保存为全局变量”这样的事情是行不通的。
我上面提供的代码与我的代码行为相同,所以我需要完全修复此问题,而无需使用AsyncTasks或全局变量进行解决方法。
编辑:澄清。我知道,当我在onPostCreate
中调用它时,onCreate
会阻止UI。但是,如下所示,当我在DownloadFile()
中调用它时,会发生同样的事情。正如我所理解的那样,并且正如它在onResume
中所写的那样,可见的生命周期应该在the lifecycle之后开始,但似乎并没有这样做。
onStart
据package com.skillcademy360.lite.activities
import android.os.Bundle
import android.support.v7.app.AppCompatActivity
class DownloadActivity: AppCompatActivity() {
override fun onResume(savedInstanceState: Bundle?) {
super.onResume(savedInstanceState)
DownloadFile()
}
fun DownloadFile() {
}
}
说:
当活动变得对用户可见时,Activity Lifecycle呼叫。如果活动到达前景,则跟随onStart()
;如果活动变为隐藏,则跟随onStop()。
您可以尝试调用您的onResume()
方法创建背景DownloadFile()
(因此下载无法阻止UI)在B活动Thread
并开始在onCreate()
或ProgressBar
中显示您的onResume()
。
编辑:看看onStart()
编辑2:如果你不想使用全局变量那么你可以在this post中调用你的DownloadFile()
方法,显示onCreate()
,然后做你所有的东西ProgressBar
包括onPostDelayed()
的解散
编辑3:您可能无法在同一个ProgressBar
下载文件时显示动画ProgressBar
,因为您的下载将阻止整个UI。
编辑4:
Thread
称A
•在startActivity()
中调用onCreate()
方法
•B
在ProgressBar
中设置,但仅在onCreate()
中显示
•方法onResume()
启动并阻止整个UI
•方法DownloadFile()
和onStart()
因为onResume()
exectuing而没有被调用。这就是为什么你卡在DownloadFile()
的屏幕上
•Activity A
完成,方法DownloadFile()
和onStart()
被称为。 onResume()
被解雇了。你可以做的是在活动A中创建进度条,这样你就可以确保在你的意图开始时调用它。在B中下载文件,然后只取消它。
如果它还没有像这样工作,你能否展示一些代码?如果您使用调试模式会发生什么?
您可以尝试使用AsyncTask,在onPreExecute()方法中显示progressBar,在doInBackground()中下载文件并隐藏onPostExecute()中的进度条,
您可以从Activity B的onCreate()方法执行此AsyncTask。
希望这可以帮助。
Imit Dubey