2013-10-21 7 views
5

Ho una classe con metodi gravi che estrae i dati da un database sqlite. Vorrei "forzare" gli utenti di questa classe a chiamare questi metodi in un thread o in un asynctask.Come generare un'eccezione se un metodo viene eseguito dal thread principale

Come posso impedire l'esecuzione di un metodo sul thread principale?

Mi piacerebbe ottenere qualcosa di simile a Android.os.NetworkOnMainThreadException generata quando si tenta di fare un po 'di networking sul thread ui.

risposta

0

vedere la documentazione Looper per verificare se si esegue nel thread UI o no

3
if (Looper.getMainLooper().equals(Looper.myLooper())) { 
    throw new MyException("Don't do it on the UI thread"); 
} 

Prova questo dovrebbe funzionare. Naturalmente crea la tua eccezione o usa quella esistente.

4

Da Google Volley libreria:

private void throwIfOnMainThread() { 
     if (Looper.myLooper() == Looper.getMainLooper()) { 
      throw new IllegalStateException("Must not be invoked from the main thread."); 
     } 
    }