Android-重复 fragment 交易和手机资源(复杂)

标签 android resources transactions fragment battery

前言 - 到目前为止我创建的代码已经提供了所需的用户界面,我的问题是关于电话资源以及是否有“更好”的实现。另外,我对 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/

相关文章:

java - 在截图之前等待 webview 加载 html

php - 使用资源在我的 json 响应中返回许多对象

java - 如何配置 JDO 事务来模拟在 App Engine Java 中创建数据库序列?

mysql - 如何在mysql中以 "all or nothing "模式执行N次插入

java - 如果方法是事务性的,则 Spring 无法实例化 bean

Android Studio ClassCastException : com. worklight.wlclient.WLPersistentCookieStore

android - TabActivity 将附加信息传递给子 Intent

resources - Chrome 标签页和进程

java - 从 xml Autowiring @Resource 并使用它们生成 beans 列表

android studio 3.0.1 显示无法合并 dex 为什么?