如何在Activity启动和显示后执行操作

问题描述 投票:0回答:3

我有两个活动。 ABA开始B

B.onCreate()I中调用一个函数来下载我在该活动中需要的文件:DownloadFile()

为此,B有一个进度条,我在下载完成后立即隐藏。

我的预期是以下进展:

  • AstartActivity()
  • 显示B B展示了progressbar BonCreate B.DownloadFile()被称为 B隐藏progressBar

但实际发生的是:

  • AstartActivity() 屏幕卡在ABonCreate B.DownloadFile()被称为 B从未展示过progressBar
  • 显示qazxsw poi,文件已经下载,立即隐藏进度条。

现在,当我在相同的进程中做同样的事情,但不是下载文件,我流式传输,它一切正常。但这可能与B如何处理事情有关。

我尝试从MediaPlayer上看到的onCreateonStart切换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() { } } 切换为onCreateonStart甚至onResume,无论如何都不应该使用它。但它们都不起作用。

编辑:

我意识到有一些方法可以解决这个问题,但我需要一个直接的方法。所有这一切都与继承和库相关联,所以做“将文件保存为全局变量”这样的事情是行不通的。

我上面提供的代码与我的代码行为相同,所以我需要完全修复此问题,而无需使用AsyncTasks或全局变量进行解决方法。

编辑:澄清。我知道,当我在onPostCreate中调用它时,onCreate会阻止UI。但是,如下所示,当我在DownloadFile()中调用它时,会发生同样的事情。正如我所理解的那样,并且正如它在onResume中所写的那样,可见的生命周期应该在the lifecycle之后开始,但似乎并没有这样做。

onStart
android android-activity oncreate
3个回答
2
投票

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:

  • 接下来是您行动的真正进展: •ThreadA •在startActivity()中调用onCreate()方法 •BProgressBar中设置,但仅在onCreate()中显示 •方法onResume()启动并阻止整个UI •方法DownloadFile()onStart()因为onResume() exectuing而没有被调用。这就是为什么你卡在DownloadFile()的屏幕上 •Activity A完成,方法DownloadFile()onStart()被称为。 onResume()被解雇了。

0
投票

你可以做的是在活动A中创建进度条,这样你就可以确保在你的意图开始时调用它。在B中下载文件,然后只取消它。

如果它还没有像这样工作,你能否展示一些代码?如果您使用调试模式会发生什么?


0
投票

您可以尝试使用AsyncTask,在onPreExecute()方法中显示progressBar,在doInBackground()中下载文件并隐藏onPostExecute()中的进度条,

您可以从Activity B的onCreate()方法执行此AsyncTask。

希望这可以帮助。

Imit Dubey

© www.soinside.com 2019 - 2024. All rights reserved.