Android 使用 Splash Screen 加载繁重的 Main 数据

Posted

技术标签:

【中文标题】Android 使用 Splash Screen 加载繁重的 Main 数据【英文标题】:Android using Splash Screen to load heavy Main data 【发布时间】:2020-12-04 06:05:51 【问题描述】:

我有一个非常重的 Main Acitivty 类,当您第一次安装应用程序时,它会冻结,直到加载所有数据,我想在 Main Activity 中加载所有数据时显示我的 Splash Screen 活动并显示我的活动仅当 Main Activity 已加载所有内容时:

这是我当前的初始屏幕活动,目前它只这样做:

public class SplashActivity extends AppCompatActivity 

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);

    Intent intent = new Intent(this, MainActivity.class);
    startActivity(intent);
    finish();


我怎样才能做到这一点?

【问题讨论】:

“冻结直到加载所有数据”这听起来像是一些糟糕的用户体验,也许您应该尝试通过显示加载或进度指示器来改善体验,而不是将问题隐藏在飞溅后面?作为用户,我怎么知道应用程序正在做什么? 如果您想在加载所有内容时显示启动画面,为什么不在启动画面活动中进行加载? @a_local_nobody 如何加载启动活动中的所有内容? 通过将代码从您的主要活动移动到您的启动活动:) 但是......如何从另一个活动初始化 Main Acitivty 的元素?我很困惑 【参考方案1】:

关于您的问题的 cmets,您似乎正在尝试使用正在加载的数据更新 MainActivity 的 UI。您可以在启动活动中查询/加载数据,将其传递给意图,以便您可以在 MainActivity 的 onCreate 中收集它,或者将所有数据保存到 SharedPreferences 并从 MainActivity 访问它。

在 SplashActivity 中:

Intent intent = new Intent(this, MainActivity.class);
// inside data loading completion callback or after synchronous data gathering methods
intent.putExtra("key","value");
startActivity(intent); 

在 MainActivity 的 onCreate 方法中

Bundle extras = intent.getExtras();
String value = extras.getString("key"); 

如果需要,您可以将模型作为 json 格式的字符串传递。

【讨论】:

【参考方案2】:

如果您的启动画面命名为:spalsh.java 您的主要活动名为:MainActivity.java 首先你创建这个类:

public class SliderPrefManager 
private Context context;
private SharedPreferences pref;
private static final String Pref_Name="slider-pref";
private static final String Key_Start="startslider";
public SliderPrefManager(Context context)
    this.context = context;
    pref = context.getSharedPreferences(Pref_Name,Context.MODE_PRIVATE);

public Boolean startSlider()
    return pref.getBoolean(Key_Start,true);

public void setStartSlider(Boolean start)
    pref.edit().putBoolean(Key_Start,start).apply();

并在您的初始屏幕中添加以下代码:

sliderPrefManager = new SliderPrefManager(login_Activity.this);
            sliderPrefManager.setStartSlider(false);

并且您检查了视图斜线屏幕的布尔值,在您的 mainActivity 中添加此代码:

if (sliderPrefManager.startSlider()) 
        Intent intent = new Intent(choise_way_sec.this, login_Activity.class);
        startActivity(intent);

        finish();

    

【讨论】:

以上是关于Android 使用 Splash Screen 加载繁重的 Main 数据的主要内容,如果未能解决你的问题,请参考以下文章

xml Splash Screen for android。正确的方式

react-native-splash-screen 插件 android 系统app崩溃问题

(Android)react-native-splash-screen实践-解决react-native打包好后启动白屏的问题

一起Talk Android吧(第三百一十回:创建程序启动界面Splash Screen一)

react-native-splash-screen集成实践(ios & android)

Task :rn-splash-screen:verifyReleaseResources FAILED