Processes

前提:

①组件(Components):Activities、Services、Content Providers、Broadcast Receivers.

②进程(Processes)、线程(Threads)

当一个应用程序组件启动,且没有其他组件正在运行时,安卓系统会为这个应用启动一个新的进程和一个干活的单线程。默认情况下,同一应用程序的所有组件运行在同一进程和线程(即,主线程)。

如果一个应用程序组件启动,且该应用程序已有一个进程(由于该应用程序的另外一个组件已存在),那么这个组件将在已有进程中启动,并使用同一线程。

当然,我们也可以安排应用程序内的不同组件在不同的进程里运行,另外也可以为任一进程再创建额外的线程。

Processes

默认情况下,同一应用的所有组件都运行在同一进程中,并且大多数应用程序就应该这个样子。

如果你觉得需要控制某一特定组件归属于某个进程,那么可以在manifest文件中指定。

manifest的各类组件元素(<activity>、<service>、<receiver>、<provider>)项,都支持android:process属性,可以为组件指定一个进程。我们可以设置这个属性,以便每个组件运行在自己的进程里,或者一些组件共享一个进程而其他组件运行在别的进程里。我们也可以设置这个属性,以便不同应用的组件运行在同一进程里--前提是这些应用共享同一Linux用户ID且用同一证书签名。

另外,<application>元素也支持android:process属性,用于设置一个应用于所有组件的默认进程。

Android可能会在某一时刻关闭一个进程,比如说,内存吃紧且其他优先级跟高的进程有需要的时候。应用程序运行所在的进程被杀掉导致组件被销毁,当然组件有需要的话进程会再次启动。

当决定哪些进程要被杀掉时,android系统会权衡进程与用户的关联度。

Process lifecycle

Android系统会尽可能长得保留一个应用的进程,但最终还是需要移除旧的进程来回收内存,分配给新的进程或更重要的进程。

重要性分级分五级:

Foreground process:

一个用户正在操作所需的进程。一般满足一下几个条件之一的就认为是foreground:

①持有一个用户正在交互的Activity.

②持有一个Service,且与一个用户正在交互的Activity绑定。

③持有一个Service,且调用了它的startForeground()方法。

④持有BroadcastReceiver,且正在调用它的onReceive()方法。

Visible process:

一个进程没有前台展示的组件,但仍能响应用户可见界面内容。满足一下几条中的一条即被认为是visible:

①持有一个非最前端的Activity,但仍然对用户可见,比如一个Activity上弹出一个对话框。

②持有一个Service,且绑定一个visible的Activity或foreground的Activity。

Service process:

一个进程调用了startService方法运行了一个Service,但没在前面提到的两种高优先级的范畴内。、

虽然service processes没有跟用户可见行为扯上关系,但通常会正在做一些用户在乎的事,比如后台播放音乐,后台网络下载,所以系统会保留他们,除非没有足够内存与前面两种高优先级的进程共存,才会杀掉该进程。

Background process:

通常有很多background processes在运行,所以它们都被保存在LRU(least recently used:最近最少使用)列表中,从而确保最近被用户查看过的Activity所在的进程最后才杀掉。

Empty process:

一个进程没有持有任何活跃的组件。保留该进程的目的只有一种可能,就是作为缓存,以便下次启动时更快。系统通常会杀掉这类进程。

时间: 2024-10-08 05:10:54

Processes的相关文章

ORA-00020:maximum number of processes (150) exceeded 错误解决方法

解决方案 1.查看进程数 SQL> show parameter proce NAME                                 TYPE        VALUE------------------------------------ ----------- --------------aq_tm_processes                      integer     1db_writer_processes                  integer

Monitoring Processes with Supervisord

If you're interested in more of this type of content, check out the Servers for Hackers eBook! As some point you'll likely find yourself writing a script which needs to run all the time - a "long running script". These are scripts that shouldn't

Android学习笔记之进程(Processes)和任务(tasks)

进程(Processes)和任务(tasks) 所有的对象都需要内存和一个虚拟机来存活.一个process就是OS为了你的应用程序存活而开辟的空间,它也是用来让你的应用程序运行起来的必要条件. 进程可能拥有资源文件,这些资源文件都由OS像管理内存一样来管理.也可能拥有网络socket或者可以打开的文件. 进程也必须包含至少一个运行线程.在Android上,你的进程肯定会包含一个在运行的Dalvik 虚拟机 . 然而有一些隐藏的例外情况,一般来说每一个应用程序组件都会与一个进程相连.你的应用程序被

【原】The Linux Command Line - Processes

ps - report a snapshot of current processes top - display tasks job - list active jobs bg - place a job in the background fg - place a job in the foreground kill - send a signal to a process killall - kill processes by name shutdown - showdown or reb

ORA-00064 processes设置过大导致数据库打不开

processes设置过大导致数据库打不开 在processes设置过大后,可能导致数据库打不开,开启数据库后会报错: SQL> startup ORA-00064: object is too large to allocate on this O/S (1,7746920) SQL> 解决办法: 首先找到pfile位置,然后从pfile启动数据库; startup pfile=$ORACLE_BASE/admin/SID/pfile/init.ora.49201715235' pfile一

-bash: ulimit: max user processes: cannot modify limit: Operation not permitted

安装oracle时候在创建oracle用户后,切换oracle用户时,报如下错 [[email protected] ~]# su - oracle-bash: ulimit: max user processes: cannot modify limit: Operation not permitted 经查看结果是 忘记修改/etc/security/limits.conf 关于/etc/security/limits.conf解释及应用,看我转载如下文章 limits.conf的格式如下:

Show All Running Processes in Linux

ps由于历史的原因,所以很奇特,有些命令必须加"-",比如: ps A 上面的写法是错误的 ********* simple selection ********* ********* selection by list ********* -A all processes -C by command name -N negate selection -G by real group ID (supports names) -a all w/ tty except session le

How to sync between processes rather than threads

# lock across processe.g. Server handles request from different clients, there clients are essentially different processes, they could potentially write to the same piece of data(e.g. same records in table), so we need to make sure these access well

Cox Processes

以下翻译自: Recent Applications of Point Process Methods in Forestry Statistics 该文以林业木材统计为背景,分析了相关的统计学应用.下面主要翻译第6部分: 点过程 Cox过程 对于树木模型来说,Cox模型是一类十分灵活而且重要的方法.Cox过程可以看做是two-stage random mechanism;因此"双随机过程"这个名字被经常使用.模型第一步,对非负函数λ(x)进行采样,随后计算参数为λ(x)的非齐次泊松过

Scheduled Jobs with Custom Clock Processes in Java with Quartz and RabbitMQ

原文地址: https://devcenter.heroku.com/articles/scheduled-jobs-custom-clock-processes-java-quartz-rabbitmq Table of Contents Prerequisites Scheduling jobs with Quartz Queuing jobs with RabbitMQ Processing jobs Running on Heroku Further learning There are