Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SplashScreen和后台工作(异步)_Android_Json_Android Asynctask_Splash Screen - Fatal编程技术网

Android SplashScreen和后台工作(异步)

Android SplashScreen和后台工作(异步),android,json,android-asynctask,splash-screen,Android,Json,Android Asynctask,Splash Screen,当您第一次启动应用程序时,应用程序必须从服务器下载大量数据,如位置、标准信息等。我希望尽可能高效地显示splashscreen,但即使我不执行异步任务,它也无法快速工作。您在启动屏幕上的时间为30秒,仅在第一次运行时小于1.5秒。 我的问题是。。。我如何开始背景工作并进入下一个活动,而不必在Splash活动中等待30秒 public class ActivitySplash extends AppCompatActivity { @Override protected void onCreate

当您第一次启动应用程序时,应用程序必须从服务器下载大量数据,如位置、标准信息等。我希望尽可能高效地显示splashscreen,但即使我不执行异步任务,它也无法快速工作。您在启动屏幕上的时间为30秒,仅在第一次运行时小于1.5秒。 我的问题是。。。我如何开始背景工作并进入下一个活动,而不必在Splash活动中等待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();
}
}

GetLocationCriteria函数相当大,但基本上我从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_位置没有什么特别的,只是这个和构造函数、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>

@可抽出式/可抽出式防溅屏

有什么想法吗?

点击这里-----您只需取消选中该框(启用即时运行…)确保在gradle---->defaultConfig中添加(multiDexEnabled true)--否则会出现错误-----您发现应用程序在第一次运行时运行速度快了100倍或者--创建一个未签名的APK,而不是单击AS中的“播放”按钮,并将其安装到设备上,以澄清在取消选中此处读取的设置后需要(multiDexEnabled true)的原因--因此您可能会或可能不会收到错误,因此您可能不需要在渐变中使用它。如果您在构建应用程序时确实遇到错误,另一种方法是设置(minifyEnabled true),使用ProGuard删除未使用的代码。这可能会在其他方面发挥作用(multiDexEnabled true)。我刚刚试过我的应用程序,但(multiDexEnabled true)有效(minifyEnabled true)无效。顺便说一句,这是启动屏幕的一个很好的指南,如何正确操作@Tasos Instant run适用于gradle build,是的,速度更快,如果你将应用程序发送给朋友,让他们测试应用程序,对应用程序没有帮助。第一次加载应用程序仍需要一些时间。不是在Android Studio中,而是在actuall应用程序中。要回复您的第三条评论,这已经实现;)给它一个测试。为你的应用程序构建一个APK,并将其安装到真正的设备上。它第一次运行的速度和取消选中该选项的速度一样快吗???让我知道