2013-10-21 8 views
5

私は、sqliteデータベースからデータを抽出する厳しいメソッドを持つクラスを持っています。私はこのクラスのユーザーがスレッドまたはasynctaskでこれらのメソッドを呼び出すように強制したいと思います。メソッドがメインスレッドから実行された場合に例外をスローする方法

メインスレッドでメソッドを実行しないようにするにはどうすればよいですか?

私は、あなたがuiスレッドで何らかのネットワーキングをしようとすると投げられたandroid.os.NetworkOnMainThreadExceptionに似た何かを達成したいと思います。

if (Looper.myLooper() == Looper.getMainLooper()) { 
    throw new DontDoThisOnUiThreadPleaseException(); 
} 

出典:Looper.getMainLooper()Looper.myLooper()

答えて

14

は次のように行います。

0

は、あなたはそれが動作するはずこれを試してみてください、UIスレッドか

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

で実行されているかどうかをチェックするためにルーパーのマニュアルを参照してください。もちろん、独自の例外を作成するか、既存の例外を使用します。

4

Google Volleyライブラリから:

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