Android实施加载屏幕

时间:2015-05-06 02:44:42

标签: android

我的应用程序有许多后台任务需要完成,所以我正在研究加载屏幕。

我认为我想要做的路线是在输入MainActivity时将内容视图设置为activity_loading,然后启动显示进度条的AsyncTask并将其更新为每个任务完成。

然后在onPostExecute我将内容视图设置为activity_main,而我的所有数据都在我的活动中。

这是最好的方法吗?还是有更好的路线?

3 个答案:

答案 0 :(得分:1)

您可以通过在活动的FrameLayout内加载加载布局然后切换其可见性来管理它。调用setContentView似乎有点不必要。另外,请确保您的FrameLayoutActivity布局中的最后一个子视图。通过这种方式进行管理会变得更加容易,因为您知道AsyncTask的所有活动都会有一个可以切换的加载布局。

答案 1 :(得分:1)

拨打setContentView()多个错误的做法 您应该在显示时显示ProgressBar而不是:

  • 如果您使用的是ListViewGridView,则应该致电notifyDataSetChanged()以反映更改。
  • 您应尝试使用片段动态替换动态Fragment的屏幕加载部分。

答案 2 :(得分:1)

单个活动不应再使用setContentView()。根据您的要求,您应该在用户打开您的活动时使用启动画面。您可以显示此定制时间,即5000毫秒,7000毫秒等

当用户正在观看启动画面时,我们将启动AsyncTask并开始处理或加载数据。您可以从onPostExecute()终止 Spash Screen 并显示您的content viewfragment

来自AndroidHive的示例代码:

public class SplashScreen extends Activity {

// Splash screen timer
private static int SPLASH_TIME_OUT = 3000;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_splash);


    // start your AsyncTask here
    new FetchData().execute();

}


 private class FetchData extends AsyncTask<Void, Void, Void> {


    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        // make calls to http network     

    }

    @Override
    protected Void doInBackground(Void... arg0) {
         // fetch data here
    }

    @Override
    protected Void onPostExecute(Void... arg0) {
         // change contentview
         // we call handler to show our main content and close this splash screen
   new Handler().postDelayed(new Runnable() {

        /*
         * Showing splash screen with a timer. This will be useful when you
         * want to show case your app logo / company
         */

        @Override
        public void run() {
            // This method will be executed once the timer is over
            // Start your app main activity
            Intent i = new Intent(SplashScreen.this, MainActivity.class);
            startActivity(i);

            // close this activity
            finish();
        }
    }, 2000);    // delay is good so that wrapping up of data is done
    }

}