一、进程
Android是一个多用户,多任务系统,可以并行运行多个应用程序,应用程序努力争取CPU时间来执行自己的任务。
每个应用运行在一个从Zygote复制的独立linux进程中。默认情况下,所有的Android组件运行在相同的进程中,进程的名字与Android Application Menifest文件中定义的包名一致。
Linux内核会公平的为每个应用分配CPU时间片。Android操作系统努力去维护应用尽可能长时间的运行,但是,当可获取内存变低时,会killing优先级低的应用来释放资源。
Android应用的优先级分为以下几种,从高到低:
1、Foreground Process。
2、Visible Process。
3、Service Process。
4、Background process。
5、Empty process。
Android的应用在安装时会被分配一个唯一的Linux User ID(UID),这样,它的进程会运行在一个sandboxed环境中,会将应用的数据和代码和其它应用隔离。在有些情况下,一个应用可以显式的与其它应用共享UID,来访问它们的数据。
二、线程
在一个Android进程中,可以有多个线程。一个进程中的多个线程可以共享进程中的数据,也可以有自己独立的存储空间来存放自己的数据。
当应用进程启动时,除了DVM housekeeping线程,系统会创建一个main线程用来和UI交互,所以main线程又被称为UI Thread。它会处理UI事件,保证应用的响应,因此,你需要避免在main Thread中处理耗时的任务,而将其放在独立的线程中。这些任务通常包括:网络交互, 读写文件, 图像和视频处理,复杂的数学计算,文字处理,编解码等。 因此,我们需要管理进程之间的协作和数据共享。