【问题标题】:Simulate Activity/Fragment re creation模拟 Activity/Fragment 重新创建
【发布时间】:2014-11-07 15:59:36
【问题描述】:

我正在尝试模拟 ActivityFragment 重新创建并检查 onSaveInstancestate()onRestoreInstanceState() 并且通常检查我是否在所有情况下都以良好的方式处理活动重新创建,因为例如,就像屏幕旋转导致 Activity 自行重新创建一样。

但就我而言,我想检查更多可能导致重新创建的选项/案例,因为我的应用无法旋转(所有活动都是纵向的)。

我看到了很多关于这个主题的文章、博客和 stackoverflow 问题/答案,例如 here, here,here.

正如这个stackoverflow的回答所说Why not use always android:configChanges="keyboardHidden|orientation"? 还有更多的事件会导致 Activity 重新创建,所以在我阅读完之后,我想测试我的应用中的一些事件。

例如,我在我的活动中按下主页按钮,然后我进入设置并尝试更改语言、更改字体大小等...,但这些操作都没有让我的应用程序像我一样重新创建预计。 当我回到我的应用程序时,它刚刚恢复,onCreate() 从未调用过。 所以我什至检查了official documents 关于这个。他们还说它应该导致我的活动重新创建:引用:

"When a configuration change occurs at runtime, the activity is shut down and restarted by default" 

但正如我所说,这并没有发生在我身上。

这对我来说是巨大的,因为我非常天真,并认为如果我的应用程序仅是纵向的,或者我是否会在清单中添加这一行:

android:configChanges="keyboardHidden|orientation|screenSize"

那么一切都会好起来的,显然不是因为有更多的配置更改可以重新启动我的活动,所以我不能再从它运行,我想以良好的方式处理它,现在我想也测试一下。

【问题讨论】:

  • 您如何断言您的活动已调用或未调用 onCreate?调试?日志猫?
  • Logcat - 当我按下主页按钮时,会调用 onPause() -> onStop()。在我的测试之后(无论是哪一个,例如,将字体大小从常规更改为大),我长按主页按钮,然后按下我的应用程序,然后调用 onRestart() -> onStart() -> onResume()

标签: android android-activity android-fragments android-lifecycle


【解决方案1】:

更改设备语言是强制重新创建不涉及方向更改的所有活动的一种方法。

【讨论】:

    【解决方案2】:

    您说当您在应用程序中更改设备的方向时,它没有被重新创建。通常会的。当您添加行 android:configChanges="orientation" 时,这意味着您告诉系统您将处理应用程序中的方向更改,而不必担心正常行为。

    如果您从清单中的活动声明中删除它,您将看到它按预期运行(在方向更改时销毁/重新创建)。

    希望对您有所帮助。

    【讨论】:

    • 您没有理解我写的内容或者我不清楚,但我说我是故意这样做的,所以不会有任何方向,所以我的活动不会重新启动/重新创建,但是在阅读了有关该问题的内容后,我发现还有更多案例可以重新创建/重新启动我的活动 - 请再次阅读我写的内容并查看 stackoverflow.com/questions/7818717/…
    • 我想要的是模拟更多导致活动重新创建/重新启动的配置更改情况,不包括方向更改。
    【解决方案3】:

    按下主页按钮最初只会引发onPause。您的Activity 在完全销毁之前不会再次通过onCreate,除非Android 决定它需要内存用于其他进程,否则不会发生这种情况。

    最简单的方法是从configChanges 中删除orientation,然后旋转你的Activity 看看会发生什么。布局可能无法正常工作,但您应该能够检查您的生命周期代码。同样,删除keyboardHidden,然后切换软键盘。您的 Activity 应该经历生命周期序列。

    更改设备的区域设置应该会导致您的Activity 被重新创建。请注意,这是需要更改的全局区域设置,不是键盘输入的语言。

    我想到了其他方法,例如通过手机上的按键序列(例如,在某些手机上按住主屏幕按钮并在应用上向左滑动以杀死)手动销毁应用,或者从您的调试器。

    【讨论】:

    • 我想要的是模拟更多导致活动重新创建/重新启动的配置更改情况,不包括方向更改。我还尝试更改设备语言,但它没有重新创建我的活动。您写道:“......除非Android决定它需要其他进程的内存,否则不会发生这种情况”但这是不正确的,因为正如android所说,还有更多情况可能导致活动重新创建。看这里developer.android.com/guide/topics/manifest/…
    • 如果我按住主页按钮然后向左滑动我的应用程序,它将破坏进程和我的应用程序。我还可以使用 DDMS 工具来模拟 Android 因为内存丢失而删除了我的应用程序,请阅读:stackoverflow.com/questions/11365301/…。我也可以使用开发人员工具来模拟这个:android-er.blogspot.co.il/2013/04/…,但我已经在我的问题中描述了它,这不是我想要模拟的。
    • 配置更改会导致Activity 经历onDestry()onCreate() 生命周期。不管它是由方向、语言环境还是手动终止应用程序引起的——它们都会对您的Activity 产生完全相同的影响。您不需要,也不可能测试所有可能的配置更改。
    • 我知道,我只想要一个,不包括方向变化。以及为什么它不像android官方文档所说的那样工作。例如,他们说更改字体大小应该重新启动活动。
    猜你喜欢
    • 2022-10-19
    • 2013-03-11
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多