我有一个类,其中包含从 sqlite 数据库中提取数据的严格方法。我想“强制”这个类的用户在线程或异步任务中调用这些方法。
如何防止方法在主线程上运行?
我想实现类似于当您尝试在 ui 线程上进行一些网络时抛出的 android.os.NetworkOnMainThreadException 的东西。
我有一个类,其中包含从 sqlite 数据库中提取数据的严格方法。我想“强制”这个类的用户在线程或异步任务中调用这些方法。
如何防止方法在主线程上运行?
我想实现类似于当您尝试在 ui 线程上进行一些网络时抛出的 android.os.NetworkOnMainThreadException 的东西。
执行以下操作:
if (Looper.myLooper() == Looper.getMainLooper()) {
throw new DontDoThisOnUiThreadPleaseException();
}
来自 Google Volley 库:
private void throwIfOnMainThread() {
if (Looper.myLooper() == Looper.getMainLooper()) {
throw new IllegalStateException("Must not be invoked from the main thread.");
}
}
if (Looper.getMainLooper().equals(Looper.myLooper())) {
throw new MyException("Don't do it on the UI thread");
}
试试这个应该可以的。当然,创建您自己的例外或使用现有的例外。
查看 Looper 文档以检查您是否在 ui 线程中运行