Android 启动屏幕
Android launch screen
我正在构建一个 Android 应用程序,它根据 firebase 值在启动时打开不同的活动。现在我有一个 activity,只有我的徽标决定在其 onCreate
方法中转到哪个 activity。问题是由于冷启动,我在启动我的应用程序时仍然出现半秒钟的白屏。有没有办法创建一个带有我的徽标的启动屏幕,该屏幕将根据返回的 firebase 值打开相应的 activity 并替换默认的白色屏幕?有点像 WhatsApp 或 Instagram 这些天正在做的事情。我知道我可以在 styles.xml 中更改 window 背景,但这并不理想,因为它会在任何地方更改背景,并且仍然无法确定在开始时打开哪个 activity
构建一个包含您的徽标的启动画面。
在后台进行 firebase 服务器(或任何服务器)调用非常重要。
建议您将 AsyncTask 与 CallBack 一起使用。
基本示例:
回调class:
public interface CallBack_TaskCompleted {
void taskIsCompleted(boolean success);
}
异步任务:
private static class DownloadDataAsync extends AsyncTask<String, Integer, String> {
CallBack_TaskCompleted callBack_taskCompleted;
String someData = "";
public DownloadDataAsync(String someData, CallBack_TaskCompleted callBack_taskCompleted) {
this.callBack_taskCompleted = callBack_taskCompleted;
this.someData = someData;
}
@Override
protected String doInBackground(String... params) {
// Some download staff
if (callBack_taskCompleted != null)
callBack_taskCompleted.taskIsCompleted();
return "Executed";
}
@Override
protected void onPostExecute(String result) {
MyUtils.logd("TAG", "onPostExecute");
}
@Override
protected void onPreExecute() {
MyUtils.logd("TAG", "onPreExecute");
}
@Override
protected void onProgressUpdate(Integer... values) {
MyUtils.logd("TAG", "onProgressUpdate" + values[0]);
}
}
在你的activity中:
DownloadDataAsync downloadDataAsync = new DownloadDataAsync("DATA", new CallBack_TaskCompleted() {
@Override
public void taskIsCompleted() {
// go to another activity
}
});
你不需要改变所有windows的背景。为了即时显示启动画面,请考虑为启动画面使用自定义主题 activity。像这样:
Styles.xml
<style name="SplashTheme" parent="AppTheme">
<item name="android:windowBackground">@drawable/splash_drawable</item>
</style>
启动画面Activity屏幕布局
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/splashLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:screenOrientation="portrait"
android:theme="@style/SplashTheme">
<ProgressBar
android:id="@+id/splash_activity_progress"
style="@style/Widget.AppCompat.ProgressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:indeterminate="true"/>
</FrameLayout>
这将为您提供一个带有可绘制对象(应用程序徽标)的启动画面。进度条让用户知道正在进行一些后台操作。
要查询 firebase,您应该使用 AsyncTask/Coroutine/Executor 以便在后台线程中执行操作并且不会阻塞 UI 线程。这对于避免 ANR 很重要。
考虑到存在 AsyncTask getting deprecated 的可能性,我建议您考虑使用枯萎的 Kotlin coroutines/Java 执行器框架而不是 AsyncTasks。
我正在构建一个 Android 应用程序,它根据 firebase 值在启动时打开不同的活动。现在我有一个 activity,只有我的徽标决定在其 onCreate
方法中转到哪个 activity。问题是由于冷启动,我在启动我的应用程序时仍然出现半秒钟的白屏。有没有办法创建一个带有我的徽标的启动屏幕,该屏幕将根据返回的 firebase 值打开相应的 activity 并替换默认的白色屏幕?有点像 WhatsApp 或 Instagram 这些天正在做的事情。我知道我可以在 styles.xml 中更改 window 背景,但这并不理想,因为它会在任何地方更改背景,并且仍然无法确定在开始时打开哪个 activity
构建一个包含您的徽标的启动画面。 在后台进行 firebase 服务器(或任何服务器)调用非常重要。 建议您将 AsyncTask 与 CallBack 一起使用。
基本示例:
回调class:
public interface CallBack_TaskCompleted {
void taskIsCompleted(boolean success);
}
异步任务:
private static class DownloadDataAsync extends AsyncTask<String, Integer, String> {
CallBack_TaskCompleted callBack_taskCompleted;
String someData = "";
public DownloadDataAsync(String someData, CallBack_TaskCompleted callBack_taskCompleted) {
this.callBack_taskCompleted = callBack_taskCompleted;
this.someData = someData;
}
@Override
protected String doInBackground(String... params) {
// Some download staff
if (callBack_taskCompleted != null)
callBack_taskCompleted.taskIsCompleted();
return "Executed";
}
@Override
protected void onPostExecute(String result) {
MyUtils.logd("TAG", "onPostExecute");
}
@Override
protected void onPreExecute() {
MyUtils.logd("TAG", "onPreExecute");
}
@Override
protected void onProgressUpdate(Integer... values) {
MyUtils.logd("TAG", "onProgressUpdate" + values[0]);
}
}
在你的activity中:
DownloadDataAsync downloadDataAsync = new DownloadDataAsync("DATA", new CallBack_TaskCompleted() {
@Override
public void taskIsCompleted() {
// go to another activity
}
});
你不需要改变所有windows的背景。为了即时显示启动画面,请考虑为启动画面使用自定义主题 activity。像这样:
Styles.xml
<style name="SplashTheme" parent="AppTheme">
<item name="android:windowBackground">@drawable/splash_drawable</item>
</style>
启动画面Activity屏幕布局
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/splashLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:screenOrientation="portrait"
android:theme="@style/SplashTheme">
<ProgressBar
android:id="@+id/splash_activity_progress"
style="@style/Widget.AppCompat.ProgressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:indeterminate="true"/>
</FrameLayout>
这将为您提供一个带有可绘制对象(应用程序徽标)的启动画面。进度条让用户知道正在进行一些后台操作。
要查询 firebase,您应该使用 AsyncTask/Coroutine/Executor 以便在后台线程中执行操作并且不会阻塞 UI 线程。这对于避免 ANR 很重要。
考虑到存在 AsyncTask getting deprecated 的可能性,我建议您考虑使用枯萎的 Kotlin coroutines/Java 执行器框架而不是 AsyncTasks。