检查调用方法的线程

时间:2014-08-13 15:52:46

标签: java android multithreading

我有一个方法,我只想在不在主线程上调用(执行繁重的工作),如果从主线程调用它,我会抛出一个运行时异常,类似于你尝试做的事情在主线程上进行网络调用,您将获得NetworkOnMainThreadException

我没有在这个问题上找到任何东西,所以有办法吗?

2 个答案:

答案 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");
    }
    // ...
}