【发布时间】:2017-02-23 20:41:39
【问题描述】:
我必须在应用程序的开头进行大量的 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线程之外工作......我必须做什么才能做到这一点?我已经试过把这个工人放在服务中,但还是一样。
【问题讨论】:
-
在 onResume() 中你使用的是
SetupDataBaseWorker().execute();而不是这个new SetupDataBaseWorker(this).execute();并且这不是db_sql = new SqliteManager(this.activity);或者我错了吗? -
showDialogLoading该方法是否有效并且实际上显示了一个加载对话框? -
各位,这是一个抽象...整个代码正在运行
标签: android multithreading service android-asynctask worker