启动并显示“活动”后如何执行操作

时间:2019-04-08 12:17:34

标签: android android-activity oncreate

我有两个活动。 ABA开始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的处理方式有关。

我尝试将onCreateonStart的{​​{1}}从我在this answer上看到的切换。但是,同样的事情发生了。

我想切换活动,并且仅显示 之后onResume,我希望开始下载,但是我不知道如何。

编辑: 根据要求,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的{​​{1}}切换,无论如何都不应该使用。但是它们都不起作用。

编辑:

我知道有一些方法可以解决此问题,但我需要直接的方法。所有这些都与继承和库相关联,因此无法执行“将文件另存为全局变量”之类的事情。

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

编辑: 澄清。我明白了,当我在onResume中调用它时,onPostCreate会阻止UI。但是,如下所示,当我在onCreate中调用它时,也会发生同样的事情。据我了解,并按照the lifecycle所述,可见生命周期应在DownloadFile()之后开始,但似乎并没有这样做。

onResume

3 个答案:

答案 0 :(得分:2)

根据Activity Lifecycle

onStart()在活动对用户可见时调用。 如果活动进入前台,则紧跟onResume(),如果活动被隐藏,则紧跟其后;如果活动被隐藏,则紧跟onStop()。

您可以尝试调用您的DownloadFile()方法在B活动Thread中创建背景onCreate()(以使下载不会阻止UI),并开始在{ ProgressBaronResume()中。

编辑:看看this post

编辑2 :如果您不想使用全局变量,则可以在onStart()中调用DownloadFile()方法,显示onCreate(),然后做所有的事情ProgressBar,包括解雇onPostDelayed()

编辑3 :在同一ProgressBar上下载文件时,您可能无法显示动画的ProgressBar,因为下载会阻止整个UI。

编辑4

  • 下一步是您的动作的真正进展:

    Thread呼叫A

    startActivity()中的onCreate()方法被调用

    B已在ProgressBar中设置,但仅显示在 onCreate()

    •方法onResume()已启动并阻止了整个用户界面

    •由于以下原因,未调用方法DownloadFile()onStart() onResume()个执行中。这就是为什么您在屏幕上停留 DownloadFile()

    Activity A完成,方法DownloadFile()onStart()被呼叫。 onResume()被解雇了。

答案 1 :(得分:0)

您可以做的是在活动A中创建进度条,因此可以确保在您的意图开始时调用它。 在B中下载文件,然后仅将其取消。

如果它仍然不能像这样工作,您可以显示一些代码吗? 如果使用调试模式会怎样?

答案 2 :(得分:0)

You can try using AsyncTask, show your progressBar in onPreExecute() method, download your file in doInBackground() and hide the progress bar in onPostExecute(),

Than you can execute this AsyncTask from your Activity B's onCreate() method.

Hope this helps.

Ankit Dubey