5

我有一个类,其中包含从 sqlite 数据库中提取数据的严格方法。我想“强制”这个类的用户在线程或异步任务中调用这些方法。

如何防止方法在主线程上运行?

我想实现类似于当您尝试在 ui 线程上进行一些网络时抛出的 android.os.NetworkOnMainThreadException 的东西。

4

4 回答 4

14

执行以下操作:

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

来源:Looper.getMainLooper()Looper.myLooper()

于 2013-10-21T14:17:21.887 回答
4

来自 Google Volley 库:

 private void throwIfOnMainThread() {
        if (Looper.myLooper() == Looper.getMainLooper()) {
            throw new IllegalStateException("Must not be invoked from the main thread.");
        }
    }
于 2013-10-21T15:00:46.853 回答
3
if (Looper.getMainLooper().equals(Looper.myLooper())) {
     throw new MyException("Don't do it on the UI thread");
 }

试试这个应该可以的。当然,创建您自己的例外或使用现有的例外。

于 2013-10-21T14:19:24.163 回答
0

查看 Looper 文档以检查您是否在 ui 线程中运行

于 2013-10-21T14:18:10.923 回答