我必须在应用程序的开头做一个大量的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-总是在第一次运行时(安装后),我得到一个空白屏幕10秒钟(我想这是脚本正在运行...),之后,我的应用程序转到mainActivity。
2-如果我第二次运行应用程序,它会显示一个空白屏幕1秒钟并进入MainActivity(甚至不显示SplashScreen布局)。 似乎工人类根本不在ui线程之外工作......我需要做些什么才能实现这一目标?我已经尝试过把这个工作者放在一个服务上,但仍然是一样的。
答案 0 :(得分:2)
如果您在后台线程中执行所有操作,则主线程根本不会被阻止。
我也在做同样的事情“将数据库从资产文件夹复制到数据库”在Splash活动中我没有得到像你这样的东西。
这是IDE“问题”,Android工作室需要比Eclipse更多的时间将应用程序安装到设备中。
您只需尝试一次“将APK复制到设备并从设备本身安装”。
我也像你一样假设。但问题是“IDE”与我们的代码或Android无关。
答案 1 :(得分:1)
我认为问题在于:
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;
}