Android 判断当前线程是否是主线程的两种方法
2016-03-04 17:39
537 查看
使用Looper判断,方法为: Looper.myLooper() != Looper.getMainLooper()
使用线程句柄判断,将主线程的Thread.currentThread()获取到主线程当前句柄,保存起来,在需要判断的时候调用Thread.currentThread()来与之比较,即可判断当前线程是否是主线程了。
Handler一定要在主线程实例化吗?new Handler()和new Handler(Looper.getMainLooper())的区别
如果你不带参数的实例化:Handler handler = new Handler();那么这个会默认用当前线程的looper
一般而言,如果你的Handler是要来刷新操作UI的,那么就需要在主线程下跑。
情况:
1.要刷新UI,handler要用到主线程的looper。那么在主线程 Handler handler = new Handler();,如果在其他线程,也要满足这个功能的话,要Handler handler = new Handler(Looper.getMainLooper());
2.不用刷新ui,只是处理消息。 当前线程如果是主线程的话,Handler handler = new Handler();不是主线程的话,Looper.prepare(); Handler handler = new Handler();Looper.loop();或者Handler handler = new Handler(Looper.getMainLooper());
若是实例化的时候用Looper.getMainLooper()就表示放到主UI线程去处理。
如果不是的话,因为只有UI线程默认Loop.prepare();Loop.loop();过,其他线程需要手动调用这两个,否则会报错。
使用线程句柄判断,将主线程的Thread.currentThread()获取到主线程当前句柄,保存起来,在需要判断的时候调用Thread.currentThread()来与之比较,即可判断当前线程是否是主线程了。
Handler一定要在主线程实例化吗?new Handler()和new Handler(Looper.getMainLooper())的区别
如果你不带参数的实例化:Handler handler = new Handler();那么这个会默认用当前线程的looper
一般而言,如果你的Handler是要来刷新操作UI的,那么就需要在主线程下跑。
情况:
1.要刷新UI,handler要用到主线程的looper。那么在主线程 Handler handler = new Handler();,如果在其他线程,也要满足这个功能的话,要Handler handler = new Handler(Looper.getMainLooper());
2.不用刷新ui,只是处理消息。 当前线程如果是主线程的话,Handler handler = new Handler();不是主线程的话,Looper.prepare(); Handler handler = new Handler();Looper.loop();或者Handler handler = new Handler(Looper.getMainLooper());
若是实例化的时候用Looper.getMainLooper()就表示放到主UI线程去处理。
如果不是的话,因为只有UI线程默认Loop.prepare();Loop.loop();过,其他线程需要手动调用这两个,否则会报错。
相关文章推荐
- 开发中碰到的问题:Avoid non-default constructors in fragments: use a default constructor plus Fragment#setArg
- 【腾讯Bugly干货分享】TRIM:提升磁盘性能,缓解Android卡顿
- Android 智能安装
- Android基本功:Handler消息传送机制
- 初入android,android studio熟悉(五)
- Android实现滑动的几种方式演示
- Android应用性能剖析全攻略
- [Android]Android中Application、静态变量和Sharedpreferences的使用与区别
- Android项目:手机安全卫士(6)—— 手机防盗设置向导
- SimpleAdapter的简单使用
- android中asynctask和thread的区别?
- android源码集合(从网上摘抄,在此记录下)
- android中通过SharedPreferences进行对象的存储
- android Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)
- Android开发中adb常见的问题
- 初识android——Fragment
- Android Service提高
- 深入讲解Android中Activity launchMode
- 【解决方案】Android中Log太多太长打印不全的问题
- Android中根据时间来计算两个值之间的差值