赞
踩
默认下,同一个应用的所有组件都运行在同一个进程中。当然也可以在manifest清单文件中设置组件运行的进程。
组件元素 activity、service、receiver、provider,都有一个process属性可以指定组件运行在哪个进程中。这个属性可以设置为每个组件运行在自己的进程中,或者设置进程同名与其他一些组件共享一个进程。
Android会在某些时刻决定关闭一个进程,比如内存剩余较小并且其他进程更迫切需要内存时,某些进程会被关闭时,且进程中的组件们都被销毁.如果重新需要这些组件工作时,进程又会被创建出来。
系统不会为每个组件的实例分别创建线程。所有运行于一个进程的组件都在主线程(UI线程)中被实例化,并且系统对每个组件的调用都在这个线程中派发,且只能在UI线程中管理的你的界面。
可以 线程 进程 应用 打个比方:
线程(Thread):流水线 、 进程(process): 车间 、 应用:工厂
为什么使用多线程?
线程如同一条流水线,当我们执行一些比如网络连接或数据库请求这样的耗时操作,会造成该线程阻塞。而我们又需要在主线程(UI线程)中对整个界面进行响应。所以为了不阻塞UI线程,提高应用程序的性能,需要使用多线程来操作。
为什么使用多进程?
在Android系统中,每个进程都有一个内存限制。如果一个应用可以多有个进程,那么这个应用可以有更多的内存来运行,使我们的应用内存限制变大,优化程序的速度。
前台进程(Foreground process):
A. 拥有用户正在交互的 Activity( onResume()状态)
B. 正在与bound绑定服务交互的 Activity
C. 正在“前台”运行的 Service(startForeground()被调用)
D. 生命周期函数正在被执行的 Service(onCreate()、onStart() 或 onDestroy())
E. 正执行 onReceive() 方法的 BroadcastReceiver
(该进程优先级别最高,杀死前台进程需要用户的响应。)
可见进程(Visible process):
该进程并不是在最前端,并没有得到焦点,但是我们却能看到它们。
A. 拥有不在前台、但仍对用户可见的 Activity(例如弹出一个对话框的Activity)
B. 绑定到可见进程(或前台进程)中的Activity 的 Service
服务进程(Service process):
A. 正在运行的通过 startService() 启动的,且不属于上述两个更高进程状态的Service
后台进程(Background process):
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。