Android onCreate和AsyncTask延迟

时间:2013-02-15 15:20:27

标签: android performance android-layout android-asynctask oncreate

我的应用程序需要加载一些JSON才能在UI上显示任何内容,JSON确定应用程序应该如何主题。

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

我尝试在设置onCreate()之前在AsyncTask的最开头启动启动画面,并尝试在onPreExecute()中启动它。

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

有没有完全不同的做法,我没有提到过?

感谢。

2 个答案:

答案 0 :(得分:1)

我实际上考虑在这里使用片段。您可以为启动屏幕创建一个片段,并在您的活动首次启动时加载该片段。然后,一旦你的json加载/解析完成,你可以使用FragmentTransaction将第二个'screen'作为第二个片段加载并让它替换你的加载屏幕。这也可以让你做一些漂亮的过渡动画。

这可以通过njzk2的评论来完成,有两个独立的活动。基本上,你会在'加载活动'期间解析AsyncTask并将结果存储为可序列化的对象,可以使用Intent extra传递给你的其他活动,或者你可以将json存储到SharedPreferences字典中并引用你的第二项活动。

您可能还会发现,这是您每次启动时都不必执行的操作。如果是这样,您应该将serializable保存到磁盘,以便您可以跳过解析或共享首选项,这样您就可以在那里引用它。

答案 1 :(得分:0)

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

您可以做的是在您的活动上设置特殊主题,并将splash-image设置为windowBackground(窗口装饰视图的背景),如果您不需要,可以在以后删除背景。

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

有关它的更多信息,请阅读here in fresh post of Cyril Mottier

再一次注意:android通常不使用启动画面。如果您的设计师不反对,您可以使用一些进度指示器,例如ProgressBar或其他东西