我已将v4 support lib
用于FragmentTabHost
要求是当我将标签彼此切换到另一个时。另一个,就是打电话
onCreateView()&每次onActivityCreated()。
这就是为什么我的代码性能很慢。
那么,还有其他解决方案吗?如何提高片段选项卡的性能?
答案 0 :(得分:9)
听起来像是一种设计气味。
重新设计代码,以便异步完成繁重的工作。片段应该能够快速构建。如果为了使Fragment显示有用信息而需要进行任何大型处理,则应在创建Fragment之后事先或异步完成该工作,并在工作完成时通知Fragment更新其内容
答案 1 :(得分:1)
您应该注意的第一件事是观察计算/加载大量数据应该放在与主UI线程不同的工作线程上。 (在我看来)这样做的最佳选择是使用AsyncTask
。你可以在片段中使用这样的东西:
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.
}
}
这样可以让您的标签更快地运行。希望这对您有所帮助! :)
答案 2 :(得分:1)
我找到了解决方案。我插入了所有的websevices&amp;创建时的数据库事务代码。因为oncreate in不会每次调用,直到ondestroy没有调用。 &安培;我们也可以使用另一种解决方案
fragment.show();
&安培; fragment.hide();方法
答案 3 :(得分:0)
作为Android-Developer的补充:如果您已经在使用AsyncTask,请记住,即使您使用多个AsyncTask,它们也会在后台执行,但所有顺序执行!如果您想要更多线程来处理您的任务,请查看这篇文章,它完美地解释了如何实现这一目标! Running multiple AsyncTasks at the same time -- not possible?