【发布时间】:2019-04-08 12:17:33
【问题描述】:
我有两个活动。 A 和 B。 A 开始 B。
在B.onCreate()我调用一个函数来下载我在那个活动中需要的文件: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 甚至onPostCreate,无论如何都不应该使用它们。但它们都不起作用。
编辑:
我意识到有一些方法可以解决这个问题,但我需要一种直接的方法。所有这些都与继承和库相关联,因此无法执行“将文件保存为全局变量”之类的操作。
我上面提供的代码的行为方式与我的相同,因此我需要完全解决此问题,而无需使用 AsyncTasks 或全局变量的解决方法。
编辑:
澄清。我明白了,当我在onCreate 中调用它时,DownloadFile() 会阻止 UI。但是,如下所示,当我在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() {
}
}
【问题讨论】:
-
能否提供B活动的创建代码
-
请分享您的代码,我认为,您在 oncreate() 中调用 DownloadFile,您是否将 DownloadFile() 位置从 onCreate() 更改为 onStart()?
-
给我们看一些代码,我们猜不出来。
-
或者您是否将 DownloadFile() 方法位置从 onCreate() 更改为 onResume()?
-
我已经添加了代码,但它非常简单,所以我不知道这是否有帮助。
标签: android android-activity oncreate