问:在主线程创建Looper和在子线程创建Looper有什么区别?

答:无论是主线程还是子线程,都是通过Looper的prepare(boolean quitAllowed)方法创建Looper的,但prepare是一个静态私有方法,没法直接调用,所以Looper类又提供了另外两个方法来间接的调用;用于主线程的是prepareMainLooper方法,用于子线程的是prepare方法创建(同名不带参数)。prepareMainLooper内部以prepare(false)方式调用,随Looper创建的MessageQueue不允许退出。而用于子线程的prepare方法内部以prepare(true)方式调用,随Looper创建的MessageQueue可以退出,所以用子线程创建的Looper在使用完后要调用quitSafely()或quit()方法退出。BTW:主线程的Looper是自动创建的,而子线程的Looper必须手动调用prepare方法创建。
欢迎加入QQ群聊:口袋里的安卓
或关注微信公众号:口袋里的安卓
网友评论