我答同行问(续一)

本片文章出自http://blog.csdn.net/andywuchuanlong,转载请说明出处,谢谢!

我答同行问序列目录http://blog.csdn.net/andywuchuanlong/article/details/44194043

1、四大组件全部结束销毁,为什么应用依然在后台运行?为什么不能真正的退出应用?

2、Android中的service是在后台运行的服务,貌似线程也是在后台异步执行,为什么service不能被线程替代?

想要回答第一个问题就需要扯到Android内存管理机制。Android内存的管理有自己的一套机制,它有运行时和自己的虚拟机来管理自己的进程。java应用程序,程序代码运行结束,这个进程就会跟着销毁,而Android程序,就算所有的程序代码运行完毕,所在的进程也不见得会被销毁终止,也就是说Android有它自己管理进程生命周期的一套方式。换句话说Android系统可以自己控制进程的生命周期。当系统在遭遇内存瓶颈的时候,会通过杀死或者停止一些优先级比较低的进程,从而释放内存保证其他进程的运行,但是当系统内存足够的情况下,就算是一个空进程,系统也有可能不会对这个空进程下毒手,因为Android为了优化应用下一次的启动速度,这些比前台进程优先级低的会被缓存在内存中。

上面提到了前台进程和空进程的概念,在Android中有五种进程的概念,优先级依次降低

1、前台进程:一个用户当前工作所需要的,例如:

当有一个Activity正与用户交互,onResume方法被调用,广播在执行onReceive方法,service在执行onCreate等方法,这个应用所在进程就可以视为前台进程,也称为活动进程。

2、可视进程

没有任何前台组件的进程,但是却是用户可以看到的,比如说Activity的onPause方法被调用,此时界面上呈现的是一个对话框

3、服务进程

用startService()启动的服务,但是不满足前面两类

4、后台进程

一个保存着当前用户不可视的进程,Activity的onStop被调用

5、空进程

是一个没有保持活跃的应用程序组件的进程。保持这个进

程可用的唯一原因是作为一个

cache

以提高下次启动组件的速度

是一个没有保持活跃的应用程序组件的进程。保持这个进

程可用的唯一原因是作为一个

cache

以提高下次启动组件的速度

是一个没有保持活跃的应用程序组件的进程。保持这个进

程可用的唯一原因是作为一个

cache

以提高下次启动组件的速度

不符合以上的条件的进程,通常来说空进程的存在是为了缓存在内存中以保证下一次的启动速度。

第二个问题涉及到的就是上面所述的进程问题

应用中的线程是由应用进程派生出来的,当这个进程从可视进程变为后台进程的时候,系统可能由于内存的压力会将其销毁,那么这些线程也会跟着销毁。然后service所在的进程会被作为一个服务进程运行在后台,从优先级可知,服务进程的优先级优先于后台进程,当内存不足时,后台进程会首先被销毁。

时间: 2024-10-28 20:07:33

我答同行问(续一)的相关文章

我答同行问(续四)

本片文章出自http://blog.csdn.net/andywuchuanlong,转载请说明出处,谢谢!  我答同行问序列目录http://blog.csdn.net/andywuchuanlong/article/details/44194043 5.为什么ScrollView中嵌套了ViewPager后,viewPager高度出现问题并且滑动失效? ScrollView是可以滑动的,而viewPager也是可以进行滑动的,虽然说两者嵌套不违反view的嵌套原则,但是Android系统里面

我答同行问(续五)

本片文章出自http://blog.csdn.net/andywuchuanlong,转载请说明出处,谢谢!  我答同行问序列目录http://blog.csdn.net/andywuchuanlong/article/details/44194043 6.在项目中美工一般给我们切几套图,才能够适配Android碎片化的终端? 这个问题是属于Android终端屏幕适配的问题.读者可以访问我下列的文章<Android屏幕适配>一文,便大概可以回答这个问题了. 我再此处只想讲述下我在项目中的适配是

我答同行问(续三)

