首次启动应用时,应用必须从服务器下载相当多的数据,如位置,条件信息等。我想尽可能高效地展示启动画面,但即使我没有Async Task它也不能快速工作。你在闪屏30秒,只在第一次运行时,它不到1.5秒。 我的问题是......我怎样才能开始后台工作并转到下一个活动,而不是在SplashActivity举办30年
public class ActivitySplash extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// if (MyFunctionsRealm.differsTheLocationsNumberInRealm()) { //Če najdeš boljšo rešitev super :)
startAsyncTaskJsonCodeRegisters();
// }
Realm realm = Realm.getDefaultInstance();
RealmUser_Personal user = MyFunctionsRealm.getLoggedInUser();
if (user != null) {
API_Network_Service.checkUpdate(user.getId(), "user", user);
}
realm.close();
// MyFunctions.goToActivityAfter(1500, this, ActivityMain.class);
MyFunctions.fromActivityToActivity(this, ActivityMain.class);
}
private void startAsyncTaskJsonCodeRegisters() {
new API_Network_Service.getLocations_Criteria(getApplicationContext()).execute();
}
}
获取位置条件功能相当大,但基本上我从url下载文本,像json一样解析它,然后只处理那个json文件,并将其保存到Realm数据库。
这就是我如何保存新内容的一个例子。
Realm realm = Realm.getDefaultInstance();
final SloveniaLocation location= realm.where(SloveniaLocation.class).equalTo("id", id).equalTo("name", ime).equalTo("parent_id", parent_id).findFirst();
realm.close();
if (location == null) {
new Async_Save_Location(id, ime, position, parent_id).execute();
}
Async_Save_Location没什么特别的,只有这个和构造函数,getter和setter:
@Override
protected Void doInBackground(Void... params) {
Realm realm = Realm.getDefaultInstance();
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
SloveniaLocation nova_lokacija = realm.createObject(SloveniaLocation.class);
nova_lokacija.setId(id);
nova_lokacija.setIme(ime);
nova_lokacija.setParent_id(parent_id);
nova_lokacija.setPosition(position);
}
});
realm.close();
return null;
}
对于SplashScreen,我使用的是主题,因此它不显示黑屏:
<style name="ThemeSplash" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/drawable_splashcreen</item>
</style>
有什么想法吗?