Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onCreate和AsyncTask延迟_Android_Performance_Android Layout_Android Asynctask_Oncreate - Fatal编程技术网

Android onCreate和AsyncTask延迟

Android onCreate和AsyncTask延迟,android,performance,android-layout,android-asynctask,oncreate,Android,Performance,Android Layout,Android Asynctask,Oncreate,我的应用程序需要加载一些JSON才能在UI上显示任何内容,JSON决定了应用程序的主题设置方式 虽然我通常不喜欢它们,但需要一个启动屏幕/加载屏幕,这样用户就不必看到界面的每个元素都改变颜色等。然而,我的问题是,当我加载我的应用程序时,我可以在我的进度对话框启动前几秒钟看到默认样式。我可以看到默认的暗渐变全息背景,带有一个包含我的应用程序标题的操作栏。如果我将操作栏隐藏在XML中,我将无法在以后将其添加回XML中,并在对其执行操作时获取nullpointerexceptions 在设置Async

我的应用程序需要加载一些JSON才能在UI上显示任何内容,JSON决定了应用程序的主题设置方式

虽然我通常不喜欢它们,但需要一个启动屏幕/加载屏幕,这样用户就不必看到界面的每个元素都改变颜色等。然而,我的问题是,当我加载我的应用程序时,我可以在我的进度对话框启动前几秒钟看到默认样式。我可以看到默认的暗渐变全息背景,带有一个包含我的应用程序标题的操作栏。如果我将操作栏隐藏在XML中,我将无法在以后将其添加回XML中,并在对其执行操作时获取
nullpointerexceptions

在设置
AsyncTask
之前,我已经尝试在
onCreate()的最开始启动启动屏幕,并且还尝试在
onPreExecute()中启动它

理想情况下,我希望能够在应用程序启动时立即显示加载对话框,或者如果确实需要延迟,我只希望用户看到黑色背景

有没有一种完全不同的方法,我没有提到过


谢谢。

您看到的是一个以您的主题为主题的空活动。 因此,您无能为力-如果引导活动需要一些时间,就会显示出来

您可以在活动中设置特殊主题,并将飞溅图像设置为windowBackground(window decor视图的背景),如果不需要,请稍后删除背景

<style name="SplashScreenActivityTheme" parent="android:Theme.Light.NoTitleBar">
        <item name="android:windowBackground">@drawable/splash_image</item>
</style>

@可绘制/飞溅图像
你可以阅读更多关于它的内容


还有一个注意事项:android通常不使用闪屏。你可以使用一些进度指示器,如PrimessBar或者其他的东西,如果你的设计者不反对它

< P>我会考虑在这里使用片段。您可以在启动屏幕上添加一个片段,并在活动首次启动时加载该片段。然后,一旦json加载/解析完成,就可以使用FragmentTransaction将第二个“屏幕”作为第二个片段加载,并将其替换为加载屏幕。这也可以让你做一些漂亮的过渡动画

这可以通过njzk2的评论来完成,有两个独立的活动。本质上,您将在“加载活动”期间执行异步解析任务,并将结果存储为可序列化对象,该对象可以使用Intent extra传递给其他活动,或者您可以将json存储到SharedReferences字典中,并在第二个活动中引用它


你可能还会发现,这不是每次创业都要做的事情。如果是这样,您应该将可序列化文件保存到磁盘以便跳过解析,或者保存到共享首选项以便在其中引用它(如果存在)。

将单独的活动用作SplashScreen我如何在my(current)中设置样式和加载内容独立启动屏幕活动的MainActivity?使用findViewbyid将yur布局的主要元素连接到源代码,并使用setvisible(GONE)将其隐藏在源代码中。在AsyncTask的postexecute中取消隐藏它有点复杂,有时启动屏幕的映像可能会更改,但它仍然会在文件系统上使用本地映像。因此,用xml设置背景(本质上是硬编码)并不合适。谢谢你的回复和文章,我现在读了一遍。