美文网首页
Android进程

Android进程

作者: 小庄bb | 来源:发表于2018-07-24 20:30 被阅读32次

前言

进程是程序的一个运行实例,以区别于“程序”这一静态的概念,线程是CPU调度的基本单位。当前大部分的操作系统都支持多任务操作,这一特性让我们觉得多条任务同时进行。但是只有一个CPU核心的环境下同时运行是不可能实现的。它是操作系统采用分时的方法,为正在运行的多任务分配合理的,单独的CPU时间片断来实现的。那么在Android中程序和进程都是通过什么实现的呢?

正文

对于Android开发者来说,Android Studio这样的编辑器给项目的开发提供了极大的便捷性,开发者可以将大部分精力用来研究项目的设计。这也导致大部分开发者不太关心进程是什么,进而产生一些误区,如部分开发认为系统四大组件就是进程的载体。

四大组件与进程

上文提到,系统四大组件并不是进程的载体。那么它们和进程又有什么不能说的咪咪(斜眼笑)。为此,接下来将进行四个小实验。

  • 通过bebug一个小程序FirstActivity,观察它启动时的进程情况


    FirstActivity运行时进程.png

    我们可以看到处理main进程,还有几个Binder进程。而mian由ZygoteInt创建,创建出的进程为ActivityThread。

  • 通过bebug一个小程序FirstService,观察它启动时的进程情况


    FirstService运行时进程.png

    我们可以看到,同样的service也是寄存在Activity之中。Service启动时也需要两个Binder进程支持。

  • 通过FirstActivity启动一个SecondActivty,观察进程变化情况


    启动SecondActivity.png

    这里的进程列表几乎和FirstActivity单独启动时没有区别,同样的也在main进程运行。进程始终只有一个,当新的Activity被启动时,上一个Activity被压人栈,等待当前Activity结束时,又可以重新启动。

  • 在上一个实验的基础上论证同一个包中的两个组件是否共享数据
    由上述可以看出,无论是Activity还是Service都在同一个包下就意味着都在相同的进程运行。那么这里有一个猜想,既然是同一个进程,是不是共享内存呢?为验证该猜想,我们在FirstActivity中定义一个静态变量num,初始赋值为-1,在oncreate()方法中加入num = 2;,在SecondeActivity中输出num的值。如果不能共享则输出-1如果能共享则输出2
    验证结果.png
    验证结果说明,在同一个包里的组件可以共享内存数据。
独立进程运行

有的人就说了,我不,我就要我的两个Activity运行在不同的进程(傲娇脸)。小的惹不起,惹不起。这就介绍方法,心细的吃瓜群众一定注意到了,上面提到了“除了特殊标记的组件”这句话。android为在AndroidManifest.xml文件中的<activity>、<service>、<receiver>、<provider>四个组件标签中提供了android:process属性来表明这一组件想要运行在独立的进程中。也可以直接在<application>标签下使用android:process属性来只能想要的进程环境。

小节

  • 四大组件并不是进程的全部,他们只是进程的零件。
  • 一个组件启动后至少会有3个进程,一个主线程和两个Binder进程。
  • 在同一个包下的组件(除了特殊标记的组件),它们都将运行在相同的进程中。既然在同一个进程中,那么它们就可以共享进程的内存。

相关文章

网友评论

      本文标题:Android进程

      本文链接:https://www.haomeiwen.com/subject/gadymftx.html