代码之家  ›  专栏  ›  技术社区  ›  Brad Hein

为什么汽车码头弄乱了我的应用程序?

  •  2
  • Brad Hein  · 技术社区  · 15 年前

    随着Android 2.2的更新,出现了一个新的汽车停靠应用程序。如果我的应用程序是在前台,当我接电话时,我的应用程序会被杀或暂停,或者其他什么,当我试图重新打开我的应用程序时,它都是一团糟。它丢失了状态信息。

    有人知道汽车码头应用程序在做什么吗?至少,它似乎是强制杀死所有正在运行的应用程序或其他破坏性行为。

    我想,一旦我们确定了它在做什么,我就可以围绕它进行编码了。

    2 回复  |  直到 15 年前
        1
  •  1
  •   EboMike    15 年前

    所有应用程序在被杀时都会失去状态。事实上,当您更改方向时,它们会丢失信息,除非您特别保存它(例如,在OnSaveInstanceState中)。

    如果您希望您的信息如此持久,以至于它能够在应用程序切换(或系统重置)之后继续存在,那么您可以将状态保存在sharedreferences中,而不是保存在onsaveinstancestate中的bundle中。

    您当前如何保存您的状态?你能做到吗?

    顺便说一句,您还可以添加一个广播接收器来监听action-dock-au事件,并检查状态是否有多余的dock-state-car,并保存您的实例数据,以防您不喜欢通用的sharedreferences思想。

        2
  •  2
  •   hackbod    15 年前

    进入汽车停靠站是一种配置更改(例如,如果应用程序愿意的话,它们可以提供特定于汽车的用户界面)。这意味着你的活动将经历一个被破坏的正常过程,然后被重新创建。

    如果你在滥用android:configchanges不必处理这个问题,那么答案就是不要这样做。正如我们一直说的,在某些特定的情况下,您需要进行优化。这不是避免处理配置更改的借口。如果您的应用程序不能正确处理配置更改,将会 总是 以各种方式打破它。新的汽车停靠功能只是让这一点更加明显。

    事实上,我非常推荐开发人员这样做 使用android:configchanges。保持正常的行为是测试应用程序这一部分的一个非常好的方法,以确保您正确地进行操作,并且当它由于其他原因发生在您身上时(因为它肯定会发生)。关闭方向开关的配置更改会使测试应用程序的这一部分变得更加困难。除了非常不寻常的情况,你真的应该保持正常的行为在这里,并使它正常工作。