gpt4 book ai didi

Android - 重复 fragment 事务和手机资源(复杂)

转载 作者:搜寻专家 更新时间:2023-11-01 09:08:54 25 4
gpt4 key购买 nike

前言 - 目前我创建的代码已经提供了所需的用户界面,我的问题是关于手机资源以及是否有“更好”的实现。另外,我是 Android 开发的新手,可能会误解一些基本概念。

我正在开发一个带有选项卡的应用程序,其中一些选项卡有多个 View 。目前每个 View 都由 fragment 管理,当用户在选项卡上打开新 View 时, View 会水平转换。

(该应用程序是现有 iPhone 应用程序到 Android 的端口,虽然我为之工作的人很容易理解将 Android 应用程序制作为尽可能原生的 Android 应用程序的必要性,但他们希望基本的用户界面和控件能够保持不变,这样如果一个 iPhone 用户购买了 Android 手机并购买了他们的应用程序的另一个副本,就不会有根本的区别)

但主选项卡不同——它会自行重新加载。该应用程序本质上是一种学习辅助工具;想象每个 View 都是一张代表信息的卡片,如果用户翻阅卡片。

这是通过让“卡片” fragment 请求 fragment 管理器分离然后重新附加自身来实现的。这是通过调用 FragmentActivity 中的一个方法来完成的,该方法执行以下内容(从实际代码中简化而来):

FragmentTransaction ft = .... .beginTransaction();

ft.setCustomAnimations(int out,int in)
ft.detach(relevantFragment);
ft.attach(relevantFragment);

ft.commit();
.... .executePendingTransaction();

其中 'out' 是 fromXDelta="0", toXDelta="-100%"

'in' 是 fromXDelta="100%", toXDelta="0"

因此,旧 View 从左侧滑出,同时新 View 从右侧滑入。

这很好用,事实上,就用户体验而言,这正是我想要的。然而,我们正在重新加载的 fragment 有一个极其复杂的 View 层次结构,我对 fragment 的理解是整个事物将被垃圾收集并在每次转换时重新实例化,用户可以轻松调用在使用应用程序学习时多次 (100+)。

我读到的几乎所有内容都表明我应该避免创建/收集繁重的对象,因为这会导致我的应用耗尽用户的电池电量,无论处理器是否足够强大以在没有任何视觉延迟的情况下执行。

.

实际问题:有没有什么方法可以模拟这种行为,而不是在用户点击时强制手机在每个 View 秒内完全销毁并重新创建 View ?

我考虑过的事情:

  1. 消除事务/动画,让 fragment 加载新信息。这当然很容易,但这不是我的雇主想要的。

  2. 在 XML 中创建 View 层次结构的两个相同副本,并在 View.VISIBLE 和 View.GONE 之间来回切换,使用自定义 ScaleAnimation 来尝试模拟此行为。我不确定这是否可行,但乍一看似乎相当……草率。

  3. 由于手机和/或 Android 系统的运行方式,这是我不应该担心的不必要和/或愚蠢的优化,我根本没有意识到我在浪费时间。

非常感谢任何关于操作系统工作方式的意见、建议或说明。

最佳答案

my understanding of fragments is that the entire thing is going to be garbage collected and re-instantiated on each transition

如果您查看您的代码,这是不可能的,至少在 fragment 级别。您没有放弃 Fragment 对象,也没有为 Android 提供一些方法来创建一个全新的相同 fragment 。因此,Fragment 不会被垃圾回收。

可以想象,Android 会为您的 fragment 再次调用 onCreateView() 并丢弃旧 View ,尽管这似乎不太可能。您可以通过设置断点或添加日志语句来对此进行测试。

Almost all of what I have read indicates I should avoid heavy object creation/collection as it will cause my app to devour an user's battery

毫无疑问,已经完成了数百万次。做“100+”次,它不会“吞噬”电池。蚕食,也许。

Things I have considered:

我会专注于#3。至多,以多次调用 onCreateView() 的形式确定是否确实正在重新创建 fragment 的 View 层次结构。如果是,则使用 Traceview 确定此操作消耗的确切时间。

关于Android - 重复 fragment 事务和手机资源(复杂),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9862191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com