我需要检查运行某段代码的线程是否是主(UI)线程。我怎样才能做到这一点呢?
当前回答
除了之前所有的答案
inline fun <T> ensureNotOnMainThread(block: () -> T): T {
check(Thread.currentThread() != Looper.getMainLooper().thread) { "This function cannot be called on main thread" }
return block()
}
允许用它包装任何方法,示例如下:
fun isInDataBase(id: String) = ensureNotOnMainThread { db.contains(id) }
其他回答
Xamarin的。Android端口:(c#)
public bool IsMainThread => Build.VERSION.SdkInt >= BuildVersionCodes.M
? Looper.MainLooper.IsCurrentThread
: Looper.MyLooper() == Looper.MainLooper;
用法:
if (IsMainThread) {
// you are on UI/Main thread
}
首先检查是否是主线程
在Kotlin
fun isRunningOnMainThread(): Boolean {
return Thread.currentThread() == Looper.getMainLooper().thread
}
在Java中
static boolean isRunningOnMainThread() {
return Thread.currentThread().equals(Looper.getMainLooper().getThread());
}
Looper.myLooper() == Looper.getMainLooper()
如果返回true,那么你在UI线程上!
你可以在android DDMS logcat中验证它,其中进程id将是相同的,但线程id将不同。
简单的Toast消息也可以作为快速检查。
推荐文章
- 为什么MongoDB Java驱动在条件中使用随机数生成器?
- 即使从未抛出异常,使用try-catch块的代价是否昂贵?
- 什么时候我们应该使用观察者和可观察对象?
- ImageView -有高度匹配宽度?
- 如何确定在android文件的MIME类型?
- Java中的split()方法对点(.)不起作用。
- Eclipse调试器总是阻塞在ThreadPoolExecutor上,没有任何明显的异常,为什么?
- 这是在Android中获取用户位置的好方法
- Java生成两个给定值之间的随机数
- Android从左到右幻灯片动画
- 如何有效地从数组列表或字符串数组中删除所有空元素?
- 比较JUnit断言中的数组,简洁的内置方式?
- 如何检索视图的维度?
- 如何改变菜单项的文本颜色在安卓?
- codestyle;把javadoc放在注释之前还是之后?