使用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();过,其他线程需要手动调用这两个,否则会报错。

参考:http://blog.csdn.net/thanklife/article/details/17006865

更多相关文章

  1. SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
  2. Android(安卓)四大组件之 Service (一)
  3. Android网络通信库Volley简介(Google IO 2013)
  4. - Android深入浅出Binder机制
  5. Android(安卓)Framework层Power键关机流程(一,Power长按键操作处理
  6. Android(安卓)Framework内核之旅
  7. 判断Http请求由手机端发起,还是有电脑端发起
  8. Handler、Message的简单使用
  9. Android之SurfaceView(六)

随机推荐

  1. android如何让webview里的资源访问本地缓
  2. android中设置一些没有maxHeight属性控件
  3. Android按钮的五种点击监听事件处理
  4. anroid 7.1添加自定义api服务
  5. Android apk下载 安装 卸载 打开
  6. Android圆角自定义View
  7. Android之ShortCut[setResult方式]
  8. Writing code that captures videos on A
  9. Android(安卓)WebView载入本地页面时的乱
  10. Android(安卓)A2DP 音频卡顿问题BT HOST