我已经使用了v4 support lib
forFragmentTabHost
要求是,当我将标签页切换到另一个标签页和另一个标签页时,这就是调用
onCreateView() & onActivityCreated()每次。
这就是为什么我的代码性能很慢。
那么,还有其他解决方案吗?如何提高片段选项卡中的性能?
我已经使用了v4 support lib
forFragmentTabHost
要求是,当我将标签页切换到另一个标签页和另一个标签页时,这就是调用
onCreateView() & onActivityCreated()每次。
这就是为什么我的代码性能很慢。
那么,还有其他解决方案吗?如何提高片段选项卡中的性能?
听起来像是设计的味道。
重新设计您的代码,以便异步完成繁重的工作。片段应该能够快速构建。如果需要进行任何大型处理以使 Fragment 显示有用信息,则应在创建 Fragment 后提前或异步完成该工作,并在工作完成时通知 Fragment 更新其内容.
您应该注意的第一件事是注意计算/加载大量数据应该放在与主 UI 线程不同的工作线程上。最好的选择(在我看来)是使用AsyncTask
. 您可以在 Fragment 中使用类似的东西:
private class LoadData extends AsyncTask<Void, Void, Void>{
@Override
protected void onPreExecute(){
super.onPreExecute();
// this is the place where you can show
// progressbar for example to indicate the user
// that there is something which is happening/loading in the background
}
@Override
protected void doInBackground(Void... params){
// that's the place where you should do
// 'the heavy' process which should run on background thread
}
@Override
protected void onPostExecute(Void result){
super.onPostExecute();
// you should update your UI here.
// For example set your listview's adapter
// changes button states, set text to textview and etc.
}
}
这是使您的标签工作更快的方法。希望这会对您有所帮助!:)
我找到了解决方案。我在创建时插入了所有网络服务和数据库事务代码。因为 oncreate 每次都不会调用,直到 ondestroy 没有调用。并且我们可以使用另一种解决方案
片段.show();
& 片段.hide(); 方法
作为 Android-Developer 的补充:如果您已经在使用 AsyncTask,请记住,即使您使用多个 AsyncTask,它们也会在后台执行,但都是按顺序执行的!如果您想要更多线程来处理您的任务,请查看这篇文章,它完美地解释了如何实现这一目标!同时运行多个 AsyncTask —— 不可能吗?