本片文章出自http://blog.csdn.net/andywuchuanlong,转载请说明出处,谢谢!  我答同行问序列目录http://blog.csdn.net/andywuchuanlong/article/details/44194043 4.网络请求的时候,我们都需要开启线程,那么是使用asyncTask还是使用Thread+Handler模式呢? 网络请求是每个app都需要进行的,很多人会使用asyncTask,也有人喜欢Thread+Handler,下面我按照我的想法讲解一下

我答同行问(续二)

本片文章出自http://blog.csdn.net/andywuchuanlong,转载请说明出处,谢谢!  我答同行问序列目录http://blog.csdn.net/andywuchuanlong/article/details/44194043 3.使用View.inflate(context, resource, root)加载布局文件的时候,如果root为null,为什么布局文件的根节点设置的属性例如外边距.高度等都不起作用? 分析这个问题的时候需要从远源码进行分析了,假设参数roo

我答同行问

    本片文章出自http://blog.csdn.net/andywuchuanlong,转载请说明出处,谢谢! 之前遇到同行问的一些问题,能记住的我都将其写出来,供初学者参考.问题如下: 1.四大组件全部结束销毁,为什么应用依然在后台运行?为什么不能真正的退出应用? 2.Android中的service是在后台运行的服务,貌似线程也是在后台异步执行,为什么service不能被线程替代? 3.使用View.inflate(context, resource, root)加载布局文件的时候,如

答读者问(2)

五一节回来,打开邮箱,我又看到一些读者发过来的邮件.在此,我挑选了一封一位在校研究生的邮件进行回复.回复的内容仅是我个人结合自身经历所表达出的观点,不当之处,还请批评指正. 邮件部分内容如下: 师哥你好, 我是CSDN的XXX,XXX大学的研二学生,我现在感觉自己很浮躁,感觉每天恍恍惚惚的,学什么都不能集中注意力,知道自己有很多的东西需要学,有很多的事需要干,但就是踏实不下来. 主要是存在的问题如下: 1.小论文还没发表,每天被这个事情牵涉一些精力,看书的时候有的时候想起小论文还没发表,心思就没

答读者问(7):有关实习、毕业论文及软件开发和测试的关系等问题

最近收到一位研究生朋友的邮件,让我想到自己研究生毕业之前,也曾有过很多的疑惑,希望得到过来人的解答.互联网不仅是我们最好的老师,同时也是最好的桥梁.我们都要感谢并善于利用它. 闲话不说,言归正传.邮件原文如下: 周前辈,您好 我是XXX研究生,我叫XXX.专业是信息与通信工程.现在研二,过了暑假马上就研三了.我在CSDN上无意间看到您的一些文章,写的很好,感触很多.所以就一直在关注您! 下面我简单说下我的情况,我本科和研究生到目前,还没有工作过,也没有实习过.这个暑假,我找了一个实习,是XXX公

答读者问(8):有关Java学习的相关问题

最近,我收到一位研究生朋友的邮件,大致内容如下: 周老师您好,我是XXX大学软件工程专业的一名研究生我叫XXX,学习的方向是java,有些问题不知道周老师能否帮我解惑下,在此谢谢老师! 1.我应该专注于后台的学习么?我在实际学习中,感觉到前台和后台也是分不开的总要涉及到,学习的过程中我学习了SSH大量的知识,再回头看看前台的一些技术jsp,html,css,jQuery感觉技术太多了,需要大量的练习记忆,不知道到底应该如何学习这些知识? 2.精通SSH(在此以SSH举个例子)等等技术到底需要个什

答读者问(5):有关数学对程序员的作用、研发工作岗位要求和实习对找工作的影响等问题

最近,有很多读者通过微博.微信与本人交流.感觉大家对于学习.对于技术都非常的有热情,让我也学到了很多东西. 我提取了几个大家比较关心的问题予以答复,请有相同疑问的朋友参考一下. 问题1:数学对程序员重要吗? 答复:要回答这个问题,我举一个身边的例子. 我们项目组有两个同时入职的员工(比我晚一年入职),一个是研究生毕业,一个是本科毕业.前者在校成绩很好,几乎每门数学课都考了90分以上:后者在校成绩马马虎虎,但据说写程序很厉害.他们同时进行入职培训,同样有指导老师教,同时转正.大半年之后,我无意间打