本文章及子文章参考众多文档,及引用文档中的内容,感谢被引用的原作者们。
参考文档:
https://developer.android.google.cn/guide/components/processes-and-threads
https://www.jianshu.com/p/91552325f5a5
https://www.cnblogs.com/panhouye/p/6494753.html
https://blog.youkuaiyun.com/cshichao/article/details/8787357
启动一个app后,系统会启动一个linux进程(process),此进程包含一个线程(thread),成为UI线程(UI Thread)或主线程(Main Thread),通常一个app的所有组件都在此线程中运行,除非想做点其他的事情,那可以在AndroidManifest.xml通过android:process属性修改指定组件的进程。
进程可以全局设置,谷歌api原话如下:
此外,<application>
元素还支持 android:process
属性,用来设置适用于所有组件的默认值。
当内存不足,而其他更急于为用户提供服务的进程又需要内存时,Android 可能会决定在某一时刻关闭某个进程。正因如此,系统会销毁在被终止进程中运行的应用组件。当这些组件需再次运行时,系统将为其重启进程。
决定终止哪个进程时,Android 系统会权衡其对用户的相对重要性。例如,相较于托管可见 Activity 的进程而言,系统更有可能关闭托管屏幕上不再可见的 Activity 的进程。因此,是否终止某个进程的决定取决于该进程中所运行组件的状态。
但是往往不可能一个进程里跑完全部的操作,而且主线程又不是线程安全型的,像一些耗时的操作(如网络请求数据),放在主线程进行操作,容易阻塞主线程,造成ANR(Application Not Response)问题。
安卓提供了几种多线程操作方式来帮助app进行耗时操作
1,Handler
https://blog.youkuaiyun.com/u014436704/article/details/114021498
2,AsyncTask
https://blog.youkuaiyun.com/u014436704/article/details/114266352
3,HandlerThread+IntentService
https://blog.youkuaiyun.com/u014436704/article/details/114305478
4,Thread
https://blog.youkuaiyun.com/u014436704/article/details/114579057
5,ThreadPoolExecutor
https://blog.youkuaiyun.com/u014436704/article/details/114604864