我有一个启动画面活动出现10秒,同时等待活动检查是否创建了表并且所有数据都是从服务器加载的 如果没有,它会创建表并将数据加载到DB。一切都还可以,但问题是当加载数据需要10秒以上时Splash Activity完成并启动另一个Activity 如何保持启动活动等待所有数据加载 这是我的代码
if(! (checkTables()&&checkData())){
progressDialog.show();
fillSamples();
fillExams();
fillQuestions();
fillSubQuestions();
createProfile();
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
progressDialog.dismiss();
Intent studentAccess = new Intent(SplashScreen.this,Samples.class);
startActivity(studentAccess);
finish();
}
},10000);
我正在使用volley StringRequest和ImageRequest从远程服务器下载数据和图像
答案 0 :(得分:1)
您可以使用AsyncTask,通过创建此内部类
来更好地进行网络调用private class Operation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
//do what ever operations you want
for (int i = 0; i < 3; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.interrupted();
}
}
return "result";
}
@Override
protected void onPostExecute(String result) {
Intent i = new Intent(SplashScreen.this, MainActivity.class);
i.putExtra("data", result);
startActivity(i);
finish();
}
@Override
protected void onPreExecute() {}
@Override
protected void onProgressUpdate(Void... values) {}
}
并在此类
中的splash活动中使用私有方法执行该过程 new Operation().execute("");
答案 1 :(得分:0)
应始终从非主线程调用网络调用。
你做的是让你的主线程睡眠。 永远不要忘记主线程。 Android会杀死你的应用。使用AsyncTask进行网络调用(doInBackground),使用onPostExectute()执行所有其他操作。