我有一个方法,我只想在不在主线程上调用(执行繁重的工作),如果从主线程调用它,我会抛出一个运行时异常,类似于你尝试做的事情在主线程上进行网络调用,您将获得NetworkOnMainThreadException
我没有在这个问题上找到任何东西,所以有办法吗?
答案 0 :(得分:0)
您可以将当前主题与主Looper
if (Thread.currentThread() == Looper.getMainLooper().getThread())
throw new IllegalStateException();
答案 1 :(得分:0)
您可以使用Thread.currentThread()
获取对当前线程的引用。如果您还记得启动时的主线程,则可以验证是否正在从正确的线程调用该方法。
例如,你可以写:
// At the start of the main thread, keep a reference
Thread mainThread;
public void mainThreadMethod()
{
mainThread = Thread.currentThread();
// ...
}
// In the relevant method, check the thread you're on
public void myMethod()
{
if(Thread.currentThread().equals(mainThread))
{
throw new RuntimeException("Method called from main thread");
}
// ...
}