缩短安卓应用程序片段事务的加载时间



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

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

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

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

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

这几乎是为设备加载的数据。所以我考虑如何提高加载片段的速度。

我在加载初始屏幕时使用 AsyncTask 从 XML 下载数据,然后将其保存到不同的哈希映射中(取决于我加载的 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....

也许

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

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

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

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

最新更新