android 判断是否在主线程的方法
来源:互联网 发布:恐怖黎明官方数据库 编辑:程序博客网 时间:2024/05/24 06:50
核心方法如下:
public class ThreadUtils { public static final String TAG = "ThreadUtils"; public static boolean isInMainThread() { Looper myLooper = Looper.myLooper(); Looper mainLooper = Looper.getMainLooper(); Log.i(TAG, "isInMainThread myLooper=" + myLooper + ";mainLooper=" + mainLooper); return myLooper == mainLooper; }}
咱们实际测试一下,看看日志的打印:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println("isInMainThread()=" + ThreadUtils.isInMainThread());//在这里调用一下方法 }
打印日志:
10-25 09:57:59.933 8772-8772/com.everyoo.handlerdaemon I/ThreadUtils: isInMainThread myLooper=Looper (main, tid 1) {70cc4e8};mainLooper=Looper (main, tid 1) {70cc4e8}10-25 09:57:59.933 8772-8772/com.everyoo.handlerdaemon I/System.out: isInMainThread()=true
myLooper=Looper (main, tid 1) {70cc4e8}
mainLooper=Looper (main, tid 1) {70cc4e8}
说明:很显然,当前线程是在主线程,isInMainThread()=true。
如果在主线程开启一个子线程:
new Thread(new Runnable() { @Override public void run() { System.out.println("isInChlidThread()=" + ThreadUtils.isInMainThread()); } }).start();
打印日志:
10-25 09:57:59.941 8772-9006/com.everyoo.handlerdaemon I/ThreadUtils: isInMainThread myLooper=null;mainLooper=Looper (main, tid 1) {70cc4e8}10-25 09:57:59.941 8772-9006/com.everyoo.handlerdaemon I/System.out: isInChlidThread()=false
注意:myLooper=null
mainLooper=Looper (main, tid 1) {70cc4e8}
为什么myLooper=null为空呢?这是因为Android中的线程默认没有一个和它绑定了的消息循环(Threads by default do not have a message loop associated with them. Of course, the method works)
如果初始化Looper对象并且启动,看代码:
new Thread(new Runnable() { @Override public void run() { Looper.prepare();//初始化Looper对象 System.out.println("isInChlidThread()=" + ThreadUtils.isInMainThread()); Looper.loop();//启动Looper } }).start();
打印日志:
10-25 09:57:59.950 8772-9007/com.everyoo.handlerdaemon I/ThreadUtils: isInMainThread myLooper=Looper (Thread-153, tid 153) {9984c2e};mainLooper=Looper (main, tid 1) {70cc4e8}10-25 09:57:59.950 8772-9007/com.everyoo.handlerdaemon I/System.out: isInChlidThread() isThresdMeod1=false
myLooper=Looper (Thread-153, tid 153) {9984c2e}
mainLooper=Looper (main, tid 1) {70cc4e8}
虽然myLooper不为null了,但是他们却不属于同一个Looper对象。并不是我们的主线程,所以返回false。
2 0
- android 判断是否在主线程的方法
- Android判断是否在主线程
- Android 判断当前线程是否是主线程的方法
- Android判断当前线程是否是主线程的方法
- Android判断当前线程是否是主线程的方法
- 判断是否在主线程
- android 判断app是否运行在主线程中
- Android 判断当前线程是否是主线程的两种方法
- Android 判断当前线程是否是主线程的两种方法
- Android 判断当前线程是否是主线程的两种方法
- Android 判断当前线程是否是主线程的两种方法
- Android判断当前线程是主线程的方法
- Android 如何判断当前代码是否在主线程中执行
- Android ThreadUtil 线程公共类,判断是否在主线程/ 子线程执行 相关操作
- 判断线程是否为主线程,获得主线程方法
- Android 判断当前线程是否是主线程
- Android--判断当前线程是否是主线程
- Android 如何判断当前线程是否是主线程
- PHP中的运算符
- Android使用Handler防止内存泄漏
- 几个常用机器学习算法 - 决策树算法
- requirejs前端模块化
- linux 虚拟内存初识
- android 判断是否在主线程的方法
- ExpandableListView的使用
- Linux学习笔记之系统中的分区和文件系统
- Lesson 9 Nehe
- 两栈共用同一存储空间
- Field类详解
- Android Studio2.2 配置NDK
- Matlab 矩阵 A ,矩阵 B,求A(B)
- 获取 Android Studio 中的jar包