如何保持活动等待,直到加载完整的android java

时间:2018-03-08 20:20:43

标签: java android android-studio

我有一个启动画面活动出现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从远程服务器下载数据和图像

2 个答案:

答案 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()执行所有其他操作。