2013-09-23 16 views
9

Ich habe Probleme mit Handler Code mit Robolectric. Zum Beispiel:Robolectric Run Handler Post

public class Client { 
    private Handler mMainThreadHandler; 

    public interface Callback{ 
    void ok(); 
    } 

    public Client() { 
    mMainThreadHandler = new Handler(Looper.getMainLooper()); 
    } 

    public void doSomeStuff(Callback callback){ 
    //doing... 
    mMainThreadHandler.post(new Runnable(){ 
     @Override public void run() { 
     callback.ok(); 
     } 
    }); 
    } 
} 

Wie führe ich den Code in der Runnable sofort? Es wird nicht ausgeführt, bevor mein Test ausgeführt wird.

+0

Haben Sie rufen Client.doSomeStuff() auf Hauptthread oder Hintergrund-Thread? – Poly

Antwort

8

ich denke, das einen Job machen sollte:

Robolectric.runUiThreadTasks(); 

oder wenn es mehrere Aufgaben geplant:

Robolectric.runUiThreadTasksIncludingDelayedTasks(); 
+0

** nicht aufgelöste Referenz runUiThreadTasks ** –

11

Für Robolectric Version 3.0 Sie verwenden sollten: org.robolectric.Robolectric.flushForegroundThreadScheduler
oder
org.robolectric.shadows.ShadowLooper.runUiThreadTasks
org.robolectric.shadows.ShadowLooper.runUiThreadTasksIncludingDelayedTasks

Referenz: 2.4 to 3.0 Upgrade Guide

+0

Symbol kann nicht aufgelöst werden ** ShadowLooper ** –

3

In Robolectrie 3.0 Sie tun können,

HandlerThread thread = new HandlerThread("test"); 
thread.start(); 
Handler handler = new Handler(thread.getLooper()); 
handler.post(new Runnable() {run(){ 
    int a = 0; 
}}; 
((ShadowLooper) ShadowExtractor.extract(thread.getLooper())).idle(); // this will execute line int a = 0;