我正在构建一个Android应用程序,该应用程序在启动时会根据firebase的值打开不同的活动。现在,我有一个仅带有徽标的活动,该活动可以通过其onCreate
方法确定要进行的活动。问题是,由于冷启动,启动应用程序时我仍然会出现白屏半秒钟。有没有一种方法可以创建带有我的徽标的启动屏幕,该启动屏幕将根据返回的Firebase值打开相应的活动,并将替换默认的白屏? Kinda喜欢这些天WhatsApp或Instagram在做什么。我知道我可以在styles.xml中更改窗口背景,但这并不理想,因为它随处更改背景,并且仍然无法确定在开始时打开哪个活动
Android启动屏幕
•
问答
lblwb 回答:Android启动屏幕
构建一个包含您的徽标的启动屏幕。 在后台进行Firebase服务器(或任何服务器)的调用非常重要。 建议您将AsyncTask与CallBack一起使用。
基本示例:
回叫类:
public interface CallBack_TaskCompleted {
void taskIsCompleted(boolean success);
}
AsyncTask:
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]);
}
}
在您的活动中:
DownloadDataAsync downloadDataAsync = new DownloadDataAsync("DATA",new CallBack_TaskCompleted() {
@Override
public void taskIsCompleted() {
// go to another activity
}
});
,
您无需更改所有窗口的背景。为了立即显示初始屏幕,请考虑仅将自定义主题用于初始屏幕活动。像这样:
Styles.xml
<style name="SplashTheme" parent="AppTheme">
<item name="android:windowBackground">@drawable/splash_drawable</item>
</style>
飞溅活动屏幕布局
<?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>
这将为您提供一个带有drawable(应用程序徽标)的启动屏幕。进度栏让用户知道正在进行一些后台操作。
要查询firebase,您应该使用AsyncTask / Coroutine / Executor,以便在后台线程中执行该操作并且不会阻塞UI线程。这对于避免ANR很重要。
考虑到AsyncTask getting deprecated的可能性,我建议您考虑使用枯萎的Kotlin协程/ Java执行程序框架,而不要使用AsyncTasks。