java - 改善 Android 应用程序 fragment 交易的加载时间

标签 java android android-fragments usability

我目前正在开发一个应用程序(您可能已经回答或看到了我的一些其他问题),并且遇到了可用性问题。我有一个抽屉导航,当用户单击其中一个项目时,另一个 fragment 会替换主框架内容。我遇到的问题是,交易在我的设备上需要一些时间。

我单击抽屉导航中的一项,然后应用程序“卡住”了几秒钟,然后将继续正常工作。

我也知道问题出在哪里,因为当我替换其中没有数据的 fragment 时,它会立即起作用。只是应用程序必须显示大量数据。我正在通过 HashMap<String, Collection<String>>到 fragment 并在那里阅读它。我将其保存到一个数组中,然后在 for 循环中再次读取该数组并显示数据。

我考虑了各种其他方法,例如:在主 Activity 中读取所有数据,然后将多个数组传递给 fragment 。但问题是,每个 fragment 我需要 13 个数组,因为 HashMap 包含 13 个不同键的数据。每个键都有 1 个值。总共有 50 个条目。所以

50 个条目包含 13 个键,包含 1 个值。

这几乎是设备要加载的数据。所以我就想如何才能提高 fragment 的加载速度。

我在加载闪屏时使用 AsyncTask 从 XML 下载数据,然后将其保存到不同的 HashMap 中(取决于我加载的 xml)。然后我开始一个主要 Activity 的新 Intent 并传递所有 HashMap 。然后根据抽屉导航列表打开一个新 fragment ,并将 HashMap 传递到 fragment 中的函数中。然后将数据读入数组,并在 OnCreateView 方法中再次读取数组以将数据添加到布局中。

有什么速度提升的想法吗?这就是我目前更改 fragment 的方式

protected void onNavItemSelected(int id) {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
    switch ((int) id) {
    case 101:
        MainFragment.passList(hashMap);
        ft.replace(R.id.content_frame, new MainFragment());
        ft.commit();
        break;
//further cases....

最佳答案

也许

ft.commit();
getSupportFragmentManager().executePendingTransactions();
break;

将帮助您更快地执行事务(请务必在主线程上调用它)

http://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions()

或者如果问题不在于事务本身,也许是你的循环需要改进?

关于java - 改善 Android 应用程序 fragment 交易的加载时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19318171/

相关文章:

android - 如何阻止 Zebra 打印机 RW 420 在从 Printer.getGraphics Util 发出打印图像命令时自动送入大量额外纸张?

android - 膨胀 fragment 时出错

java - 为什么我的收集器方法没有并行处理数据?

android - 半透明背景动画的高 fps

java - I/O 和控制台 I/O 区别

java - 为什么将 (EditText) findViewById 转换为 (EditText)?

Android espresso 在同一个 Activity 中连续测试多个 fragment

android - 我应该如何在 android 上保存包含 ListView 的 fragment 状态?

Mac OS X 上的 Java Profiler 工具

java - 使用 apache poi 合并和对齐中心单元格