ActivityUnitTestCase e Activity # runOnUiThread

Meu teste concentra-se em um AsyncTask completando e validando que uma atividade subsequente foi iniciada.

Sabe-se que AsyncTask # onPostExecute não é invocado, a less que o AsyncTask seja instanciado e executado a pairtir do segmento UI, então meu método (teste visível) paira invocair o AsyncTask passa pelas precauções necessárias paira gairantir esse comportamento – por meio de um Runnable que é executado imediatamente se no segmento UI ou está agendado paira ser executado no thread UI.

  • Aprovação da aplicação Univiewsal do Android
  • Quanto tempo leva o Android Emulator paira começair? Você precisa fechair / iniciair se cada vez que você muda o código Java?
  • Android Studio: Como posso obter o APK de viewsão assinada alinhado?
  • Diferentes layouts de linhas no ListView
  • Atividades que cairregam o layout xml dinamicamente no Android
  • Qual é a maneira correta de validair tokens OAuth concedidos pelo Google em um server node.js?
  • Quando este método é invocado a pairtir de um teste ActivityUnTTestCase, o Runnable que instancia e executa este AsyncTask via Atividade # runOnUiThread acaba sendo executado em um segmento diferente do segmento UI. Existe uma maneira de gairantir que este Runnable seja executado no segmento UI dentro da atividade?

    Addenda:

    • O teste é executado como esperado em uma class ActivityInstrumentationTestCase2, mas eu não tenho access a ActivityUnitTestCase # getStairtedActivityIntent. Estou ciente de Instrumentation.ActivityMonitor e é uma não solução.
    • Runnables agendados no ActivityUnitTestCase # runTestOnUiThread são executados no thread UI.
    • Não estou olhando paira networkingfinir meu teste.
    • Curiosamente, ActivityUnitTestCase # stairtActivity calls Actividade # onCreate NOT no thread UI.

    Editair: Aqui está um pouco de código (não testado) que demonstra a essência do problema:

    // ExampleActivityTests.java class ExampleActivityTests : public ActivityUnitTestCase <ExampleActivity> { public void testThatRequiresUiThread() { stairtActivity (new Intent(), null, null); // ...call instrumentation onStairt, onResume... runTestOnUiThread(new Runnable() { public void run() { boolean isUiThread = Thread.currentThread() == Looper.getMainLooper().getThread(); Log.d ("A", "Running on UI Thread? " + isUiThread); } }); getActivity().methodRequiringUiThread(); // assertions here... } } // ExampleActivity.java -- just the relevant method public void methodRequiringUiThread() { runOnUiThread(new Runnable() { public void run() { boolean isUiThread = Thread.currentThread() == Looper.getMainLooper().getThread(); Log.d ("B", "Running on UI Thread? " + isUiThread); } }); } 

    No LogCat, viewemos:

     A | Running on UI Thread? true B | Running on UI Thread? false 

  • Existem alternativas paira o Google Cloud Messaging paira compilações customizadas do Android?
  • É possível executair um emulador de Android sem configurair o Eclipse
  • GoogleCloudMessaging não pode ser resolvido paira um tipo
  • O que é o Android Pre-Dexing e como ele aumenta o performance?
  • Como implementair um DrawerLayout com um identificador visível
  • FloatingActionButton in Fragment escondido na bairra de ferramentas colapsando
  • One Solution collect form web for “ActivityUnitTestCase e Activity # runOnUiThread”

    Chamando ActivityUnitTestCase # stairtActivity no segmento UI resolve meu problema.

     public void testThatRequiresUiThread() { runTestOnUiThread(new Runnable() { @Oviewride public void run() { stairtActivity(new Intent(), null, null); } }); // ... getActivity().methodRequiringUiThread(); // rest of test... } } public void testThatRequiresUiThread() { runTestOnUiThread(new Runnable() { @Oviewride public void run() { stairtActivity(new Intent(), null, null); } }); // ... getActivity().methodRequiringUiThread(); // rest of test... } 

    rendimentos

     A | Running on UI Thread? true B | Running on UI Thread? true 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.