文章转载至CSDN社区罗升阳的安卓之旅,原文地址: http://blog.csdn.net/luoshengyang/article/details/6747696 Android 应用程序框架层创建的应用程序进程具有两个特点,一是进程的入口函数是ActivityThread.main,二是进程天然支持Binder进程间通信 机制:这两个特点都是在进程的初始化过程中实现的,本文将详细分析Android应用程序进程创建过程中是如何实现这两个特点的. Android应用程序框架层创建的应用程序进程…
前言 在前篇中我们讲到了Android应用程序进程启动过程,这一篇我们来讲遗留的知识点:在应用程序进程创建过程中会启动Binder线程池以及在应用程序进程启动后会创建消息循环. 1.Binder线程池启动过程 我们首先来看RuntimeInit类的zygoteInit函数,如下所示 frameworks/base/core/java/com/android/internal/os/RuntimeInit.java 注释1处会在新创建的应用程序进程中创建Binder线程池 2.消息循环创建过程 f…
在此前我讲过Android系统的启动流程,系统启动后,我们就比较关心应用程序是如何启动的,这一篇我们来一起学习Android7.0 应用程序进程启动过程,需要注意的是“应用程序进程启动过程”,而不是应用程序启动过程.关于应用程序启动过程,我会在后续系列的文章中讲到. 1.应用程序进程概述 要想启动一个应用程序,首先要保证这个应用程序所需要的应用程序进程已经被启动.ActivityManagerService在启动应用程序时会检查这个应用程序需要的应用程序进程是否存在,不存在就会请求Zygote进…
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6768304 在Android系统中,所有的应用程序进程以及系统服务进程SystemServer都是由Zygote进程孕育 (fork)出来的,这也许就是为什么要把它称为Zygote(受精卵)的原因吧.由于Zygote进程在Android系统中有着如此重要的地位,本文 将详细分析它的启动过程. 在前面一篇文章Android应用程序进程启动过程的源…
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6703247 上文介绍了Android应用程序的启动过程,即应用程序默认Activity的启动过程,一般来说,这种默认 Activity是在新的进程和任务中启动的:本文将继续分析在应用程序内部启动非默认Activity的过程的源代码,这种非默认Activity一般 是在原来的进程和任务中启动的. 这里,我们像上一篇文章Android应用程序启动过…
1.儿子Activity在启动过程中的流程组件 在Android Activity启动过程http://blog.csdn.net/jltxgcy/article/details/35984557一文中,我们已经具体分析了Activity的启动过程,对于子Activity组件在进程内的启动过程.我们仅仅分析它们之间的不同. 主要是2处.1是不须要创建新的任务栈.2是不须要创建新进程和子线程.表如今上一篇文章的总图中.就是没有第4步.并且第5步指向的Laucher子线程. 第1点,体如今例如以下代…
1.Zygote启动SystemServer进程 在上一篇文章中我们讲到在ZygoteInit.java的startSystemServer函数中启动了SyetemServer进程,如下所示. frameworks/base/core/java/com/android/internal/os/ZygoteInit.java private static boolean startSystemServer(String abiList, String socketName) throws Meth…
原文出自:http://blog.csdn.net/yuvmen/article/details/5877271 了解MFC程序的启动过程,对于初学者来讲,了学习MFC很有帮助:对于不常用VC的人来说,过一段时间就会忘记.还是来记下来,方便以后查阅. 1.创建Application object对象theApp 程序一开始生产一个(且只有一个)Application object对象theApp,也即一个CWinApp对象,这个全局对象一产生,便执行其构造函数,因为并没有定义CMyWinApp构…
Info.plist常见的设置 建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 注:在旧版本Xcode创建的工程中,这个配置文件的名字就叫“Info.plist”  项目中其他Plist文件不能带有“Info”这个字眼,不然会被错认为是传说中非常重要的“Info.plist” 项目中还有一个InfoPlist.strings的文件,跟Info.plist文件的本地化相关 Info.pl…
大家在学习iPhone开发时候,都会写HelloWorld程序.大家一般都是通过向导,生成项目,然后通过模拟器启动应用程序.但是大家知道其背后的启动过程吗?也就是当点击程序图标启动程序开始到退出程序整个使用运行过程中底下的代码都发生了什么?有理解了这个才能游刃有余的掌握iPhone程序的开发,否则在写程序的时候有点浑浑僵僵不知所以然的感觉. 在开始介绍HelloWorld程序之前,我们先了解下UIApplication: UIApplication UIApplication的核心作用是提供了i…
1.Zygote简介 在Android系统中,DVM(Dalvik虚拟机).应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程来创建的,我们也将它称为孵化器.它通过fock(复制进程)的形式来创建应用程序进程和SystemServer进程,由于Zygote进程在启动时会创建DVM,因此通过fock而创建的应用程序进程和SystemServer进程可以在内部获取一个DVM的实例拷贝. 关于init启动zygote我们在上一篇文章已经提到了,这里就不赘述了,这篇文…
整体流程大致如下:     1.init简介 init进程是Android系统中用户空间的第一个进程,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建zygote(孵化器)和属性服务等.init进程是由多个源文件共同组成的,这些文件位于源码目录system/core/init.本文将基于Android7.0源码来分析Init进程. 2.引入init进程 说到init进程,首先要提到Android系统启动流程的前几步: 1.启动电源以及系统启动 当电源按下时引导芯片代码开始从预定义的地方…
转:https://blog.csdn.net/zhonglunshun/article/details/78615980 服务启动机制system/core/init/init.c文件main函数中parse_config_file(init.rc)读取并解析init.rc文件内容.将service信息放置到system/core/init/init_parser.cpp的service_list中system/core/init/init.c文件main函数继续执行restart_servi…
简述 Android设备启动过程中,先是Linux内核加载完,接着Android中的第一个进程init启动,它会启动一些需要开机启动的进程. Zygote就是进程init启动起来的.Android中所有应用程序进程,以及运行系统关键服务的System进程都是由Zygote创建的.它通过复制自身的形式创建其它进程.Zygote在启动时会在内部创建一个虚拟机实例,因此,通过复制Zygote得到的其它应用程序进程和System进程都可以快速地在内部获得一个虚拟机地拷贝.Zygote启动完成后就立即将S…
0.总图 1.总图中的第一步,Laucher主线程向ActivityManagerService进程发出START_ACTIVITY_TRANSACTION 如图:第一步 ~/Android/frameworks/base/core/java/android/app ----ActivityManagerNative.java class ActivityManagerProxy implements IActivityManager { public int startActivity(IAp…
UIApplicationMain main函数中执行了一个UIApplicationMain这个函数 int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName); argc.argv:直接传递给UIApplicationMain进行相关处理即可 principalClassName:指定应用程序类名(app的象征),该类必须是UIApplicat…
跨进程启动activity,启动系统预定义的activity就是跨进程的. client项目启动server项目的activity. clientActivity.java package com.sxt.day04_10_client; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.vie…
Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用.一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动:Intent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_LAUNCHER);            ComponentName cn = new Compon…
http://hi.baidu.com/xiaofanqing/item/6fd724f7c5bb6dce531c26b7 Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用.一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动:Intent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Inten…
Android 开发有时需要在一个应用中启动另一个应用,比如Launcher加载所有的已安装的程序的列表,当点击图标时可以启动另一个应用. 一般我们知道了另一个应用的包名和MainActivity的名字之后便可以直接通过如下代码来启动: 1 Intent intent = new Intent(Intent.ACTION_MAIN); 2 intent.addCategory(Intent.CATEGORY_LAUNCHER);           3 ComponentName cn = ne…
Phone的入口函数main,这之后它有是怎样启动应用程序,初始化的呢,这些都是通过 UIApplicationMain 来实现的. 其启动的流程图大致如下图所示: 1 int retVal = UIApplicationMain(argc, argv, nil, nil); 通过上面的语句,创建UIApplication实例.同时,查看应用程序的 Info.plist 文件(该文件记录了一些应用程序的基础信息,比如程序名称,版本,图标等).该文件还包含应用程序资源文件的名称(nib文件,名称用…
UIApplicationMain main函数中执行了一个UIApplicationMain这个函数 int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);argc.argv:直接传递给UIApplicationMain进行相关处理即可 principalClassName:指定应用程序类名(app的象征),该类必须是UIApplicati…
本文參考Android应用程序组件Content Provider的启动过程源码分析http://blog.csdn.net/luoshengyang/article/details/6963418和<Android系统源码情景分析>,作者罗升阳. 0.总图流程图例如以下: 1.MainActivity进程向ActivityServiceManager主线程发送GET_CONTENT_PORVIDER_TRANSACTION 例如以下图: watermark/2/text/aHR0cDovL2…
跟踪分析Linux内核的启动过程 攥写人:杨光  学号:20135233 ( *原创作品转载请注明出处*) ( 学习课程:<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ) 知识总结: ****Linux内核中关键目录: arch:不同cpu的支持,我们主要关注的是其中x86文件夹 init:内核启动的相关代码,期中main.c是内核启动的起点,main.c中的start_kernel是内核初始化的起点 ker…
tesseract ocr是一个开源的文字识别引擎,Android系统中也可以使用.可以识别50多种语言,通过自己训练识别库的方式,可以大大提高识别的准确率. 为了节省大家的学习时间,现将自己近期的学习总结成一个简单的实例程序,作为Android系统中使用tesseract的Demo演示并附有详细的说明文档.并将自己用C#开发的识别库训练工具提供给大家,其中包括全部的源代码.这样,大家就可以方便的训练特定字体和字形的识别库了. 经过训练后的纸牌识别,识别率达到了100% 注意“王”我在训练时,故…
转自:http://www.cdtarena.com/gpx/201308/9607.html 程序里调用了onSizeChanged方法进行了一些设置,不知道onSizeChanged是在什么时候启动的,所以研究了一下View的启动流程 代码如下: [java] view plaincopyprint? public class TestView extends View { public TestView(Context context) { super(context); Log.d("m…
程序启动的完整过程: (1)main函数 (2)UIApplicationMain * 创建UIApplication对象 * 创建UIApplication的delegate对象 (3)delegate对象开始处理(监听)系统事件(没有storyboard) * 程序启动完毕的时候, 就会调用代理的application:didFinishLaunchingWithOptions:方法 * 在application:didFinishLaunchingWithOptions:中创建UIWind…
移动操作系统有个致命弱点,是app容易受到干扰(来电或者锁屏). 当app受到干扰时,会产生一系列的系统事件,这时UIApplication会通知其delegate对象,让delegate处理系统事件. delegate可以处理生命周期事件.系统事件.内存警告等. ApplicationDelegate已经遵循了UIApplicationDelegate协议,直接在ApplicationDelegate的实现中写代码即可应对各种app的干扰. 常用的是: application: didFini…
一 :main函数入口 看下项目资源结构,其实程序的入口也是在main.m里面. #import <UIKit/UIKit.h> #import "BvinAppDelegate.h" int main(int argc, char *argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([BvinAppDelegate class])); } } U…
朱宇轲 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 今天,我们将通过阅读linux的内核代码来对linux系统中进程的创建过程进行简单的分析. 大家都知道,linux通过进程控制块PCB来对进程进行控制和管理,它存放了进程的数据.在linux中,PCB的代码如下(当然是节选的==): struct task_struct { volatile long state;//进程状…