Подтвердить что ты не робот

Как узнать, когда закончена загрузка Android?

Я работаю над автоматизированным набором тестов для нашего приложения для Android и сталкиваюсь с трудностями, ожидая, что действия будут полностью загружены. Я могу вызвать getActivity, но только потому, что он показывает активность, которую я надеюсь увидеть в своем тесте, не всегда означает, что компоненты активности готовы к использованию (полностью загружены). Просматривая API активности, ничего не получилось, и другие методы кажутся слишком инвазивными и испортили начальное состояние тестов. Кто-нибудь знает, есть ли способ спросить приложение или виртуальную машину, если текущая активность загружена?

4b9b3361

Ответ 1

Как я упоминал в комментарий, ваша иерархия просмотров должна работать после вашего вызова setContentView() в начале onCreate(). У меня никогда не было таких проблем с какой-либо деятельностью или тестовым классом.

Я не уверен, что это поможет в этом конкретном случае, но в общем случае вы можете определить, когда очередь событий UI пуста, вызывая getInstrumentation().waitForIdleSync(). Это будет заблокировано, пока не будет обработано больше событий пользовательского интерфейса.

Ответ 2

Если вы создаете метод setUp(), подобный этому в вашем тестовом примере, расширяющий ActivityInstrumentationTestCase2<MyActivity>

@Override
protected void setUp() throws Exception {
    super.setUp();

    final MyActivity activity = getActivity();

    tv1 = (EditNumber)activity.findViewById(resId1);
    tv2 = (EditNumber)activity.findViewById(resId2);
}

ваша деятельность будет полностью работоспособна и загружен макет, продемонстрированный в этом случае тем фактом, что вы можете получить доступ к представлениям и их содержимому

@SmallTest
public void testSimpleCreate() {
    final MyActivity activity = getActivity();
    assertNotNull(activity);

    assertNotNull(tv1);
    assertEquals("mystr1", tv1.getText().toString());
    assertNotNull(tv1);
    assertEquals("mystr2", tv2.getText().toString());
}

Ответ 3

Может быть более элегантный способ, но попытался ли вы установить логическое значение в конце вашего метода OnCreate()?