在Service中新开线程和直接新开线程的区别与意义

FBI Warning:欢迎转载,但请标明出处:http://blog.youkuaiyun.com/codezjx/article/details/8854507,未经本人同意请勿用于商业用途,感谢支持!


为了了解这两者的区别,我们首先来了解一下Android的进程与生命周期


一、Android的进程与生命周期:

Android系统会尽可能长的延续一个应用程序进程,但在内存过低的时候,仍然会不可避免需要移除旧的进程。为决定保留或移除一个进程,Android将每个进程都放入一个“重要性层次”中,依据则是它其中运行着的组件及其状态。重要性最低的进程首先被消灭,然后是较低的,依此类推。重要性共分五层,依据重要性列表如下:

(1)前台进程

是用户操作所必须的,任一时间下,仅有少数进程会处于前台,这样的进程拥有一个在屏幕上显示并和用户交互的 activity 或者它的一个IntentReciver 正在运行。仅当内存实在无法供给它们维持同时运行时才会被杀死。一般来说,在这种情况下,设备依然处于使用虚拟内存的状态,必须要杀死一些前台进程以用户界面保持响应。

(2)可视进程

没有前台组件,但仍可被用户在屏幕上所见。当满足如下任一条件时,进程被认为是可视的:

●它包含着一个不在前台,但仍然为用户可见的activity(它的onPause()方法被调用)。这种情况可能出现在以下情况:比如说,前台activity是一个对话框,而之前的Activity位于其下并可以看到。

它包含了一个绑定至一个可视的activity的服务。

 可视进程依然被视为是很重要的,非到不杀死它们便无法维持前台进程运行时,才会被杀死。

(3)服务进程

是由startService() 方法启动的服务,它不会变成上述两类。尽管服务进程不会直接为用户所见,但它们一般都在做着用户所关心的事情(比如在后台播放mp3或者从网上下载东西)。所以系统会尽量维持它们的运行,除非系统内存不足以维持前台进程和可视进程的运行需要。

(4)背景进程

包含目前不为用户所见的activity(Activity对象的onStop() 方法已被调用)。这些进程与用户体验没有直接的联系,可以在任意时间被杀死以回收内存供前台进程、可视进程以及服务进程使用。一般来说,会有很多背景进程运行,所以它们一般存放于一个LRU(最后使用)列表中以确保最后被用户使用的activity最后被杀死。如果一个activity正确的实现了生命周期方法,并捕获了正确的状态,则杀死它的进程对用户体验不会有任何不良影响。

(5)空进程

不包含任何活动应用程序组件。这种进程存在的唯一原因是做为缓存以改善组件再次于其中运行时的启动时间。系统经常会杀死这种进程以保持进程缓存和系统内核缓存之间的平衡。


Android会依据进程中当前活跃组件的重要程度来尽可能高的估量一个进程的级别。比如说,如果一个进程中同时有一个服务和一个可视的activity,则进程会被判定为可视进程,而不是服务进程。

此外,一个进程的级别可能会由于其它进程依赖于它而升高。一个为其它进程提供服务的进程级别永远高于使用它服务的进程。比如说,如果A进程中的内容提供者为进程B中的客户端提供服务,或进程A中的服务为进程B中的组件所绑定,则A进程最低也会被视为与进程B拥有同样的重要性


二、在Service中新开线程和直接新开线程的区别

(1)若我们直接在Activity中新开一条线程来做耗时操作,当该Activity退出到桌面或其他情况时将成为一个背景进程

(2)若我们在Service中新启动线程,则此时Android会依据进程中当前活跃组件重要程度,将其判断为服务进程,优先级比(1)高。


三、总结:

因为运行着一个服务的进程重要级别总高于一个背景Activity,所以一个Activity以启动一个服务的方式启动一个长时间运行过程比简单的衍生一个线程来处理要好。尤其是当处理过程比Activity本事存在的时间要长的情况之下。我们以背景音乐播放和上传一个相机拍摄的照片至网站上为例。使用服务则不论Activity发送何种情况,都至少可以保证操作拥有“服务进程”的权限。在内存紧缺的情况下,能保证其不那么容易被杀死。这也正是广播接收器使用服务,而不是线程来处理耗时任务的原因。



### 如何在 VMware 中创建的虚拟机 #### 准备工作 确保已准备好操作系统镜像文件,如ISO文件。对于不同类型的系统有不同的准备方式。例如,要创建基于Linux的操作系统虚拟机,需先下载对应版本的ISO文件[^3]。 #### 启动VMware并选择创建模式 启动VMware应用序后,通过菜单选项「创建的虚拟机」进入向导页面。此时可以选择典型或自定义设置路径。为了更灵活地调整参数,推荐选用「自定义」模式[^2]。 #### 配置基本属性 - **硬件兼容性**:通常保持默认选项即可满足大多数情况下的需求。 - **安装源**:点击「浏览」按钮定位至之前准备好的ISO文件位置,以便后续引导安装过能够顺利读取所需数据。 #### 设置虚拟机名称保存路径 输入易于辨识的名字,并挑选合适的存储地点用于放置该虚拟机的相关文件。考虑到性能优化以及便于迁移等因素,建议避系统分区而是在其他磁盘建立专门目录存放这些资源[^1]。 #### 调整硬件资源配置 针对不同的应用场景合理分配计算资源至关重要: - 对于处理器部分,默认配置一般可以接受;如果有更高要求,则可根据实际情况增加CPU核心数目的设定。 - 关于内存大小的选择,至少应保证有2GB以上的空间留给虚拟环境运行,特别是当涉及到图形界面交互时更为重要。 - 网络连接方面同样维持初始状态往往已经足够应对常规联网任务的需求。 - I/O控制器类型可依据具体情形决定是否采用IDE接口形式以增强某些特定设备的支持度。 #### 定义磁盘特性 接下来就是规划好用来模拟实际物理硬盘行为的数据容器——即所谓的“虚拟磁盘”。这里需要注意的是,如果计划在此基础上构建完整的操作系统实例的话,那么所选定的目标卷应当为空闲状态以免造成不必要的破坏风险。接着按照提示完成关于尺寸规格(比如不超过5GB)、文件分割策略等方面的指定操作。 最后确认无误之后按下「完成」键结束整个建流。这样就成功搭建起了一个的空白虚拟平台等待进一步部署目标OS及其他软件组件了。 ```bash # 示例命令行指令(仅作为概念展示用途) vmrun create /path/to/new_vm.vmx "/path/to/guest_os.iso" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值