web-dev-qa-db-ja.com

Espressoテストエラー:AppNotIdleException

開発者向けオプションですべてのアニメーションをオフにしました。しかし、ボタンの1つをクリックしようとすると、この例外が発生します。

私のアプリは確かにアクティブで、完全にアイドル状態ではありませんが、変更することはできません。

Android.support.test.espresso.AppNotIdleException: Looped for 6930
iterations over 60 SECONDS. The following Idle Conditions failed .
 at dalvik.system.VMStack.getThreadStackTrace(Native Method)
 at Java.lang.Thread.getStackTrace(Thread.Java:580)
 at Android.support.test.espresso.base.DefaultFailureHandler.getUserFriendlyError(DefaultFailureHandler.Java:92)
 at Android.support.test.espresso.base.DefaultFailureHandler.handle(DefaultFailureHandler.Java:56)
 at Android.support.test.espresso.ViewInteraction.runSynchronouslyOnUiThread(ViewInteraction.Java:184)
 at Android.support.test.espresso.ViewInteraction.doPerform(ViewInteraction.Java:115)
 at Android.support.test.espresso.ViewInteraction.perform(ViewInteraction.Java:87)
20
user5174803

私は過去数日間、この問題に取り組んできました。
ここに私が「違反者」を識別するために使用した方法があります:

private void dumpThreads() {
    int activeCount = Thread.activeCount();
    Thread[] threads = new Thread[activeCount];
    Thread.enumerate(threads);
    for (Thread thread : threads) {
        System.err.println(thread.getName() + ": " + thread.getState());
        for (StackTraceElement stackTraceElement : thread.getStackTrace()) {
            System.err.println("\t" + stackTraceElement);
        }
    }
}

私の場合、Facebook SDKはAsyncTaskスレッドプールを使用していました。

4
deadmoto

答え による MaciejGórski による同様の質問:

これは私のアプリコードのバグで、SwipeRefreshLayoutが無期限に自分自身をアニメーション化しました。 このコンポーネントのバグ が原因で、更新状態が表示されませんでした。

1
W4R10CK

あなたはこの方法をチェックすることができます:

方法1:開発者向けオプションでアニメーションを無効にします。

Setting -> developer options -> Window animation scale -> off

                                Transition animation scale -> off

                                Animator duration scale -> off

方法2: build.gradleにcustomViewがある場合は、これを使用します

defaultConfig {

   //...

   testOptions {
      animationsDisabled = true
   }

}
0
Rasoul Miri