【问题标题】:Android: directly launch the activity/fragment that is under developmentAndroid:直接启动正在开发的activity/fragment
【发布时间】:2017-07-07 01:25:15
【问题描述】:

有时您必须向现有应用程序添加新的活动/片段。此活动/片段可以嵌套,以便用户必须打开应用程序并在 UI 的多个部分中导航才能访问它。

在开发这个新的活动/片段时,每次我进行更改时,我都必须重新编译整个应用程序,启动它并导航到显示新活动/片段的位置。这很乏味并且会减慢进程。

有没有办法直接启动当前正在开发的activity/fragment?

附录:

许多人建议修改现有代码或清单,以便应用首先启动新的活动/片段:

不得不修改现有代码正是我想要避免的。这对我来说听起来不合适。 所以我想我可以为此目的编写一个浓缩咖啡测试并直接从中启动活动/片段。问题是 espresso 仅在测试期间保留活动/片段,因此它在几分之一秒内可见,然后消失。

【问题讨论】:

  • 不要更改清单中的启动器。在应用初始化后的启动器活动中启动该活动。
  • 如何启动应用程序?您是将其导出为 apk 还是直接从您的 IDE 运行/调试它?您可以在您的 android 清单中添加一个虚拟的启动意图接收器,以便在打开应用程序时直接启动您的活动。

标签: android


【解决方案1】:

感谢@Code-Apprentice 答案和另一个答案:JUnit - stop it from exiting on finish?,这就是我能想到的。

@RunWith(AndroidJUnit4.class)
public class VanillaActivityTest {

@Rule
public final ActivityTestRule<VanillaActivity> activityTestRule =
        new ActivityTestRule<>(VanillaActivity.class, false, false);

@Test
public void blockingTest() throws Exception {
    Intent intent = new Intent();
    // Add your own intent extras here if applicable.
    activityTestRule.launchActivity(intent);
    CountDownLatch countdown = new CountDownLatch(1);
    countdown.await();
}

}

【讨论】:

    【解决方案2】:

    可能最好的方法是编写仪器测试。这样,您不仅可以启动所需的活动,还可以自动检查其行为方式。您可以通过 Getting Started with Testing 了解有关自动化测试的更多信息。

    如果您想启动一个活动进行手动测试,您可以使用ActivityTestRule constructor which has the launchActivity flag。如果将此设置为 false,则您可以完全控制活动的启动时间和完成时间。只需使用 launchActivity() 在您的 @Before 方法中手动启动它。

    【讨论】:

    • 这就是我的想法(参见我的附录),但是如何告诉 espresso 保持显示我的活动/片段,而不是在测试完成后立即将其撕掉?
    • @MarcoRomano 理想情况下,您的测试都是自动化的,因此“消失的活动”不是问题。但是,如果您需要进行一些手动测试,请参阅我的编辑。
    • 我同意,但我认为编写自动化 UI 测试来验证布局设计并不理想:例如你真的要编写 UI 测试来检查活动是否具有特定的背景颜色或其中的卡片视图是否具有特定的角半径?
    • @MarcoRomano 在我看来,验证背景颜色的测试可能很有用。它更多的是确保背景颜色不会被意外更改,而不是测试代码是否实际产生正确的背景。请记住,失败的测试实际上提供了比通过测试更多的信息。
    • 我尝试在@Before 中使用ActivityTestRule.launchActivity(Intent intent),但活动仍然只在测试期间(即几分之一秒)保持可见。
    【解决方案3】:

    您可以使用adb 在命令行上启动特定活动。该过程将是:

    1. 更改代码并构建您的应用(构建而不是“运行”)
    2. 将应用上传到设备。
    3. 直接启动特定的 Activity: adb shell am start -n com.company.MyApp/.SpecificActivity

    更多信息:How to run a specific Android app using Terminal?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多