SplashScreen和后台工作(ASYNC)

时间:2016-08-21 00:13:21

标签: android json android-asynctask splash-screen

首次启动应用时,应用必须从服务器下载相当多的数据,如位置,条件信息等。我想尽可能高效地展示启动画面,但即使我没有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>

有什么想法吗?

0 个答案:

没有答案