Android的进程等级】的更多相关文章

Android五个进程等级 1.前台进程(Foreground process): 用户当前工作所需要的.一个进程如果满足下列任何条件被认为是前台进程: 正运行着一个正在与用户交互的活动(Activity对象的onResume()方法已经被调用). 寄宿了一个服务,该服务与一个与用户交互的活动绑定. 有一个Service对象执行它的生命周期回调(onCreate().onStart().onDestroy()). 有一个BroadcastReceiver对象执行他的onReceive()方法.…
Android五个进程等级 1.前台进程(Foreground process): 用户当前工作所需要的.一个进程如果满足下列任何条件被认为是前台进程: 正运行着一个正在与用户交互的活动(Activity对象的onResume()方法已经被调用). 寄宿了一个服务,该服务与一个与用户交互的活动绑定. 有一个Service对象执行它的生命周期回调(onCreate().onStart().onDestroy()). 有一个BroadcastReceiver对象执行他的onReceive()方法.…
参考文章: http://www.apkbus.com/android-104940-1-1.htmlhttp://blog.sina.com.cn/s/blog_3e3fcadd0100yjo2.html 一.理论: Android采取了一种有别于Linux的进程管理策略,有别于Linux的在进程活动停止后就结束该进程,Android把这些进程都保留在内存中,直到系统需要更多内存为止.这些保留在内存中的进程通常情况下不会影响整体系统的运行速度,并且当用户再次激活这些进程时,提升了进程的启动速度…
第11讲Android中进程及其优先级 进程与线程: 进程:操作系统结构的基础,资源分配的最小单元,一个操作系统包括多个进程: 线程:线程存在于进程当中,是操作系统调试执行的最小单元,一个进程包括多个线程. 当一个android应用启动,系统会启动一个进程和一个主线程来运行这个应用.Android系统会尽力保持这个进程的稳定和安全,但是,在某些特殊情况下,总会移除旧的进程来回收内存,用于新的或者更重要的进程.当要回收内存的时候,系统要决定哪些应该保留,哪些应该杀掉.因此在android进程管理中…
Android 5 个进程等级 1. Foreground Process : 2 .Visible Process : 3. Service Process : 4. Background Process : 5. Empty Process Android 进程如何启动? 简单的说:通过远程服务PackageManagerService,然后通过PackageManager去加载我们程序的AndroidMenifest.xml文件,并找到LAUNCHER的那个Activity,并把它实例.…
什么是 Binder ? Binder是Android系统中进程间通讯(IPC)的一种方式,也是Android系统中最重要的特性之一.Binder的设计采用了面向对象的思想,在Binder通信模型的四个角色里面:他们的代表都是"Binder",这样,对于Binder通信的使用者而言,Server里面的Binder和Client里面的Binder没有什么不同,一个Binder对象就代表了所有,它不用关心实现的细节,甚至不用关心驱动以及SM的存在:这就是抽象. 通常意义下,Binder指的…
进程和线程 当一个应用程序第一次启动的时候,Android会启动一个Linux进程和一个主线程(即UI线程:主要负责处理用户的按键事件.触屏事件及屏幕绘图事件等).默认情况下,所有该程序的组件都将在该进程和线程中运行.同时,Android会为每个应用程序分配一个单独的Linux用户.Android系统视图尽可能长时间地保持应用程序进程,只有在内存资源不足时,Android会尝试停止一些进程从而释放足够的资源给其他新的进程使用,也能保证用户正在访问的当前进程有足够的资源去及时地响应用户的事件.An…
转自:http://blog.csdn.net/lyf_007217/article/details/8542359 帖子写的很好.看来一遍,试了一遍,感觉太有意义.必须转过来! android中跨进程通讯的4种方式 由于android系统中应用程序之间不能共享内存.因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些.在android SDK中提供了4种用于跨进程通讯的方式.这4种方式正好对应于android系统中4种应用程序组件:Activity.Content Provider.B…
原文链接:http://www.cnblogs.com/feidu/p/8057012.html 当Android跨进程启动Activity时,过程界面很黑屏(白屏)短暂时间(几百毫秒?).当然从桌面Lunacher启动一个App时也会出现相同情况,那是因为App冷启动也属于跨进程启动Activity.为什么没会出现这种情况呢?真正元凶就是Android创建进程需要准备很多资源,它是一个耗时的操作. 黑屏(白屏)原因 当A进程启动B进程中的一个Activity时,Android系统会先有zygo…
前言 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一.Android系统的运行由大量相互独立的进程相互协助来完成的,所以Android进程间通信问题,是做好Android开发高级工程师必须要跨过的一道坎.但是,我们是否真的清楚,Android中都有哪些方式实现跨进程通信呢?这些方式都有哪些优缺点?如何选择这些通信方式?Binder是什么?为什么要引入Binder?Binder是这么样实现跨进程通信的?AIDL是什么?AIDL和Binder又有什么关系呢?....…
首先:为什么要跑在 com.android.phone 进程 这还用问,在同一个进程里就能够干非常多事情了这是黑客行为 为什么能跑在统一进程? Google 在设计 Dalivk 虚拟机的时候就考虑到了将多个 apk 放在同一个进程执行,可是实际中,我们每安装一个应用都是跑在独立进程.独立虚拟机.事实上也能够将你开发的全部应用跑在统一进程,统一虚拟机的 跑在同一进程的条件 1.同一签名 2.UID相同 'android:sharedUserId="android.uid.phone"'…
1. android.os.Process.killProcess(pid) 只能终止本程序的进程,无法终止其它的 具体代码如下: ?12 Process.killProcess(Process.myPid()); Process.killProcess(Process.myPid()); 2. System.exit(int code) 例如: System.exit(0); 该方法只能用于结束当前进程自身,在程序遇到异常,无法正常执行时,可以 通过这个方法强制退出. 需要注意的是: andr…
本文转载自:https://blog.csdn.net/myfriend0/article/details/80016739 创建Android守护进程(底层服务) 前言 Android底层服务,即运行在 linux 下的进程,是 Android 系统运行的基础,完成 Android 或者说计算机最基本的功能.比如连接服务(包括 WIFI,BT 等等):比如 Android 的 adb 功能:比如存储监控等等.没有这些底层服务,上层也就没有了对应的功能. Android 底层服务往往是常驻内存,…
android 不同进程间的调用  AIDL 实现通讯服务       近期对aidl android 不同进程间的调用,不同运用间的调用做了一些尝试: 过程例如以下: 1:首先在要被调用的程序里写好服务service 详细代码例如以下: package com.jiaruihua.service.demo; import android.app.Service; import android.content.Intent; import android.os.Binder; import an…
android中进程的优先级…
(懒人近期想起我还有csdn好久没打理了.这个android init躺在我的草稿箱中快5年了.略微改改发出来吧) RC文件格式 rc文件是linux中常见的启动载入阶段运行的文件.rc是run commands的缩写.基本上能够理解为在启动阶段运行的一些列命令.android init进程启动时,也会运行此启动脚本文件,init.rc.init.rc的写法稍有点复杂,具体可參考 /system/core/init下的readme文件.脚本基本组成是由四类,为: commands: 命令 act…
1.foreground process     正处于activity resume状态     正处于bound服务交互的状态     正处于服务在前台运行的状态(StartForeGround()被调用)     Service生命周期正在被执行(onCreate(),onStart(),onDestroy())     BroadcastReceiver正在执行onReceive()方法     杀死foreground需要用户响应,因为这个安全优先级是最高的     是用户操作所必须的…
1.foreground process     正处于activity resume状态     正处于bound服务交互的状态     正处于服务在前台运行的状态(StartForeGround()被调用)     Service生命周期正在被执行(onCreate(),onStart(),onDestroy())     BroadcastReceiver正在执行onReceive()方法     杀死foreground需要用户响应,因为这个安全优先级是最高的     是用户操作所必须的…
一.Foreground Process(前台进程,优先级别最高) 1.正处于 Activity Resume() 状态 2.正处于与 bound 服务交互的状态 3.正处于服务在前台运行的状态(startForeground()被调用) 4.Service 生命周期函数正在被执行(onCreate(),onStart(),onDestory()) 5.BoradcastReceiver 正在执行 onReceive() 方法 杀死 Foreground Process 需要用户响应,因为这个安…
当一个Android应用程序组件启动时候,如果此时这个程序的其他组件没有正在运行,那么系统会为这个程序 以单一线程的形式启动一个新的Linux 进程. 默认情况下,同一应用程序下的所有组件都运行再相同的进程和线程(一般称为程序的“主”线程)中.如果一个应用组件启动但这个应用的进程已经存在了(因为 这个应用的其他组件已经在之前启动了),那么这个组件将会在这个进程中启动,同时在这个应用的主线程里面执行.然而,你也可以让你的应用里面的组件运行在 不同的进程里面,也可以为任何进程添加额外的线程. AD:…
本文转载自:https://blog.csdn.net/freekiteyu/article/details/70082302 Android-Binder进程间通讯机制 概述 最近在学习Binder机制,在网上查阅了大量的资料,也看了老罗的Binder系列的博客和Innost的深入理解Binder系列的博客,都是从底层开始讲的,全是C代码,虽然之前学过C和C++,然而各种函数之间花式跳转,看的我都怀疑人生.毫不夸张的讲每看一遍都是新的内容,跟没看过一样.后来又看到了Gityuan的博客看到了一…
进程和线程 如果某个应用程序组件是第一次被启动,且这时应用程序也没有其他组件在运行,则android系统会为应用程序创建一个包含单个线程的linux进程.默认情况下,同一个应用程序的所有组件都运行在同一个进程和线程里(叫做"main"主线程).如果组件启动时,已经存在应用程序的进程了(因为应用程序的其它组件已经在运行了),则此组件会在已有的进程和线程中启动运行.不过,可以指定组件运行在其他进程里,也可以为任何进程创建额外的线程. 本文讨论进程和线程是如何在Android应用程序中发挥作…
这几天,一位做Android的朋友和我探讨了一个问题:因为业务需求的原因,在自己的App长时间不使用被kill掉之后,如何让它再重新运行起来. 虽然,我本身很排斥这种做法,有点类似“流氓软件”的行为,但是还是查询了资料,大概想了一个实现的方式,和大家一起分享. 其实,这个问题可以简单的看作:如何编写一个守护进程. 使用C/C++编写一个守护进程的.so程序,Android端通过JNI调用.该进程监听当前的目标程序进程,如果目标程序被kill掉了,再重新start一下,大概的思路就是这样.伪代码如…
当应用不再使用时,通常需要关闭应用,可以使用以下三种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程.android.os.Process.killProcess(android.os.Process.myPid()) 接下来实践一下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas…
由于android系统中应用程序之间不能共享内存.因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些.在android SDK中提供了4种用于跨进程通讯的方式.这4种方式正好对应于android系统中4种应用程序组件:Activity.Content Provider.Broadcast和Service.其中Activity可以跨进程调用其他应用程序的Activity:Content Provider可以跨进程访问其他应用程序中的数据(以Cursor对象形式返回),当然,也可以对其他应…
常说的主线程(UI线程)是什么? 当一个Android程序刚启动的时候,我们的android系统就会启动一个带有一个单一线程的linux进程.默认情况下,所有的组件比如Activity都运行在同样的一个进程和线程当中,这个线程就叫做主线程或者UI线程.也就是说,默认情况下,app启动的时候会创建一个线程,这个线程就叫做主线程.因为大部分功能是进行UI上的操作,所有也叫做UI线程. 关于为什么叫主线程请参考:Android 主线程之旅--PSVM(public static void main.…
1. Android 后台任务型App多进程架构演化 http://www.jianshu.com/p/4ac1f373e8cd 2. 关于 Android 进程保活,你所需要知道的一切 http://www.jianshu.com/p/63aafe3c12af# 3. Android App 不死之路 http://www.jianshu.com/p/a4a6222654a0…
Android在设计理念上强调组件化,组件之间的依赖性很小.我们往往发一个Intent请求就可以启动另一个应用的Activity,或者一个你不知道在哪个进程的Service,或者可以注册一个广播,只要有这个事件发生你都可以收到,又或者你可以查询一个ContentProvider获得你想要的数据,这其实都需要跨进程通信的支持.只是Android将其封装的如此简单,应用开发者甚至完全不用关注它是不是和我在一个进程里. 我们有没有想过安全性问题,如此简单就可以跨进程的访问,安全性问题怎么保证.本来每个…
1.finish()方法 finish是Activity的类,仅仅针对Activity,当调用finish()时,只是将活动推向后台,并没有立即释放内存,活动的资源并没有被清理:调用finish()方法会执行Activity.onDestroy()方法,结束Activity生命周期 在开发android应用时,常常通过按返回键(即keyCode == KeyEvent.KEYCODE_BACK)就能关闭程序,其实大多情况下该应用还在任务里运行着,其实这不是我们想要的结果. 2. Dalvik V…
init进程,其程序位于根文件系统中,在kernle自行启动后,其中的 start_kernel 函数把根文件系统挂载到/目录后,在 rest_init 函数中通过 kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND); 建立PID为1的内核进程,随后调用 run_init_process 来加载boot分区中根文件系统里的init程序来跳转到用户空间运行.init是第一个运行在用户空间的进程.之后很多的系统服务都由init进程fo…