gpt4 book ai didi

android - 在显示之前在后台加载 Activity

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:36:18 26 4
gpt4 key购买 nike

是否可以在将 View 切换到该 Activity 之前在后台加载新 Activity ?

例如,我想要一个被调用并显示启动画面的斜线屏幕 Activity 。显示此初始屏幕时,加载下一个 Activity ,加载完成后(当它的 onCreate() 完成时),初始屏幕 Activity 结束,并显示新 Activity 。

我知道另一种选择是在新 Activity 中显示启动画面,并在删除启动图像之前使用异步任务加载所有数据……但我也坚持使用这种方法。该 Activity 首先必须加载大量数据,然后它必须根据该数据动态添加 GUI 元素。 GUI 完全加载后,我想删除启动画面。问题是我无法从 doInBackground() 访问 UI 线程。如果我无法从 doInBackground 更新 UI,我该如何在闪屏后面创建我的 Activity ?我知道 onProgressUpdate() 可以访问 UI 线程,但我不知道如何实现它。

有什么想法吗?谢谢!

最佳答案

由于您没有代码示例,我不确定您正在加载哪种数据以及您如何根据数据动态配置 UI,但我会尽可能多地回答能够。因此,答案可能听起来有点笼统。

首先,定义 2 个布局 xml 文件 - 一个用于初始屏幕,一个用于“主要” Activity 。所以你最终会得到/res/layout/splash_screen.xml 和/res/layout/main.xml

在您的 onCreate() 中,加载 splash_screen 布局:

setContentView(R.layout.splash_screen);

在您的异步任务中,您将加载您需要执行的任何数据,并将所有这些数据保存在某种数据结构中。为了示例的缘故,我将使用 String 的 LinkedList。

private class MyTask extends AsyncTask<Uri, Integer, List<String>> {

@Override
protected List<String> doInBackground(Uri... params) {
List<String> myList = new LinkedList<String>();
// load up the list with data you are trying to get
myList.add("foo");
myList.add("bar");
// whatever you return here will be passed in as a parameter to the onPostExecute()
return myList;
}

@Override
protected void onPostExecute(List<String> result) {
setContentView(R.layout.main2);
// set layout elements with data that from the result
TextView myTextView = (TextView) findViewById(R.id.some_label);
myTextView.setText(result.get(0));
// or just call some function you defined in your activity instead
}
}

所以基本上,有 2 个不同的布局文件并使用 splash_screen 布局,并使用异步任务加载数据并将其保存在您定义的某些数据结构中,并使用该数据结构在 onPostExecute() 中加载您的 UI 元素在使用 setContentView() 更改回主布局后。

特别说明:使用上面的代码,如果旋转屏幕,它将再次显示启动画面并重新加载所有数据。如果你想避免这种情况,你可以使用 onSaveInstanceState() 并在 outBundle 中保存你想要的任何数据,然后在 onCreate 的 savedInstanceState 包中读回该数据并加载 UI 元素。如果您想了解更多关于处理旋转的信息,这将需要一个单独的线程(或者您可以搜索它)。

关于android - 在显示之前在后台加载 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13037287/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com