Fragmenttabhost 性能慢?
Posted
技术标签:
【中文标题】Fragmenttabhost 性能慢?【英文标题】:Fragmenttabhost performance is slow? 【发布时间】:2013-03-08 04:14:56 【问题描述】:我已将v4 support lib
用于FragmentTabHost
要求是,当我将标签页切换到另一个标签页和另一个标签页时,即调用
onCreateView() & onActivityCreated() 每次。
这就是我的代码性能缓慢的原因。
那么,还有其他解决方案吗?如何提高片段标签的性能?
【问题讨论】:
您能从onCreateView()
和onActivityCreated()
发布您的代码吗?
您是否在片段中尝试过 setRetainInstance(true)?
【参考方案1】:
听起来像是设计的味道。
重新设计您的代码,以便异步完成繁重的工作。片段应该能够快速构建。如果需要进行任何大型处理以使 Fragment 显示有用信息,则应在创建 Fragment 后提前或异步完成该工作,并在工作完成时通知 Fragment 更新其内容.
【讨论】:
同意。如果onCreateView()
或onActivityCreated()
加起来的时间超过几毫秒,那你就错了。【参考方案2】:
您应该注意的第一件事是注意计算/加载大量数据应该放在与主 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.
这是让您的标签工作更快的方法。希望这对您有所帮助! :)
【讨论】:
【参考方案3】:我找到了解决方案。我在创建时插入了所有网络服务和数据库事务代码。因为 oncreate 每次都不会调用,直到 ondestroy 没有调用。并且我们也可以使用另一种解决方案
片段.show();
& 片段.hide();方法
【讨论】:
听起来你的想法是对的。然而,最终目标是 Fragment 不必与它们的活动对话来检索数据。应该为他们提供自己获取数据所需的所有资源引用。毕竟,这就是 Fragments 的意义所在。活动只是负责初始化和导航的容器。 @saunik Sing:你能告诉我在哪里必须使用 fragment.show() 和 fragment.hide()。我必须重写 onTabChanged 函数吗??【参考方案4】:作为 android-Developer 的补充:如果您已经在使用 AsyncTask,请记住,即使您使用多个 AsyncTask,它们也会在后台执行,但都是按顺序执行的!如果您想要更多线程来处理您的任务,请查看这篇文章,它完美地解释了如何实现这一目标! Running multiple AsyncTasks at the same time -- not possible?
【讨论】:
这取决于您运行的版本和设备硬件。异步任务在线程池上执行,其中简单的情况是 1 个工作线程池。这也是框架某些版本的默认设置。以上是关于Fragmenttabhost 性能慢?的主要内容,如果未能解决你的问题,请参考以下文章
FragmentTabHost+Fragment搭建应用主框架
FragmentTabHost + Fragment 使用小记