我的应用程序有许多后台任务需要完成,所以我正在研究加载屏幕。
我认为我想要做的路线是在输入MainActivity
时将内容视图设置为activity_loading
,然后启动显示进度条的AsyncTask
并将其更新为每个任务完成。
然后在onPostExecute
我将内容视图设置为activity_main
,而我的所有数据都在我的活动中。
这是最好的方法吗?还是有更好的路线?
答案 0 :(得分:1)
您可以通过在活动的FrameLayout
内加载加载布局然后切换其可见性来管理它。调用setContentView
似乎有点不必要。另外,请确保您的FrameLayout
是Activity
布局中的最后一个子视图。通过这种方式进行管理会变得更加容易,因为您知道AsyncTask
的所有活动都会有一个可以切换的加载布局。
答案 1 :(得分:1)
拨打setContentView()
多个错误的做法
您应该在显示时显示ProgressBar
而不是:
ListView
或GridView
,则应该致电notifyDataSetChanged()
以反映更改。Fragment
的屏幕加载部分。答案 2 :(得分:1)
单个活动不应再使用setContentView()
。根据您的要求,您应该在用户打开您的活动时使用启动画面。您可以显示此定制时间,即5000毫秒,7000毫秒等
当用户正在观看启动画面时,我们将启动AsyncTask
并开始处理或加载数据。您可以从onPostExecute()
终止 Spash Screen 并显示您的content view
或fragment
来自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
}
}