改善Android应用程序的片段事务的加载时间

时间:2013-10-11 12:28:03

标签: java android android-fragments usability

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

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

我也知道问题出在哪里,因为当我替换一个没有数据的片段时,它会立即发挥作用。只是,应用程序必须显示非常多的数据。我正在将HashMap<String, Collection<String>>传递给片段,并在那里读它。我将它保存到一个数组中然后我再次在for循环中读取该数组并显示数据。

我想到了其他各种方法:在主活动中读取所有数据,然后将多个数组传递给片段。但问题是,每个片段需要13个数组,因为hashmap包含13个不同键的数据。每个键有1个值。共有50个条目。所以

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

这是为设备加载的大量数据。所以我想到了如何才能提高加载片段的速度。

我正在加载启动画面时使用AsyncTask从XML下载数据,然后我将其保存到不同的hashmap中(取决于我加载的xml)。然后我开始对主活动的新意图并传递所有哈希映射。然后根据导航抽屉列表打开一个新片段,并将散列映射传递到片段中的函数中。然后将数据读入数组,并在OnCreateView方法中再次读出数组,以将数据添加到布局中。

任何速度改进的想法?这就是我目前如何改变我的片段

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....

1 个答案:

答案 0 :(得分:3)

也许

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

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

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

或者如果问题不在交易本身,也许你的循环需要改进?