Android 使用启动画面加载繁重的主要数据
Android using Splash Screen to load heavy Main data
我有一个非常繁重的主活动 class,当您第一次安装该应用程序时,它会冻结,直到加载所有数据,我想在所有数据加载时显示我的启动画面 activity正在加载 Main Activity 并仅在 Main Activity 加载所有内容时显示我的 activity :
这是我当前的启动画面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();
}
}
我怎样才能做到这一点?
如果您的初始屏幕名为:spalsh.java
和你的主要 activity 命名为:MainActivity.java
首先你创建这个 class:
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();
}
关于对您问题的评论,您似乎正试图用您正在加载的数据更新 MainActivity 的 UI。您可以 query/load 启动画面 activity 上的数据,将其传递给意图,以便您可以在 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 格式的字符串传递。
我有一个非常繁重的主活动 class,当您第一次安装该应用程序时,它会冻结,直到加载所有数据,我想在所有数据加载时显示我的启动画面 activity正在加载 Main Activity 并仅在 Main Activity 加载所有内容时显示我的 activity :
这是我当前的启动画面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();
}
}
我怎样才能做到这一点?
如果您的初始屏幕名为:spalsh.java 和你的主要 activity 命名为:MainActivity.java 首先你创建这个 class:
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();
}
关于对您问题的评论,您似乎正试图用您正在加载的数据更新 MainActivity 的 UI。您可以 query/load 启动画面 activity 上的数据,将其传递给意图,以便您可以在 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 格式的字符串传递。