handler:子线程和主线程通讯
核心点:通过threalocal这个类保存looper对象(此类的特点是在哪个线程中存,就只能在哪个线程中取出来)
looper.prepra(),创建looper对象并保存在当前的线程中。
looper.loop(),抽取消息,从而在handmessage方法中回调结果。
在哪个线程获取到消息,不是基于在哪个线程创建handler,而是看looper保存在哪个线程里面。
如果采用强引用来使用handler(也就是new的方式),则可能发生内存泄漏,解决的办法是,采用静态内部内的方 式,使用弱引用来规避。
asynctask:简单使用以及三个泛型参数
底层原理是,new了一个work(继承了callable),然后new一个future(继承了runnable),把work当成参数传入 future中,然后调用onPreExecte();然后通过线程池开启一个任务,在future的runable方法中调用doInbackground(), 然后通过handler发送消息到主线程,调用onpostExecte。