9

我已经使用了v4 support libforFragmentTabHost

要求是,当我将标签页切换到另一个标签页和另一个标签页时,这就是调用

onCreateView() & onActivityCreated()每次。

这就是为什么我的代码性能很慢。

那么,还有其他解决方案吗?如何提高片段选项卡中的性能?

4

4 回答 4

9

听起来像是设计的味道。

重新设计您的代码,以便异步完成繁重的工作。片段应该能够快速构建。如果需要进行任何大型处理以使 Fragment 显示有用信息,则应在创建 Fragment 后提前或异步完成该工作,并在工作完成时通知 Fragment 更新其内容.

于 2013-04-18T17:11:08.637 回答
1

您应该注意的第一件事是注意计算/加载大量数据应该放在与主 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.
      }
}

这是使您的标签工作更快的方法。希望这会对您有所帮助!:)

于 2013-04-18T17:49:07.537 回答
1

我找到了解决方案。我在创建时插入了所有网络服务和数据库事务代码。因为 oncreate 每次都不会调用,直到 ondestroy 没有调用。并且我们可以使用另一种解决方案

片段.show();

& 片段.hide(); 方法

于 2013-04-26T06:46:29.383 回答
0

作为 Android-Developer 的补充:如果您已经在使用 AsyncTask,请记住,即使您使用多个 AsyncTask,它们也会在后台执行,但都是按顺序执行的!如果您想要更多线程来处理您的任务,请查看这篇文章,它完美地解释了如何实现这一目标!同时运行多个 AsyncTask —— 不可能吗?

于 2013-04-18T20:37:16.680 回答