Worker Class 在 ui 线程外

Worker Class outside ui thread

我必须在应用程序的开头进行 大量 sql 操作 (插入太多)。我有一个这样的启动画面。

public class SplashScreen extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
    }

    @Override
    protected void onResume() {
        super.onResume();
        ...
        new SetupDataBaseWorker(this).execute();
    }
    private class SetupDataBaseWorker extends AsyncTask<Void, Void, Void> {
        private SqliteManager db_sql;
        private Activity activity;

        public SetupDataBaseWorker(Activity activity) {
            this.activity = activity;

            db_sql = new SqliteManager(this.activity);
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            ...
            showDialogLoading();
            ...
        }

        @Override
        protected Void doInBackground(Void... urls) {
            ...
            db_sql.inserting();
            ...
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);

            this.activity.startActivity(new Intent(SplashScreen.this, MainActivity.class));
            this.activity.finish();
        }
    }
}

1- 总是在第一个 运行ning(安装后),我有 10 秒的空白屏幕(我想那是脚本 运行ning...),然后,我的应用进入 mainActivity。

2- 如果我第二次 运行 应用程序,它会显示空白屏幕 1 秒钟,然后转到 MainActivity(甚至不显示 SplashScreen 布局)。 似乎工人 class 它根本不在 ui 线程之外工作......我必须做些什么才能做到这一点?我已经试过让这个工人在服务中,但还是一样。

我认为问题出在这里:

public SetupDataBaseWorker(Activity activity) {
    this.activity = activity;
    db_sql = new SqliteManager(this.activity);
}

将初始值设定项移入

public SetupDataBaseWorker(Activity activity) {
    this.activity = activity;    
}

@Override
protected Void doInBackground(Void...urls) {
    ...
    db_sql = new SqliteManager(this.activity);
    db_sql.inserting();
    ...
    return null;
}

如果您在后台线程中执行所有操作,那么主线程根本不会被阻塞。

我也在 Splash 中做同样的事情 "copying the database from assets folder to DB" activity 我没有得到像你一样的东西。

IDE"issue",Androidstudio 将应用程序安装到设备中比 Eclipse 花费更多的时间。

您只需尝试一次"Copy the APK into device and install from the device itself"。

我也和你一样假设。但问题是 "IDE" 与我们的代码或 Android.

无关