UI线程处理耗时操作会导致ANR,UI线程阻塞
访问磁盘、图片解码、网络请求,,,在工作线程中做,,,单独的后台进程?
后台处理机制:Services,线程、线程池、WorkManager
Service和线程的区别:
线程是程序运行的最小单元,一个进程开启很多线程,,可以进行异步操作,在UI主线程开启一个工作线程,不会影响UI主线程
service是android的运行机制,无特殊处理运行在主线程上,
如果是远程的Service,会运行在独立进程的MainThread上
线程,运行独立,activity finish之后,如果没有主动的停止Thread run方法,线程会一直运行,导致内存泄漏
线程开启子线程,耗时操作不会阻塞主线程的运行
Services,播放音乐,,运行在主线程,,做耗时操作还是会导致ANR的产生,,后台操作,而非后台线程,不依赖于UI,
Activity有UI界面,如果Activity销毁或者程序关闭,Activity界面不见了,Service只要进程还在,就可以继续运行,,心跳服务、网络连接等,用Service
在service中创建一个子线程,做耗时操作,当activity被销毁之后,service还在,创建子线程还在运行,activity可以放心的销毁
activity很难对子线程进行控制,当activity销毁之后,没有办法获得之前创建的子线程的实例
线程池、
Services:保活、长期在系统运行、比如地图定位、音乐等,主界面不在了还在运行
WorkManager:上传日志到服务器,推迟工作的,,延时或者在预定的时间内完成,,,响应系统的某些机制(网络状态、电池状态、开关机等),
立刻完成
线程池:立刻完成