导航:首页 > 操作系统 > android执行流程

android执行流程

发布时间:2023-08-26 03:39:51

① 如何在电脑上运行安卓程序

搞安卓的程序开发,其中很重要的一环就是测试软件,而我们不可能时常把手机连接到电脑上,那么如何在电脑上运行安卓程序呢?下文我就分享了在电脑上运行安卓程序的 方法 ,希望对大家有所帮助。

在电脑上运行安卓程序方法

一、安装java环境

进Java官方网站里下载JDK,双击运行jdk-6u20-windows-i586.exe,假设选择安装到C:Javajdk1.6.0_20目录下(当然,安装到默认路径下也没有问题)。安装完毕后,就是配置环境变量。步骤如下:

(1)设置JAVA路径

在“我的电脑”上点右键,选“属性”,打开“系统属性”对话框,点“高级”选项卡,再点“环境变量”按钮,在打开的对话框中的“系统变量”下方,点“新建”,然后在对话框中的“变量名”中填JAVA_HOME,在“变量值”中填C:Javajdk1.6.0_20,点“确定”。

(2)设置CLASS路径

再“新建”一个系统变量,在“变量名”中填CLASSPATH,在“变量值”中填.;%JAVA_HOME%lib;%JAVA_HOME%lib ools.jar。

说明:最开始的.;中的.(点)表示当前路径,;(分号)是路径分隔符。接下来的%JAVA_HOME%引用的是前面刚创建的JAVA安装路径。

(3)设置PATH路径

PATH变量一般都有了,因此选中点“编辑”,然后在“变量值”后面加上;%JAVA_HOME%in;%JAVA_HOME%jrein,注意前面的分号。

这样,JDK就安装好。“开始->运行”,输入cmd,然后在命令行提示符中输入:java -version,应该能够看到java version “1.6.0_20″信息;JDK安装成功。

二、安装android环境

下载Android SDK 1.5(android-sdk-windows-1.6_r1.zip),解压缩到C:android-sdk-windows-1.6_r1目录中(解压到哪个目录都没有问题)。然后,配置环境变量。步骤如下:

(1)设置Android路径

重复第一步的(1),新建一个“系统变量”,在“变量名”中填Android_Home(大小写没有问题),在“变量值”加填C:android-sdk-windows-1.6_r1。

(2)设置PATH路径

“编辑”PATH变量,在“变量值”后面加上;%Android_Home% ools,注意前面的分号。

这样,Android SDK 1.6就安装好了。“开始->运行”,输入cmd,然后在命令行提示符中输入:android -help,应该能够看到帮助信息;Android SDK 1.6安装成功。

三、安装Android模拟器

下载Android SDK Setup ,解压缩到C:android-sdk-windows,然后进入这个文件夹,双击SDK Setup.exe,启动Android SDK and AVD Manager,选中左侧Settings项,然后在右侧面板选中Force https://… sources to be fetched using http://,然后选择Save & Apply

选择”installed package”,安装相应的Android版本:安装时间可能较长,可以选择合适的Android版本就可以了,比如2.2

然后进入virtual devices新建模拟器,选择对应的Android版本,然后尺寸一般选择HVGA即可。

点击Create AVD即创建模拟器成功,然后返回模拟器列表选择start启动模拟器

四、安装软件

下面就是重头戏了,也就是在模拟器上安装apk软件。

点击电脑“开始”菜单里面的“运行”输入cmd,如果是 windows7 则直接在开始菜单里的搜索框中输入cmd并回车。

把下载好的APK文件复制到模拟器的安装地址中的Tools目录下,例如:“D:android-sdk-windows ools”。下载后的APK文件可以改个简短好记的名字,例如:game.apk

然后点击Tools目录下的emulator.exe,点击后看到程序运行一闪而过,ok,这就行了。

在cmd命令窗口中输入cd d:回车(同理,如果你模拟器安装在E盘或别的硬盘根目录下,这里d就更换成e或别的硬盘名。这个就不再提醒了。)

再输入d:回车

继续输入cd D:android-sdk-windows ools回车(写到这里时,我自己电脑上的模拟器安装目录变了,变成android了。大家凑合看看图吧,把图片中的“android”换成你自己模拟器的安装目录就ok,这个就不用我再多说了吧?)

最后输入adb install game.apk回车(这里game.apk就是我们下载并复制到tools目录下的apk文件名)

Ok,,这样我们就成功的在模拟器上安装好了软件。切换回模拟器,就能找到该软件了。简单吧?你也赶紧来试试吧。

如何在电脑上运行安卓程序相关 文章 :

1. 在电脑上安装安卓系统的方法

2. 电脑如何安装安卓系统

3. 如何在电脑上安装安卓系统

4. 怎么在Win7电脑玩安卓游戏

5. 安卓程序员必备的开发工具

6. Win10电脑怎样使用安卓模拟器

② Android 10.0 ActivityManagerService的启动流程

我们讲完了SystemServer的启动过程,本节主要来讲解ActivityManagerService的启动过程。ActivityManagerService简称AMS,管理Activity行为,控制Activity的生命周期,派发消息事件,内存管理等功能。

ActivityManagerService启动由SystemServer中startBootstrapService启动

ATM启动最终调用的是ActivityTaskManagerService.Lifecycle.onStart()来启动ATM服务的
源码:ActivityTaskManagerService.java#Lifecycle.class

将ActivityTaskManagerInternal添加到本地服务的全局注册表中。
ActivityTaskManagerInternal为抽象类,其实现类为ActivityTaskManagerService#LocalService.class

构造函数初始化主要工作就是初始化一些变量,供之后的service,broadcast,provider的管理和调度

start中做了两件事

AMS的systemReady处理分为三个阶段

同时获取一些配置参数。 需要注意的是,由于只有Java进程才会向AMS注册,而一般的Native进程不会向AMS注册,因此此处杀死的进程是Java进程。

主要是调用一些关键服务的初始化函数,然后杀死那些没有FLAG_PERSISTENT 却在AMS启动完成前已经存在的进程,同时获取一些配置参数。需要注意的是,由于只有Java进程才会向AMS注册,而一般的Native进程不会向AMS注册,因此此处杀手的进程是Java进程。

执行goingCallback的处理,主要的工作就是通知一些服务可以进行systemReady相关的工作,并进行启动服务或应用进程的工作

监控Native的crash,启动WebView,执行一些服务的systemReady和systemRunning方法

启动Home Activity,当启动结束,发送ACTION_BOOT_COMPLETED广播时,AMS的启动过程告一段落

启动Home Activity

AMS的启动主要经历了如下几个阶段:

③ 求讲解一下安卓运行一个APP的详细过程

android运行app的过程:
1、用户打开一个app。
2、系统分配程序预设要求的最低内存,并创建activity进程。
3、进程创建完毕后,app程序被转移至虚拟机中。
4、app程序到达虚拟机后运行第一条启动指令,一般为显示启动logo。
5、启动后依据用户的操作来完成程序。
6、用户关闭app。
7、系统将程序移除虚拟机,并结束activity进程。
8、释放占用的内存。

④ Android应用程序启动流程总结

AMS主要功能:
AMS是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作。还负责启动或杀死应用程序的进程。

WMS主要功能:
为所有窗口分配Surface。
管理Surface的显示顺序、尺寸、位置。
管理窗口动画。
输入系统相关:WMS是派发系统按键和触摸消息的最佳人选,当接收到一个触摸事件,它需要寻找一个最合适的窗口来处理消息。

PWS主要功能:
PMS 用来管理跟踪所有应用APK,包括安装,卸载,解析,控制权限等。

SystemServer也是一个进程,包括AMS、PMS、WMS等等。

zygote意为“受精卵“。Android是基于Linux系统的,而在Linux中,所有的进程都是由init进程直接或者是间接fork出来的,zygote进程也不例外。

App进程是用户点击桌面icon时,通过Launcher进程请求SystemServer,再调用Zygote孵化的。

①点击启动一个App,Launcher进程采用Binder IPC向ActivityManagerService发起startActivity请求;

②ActivityManagerService接收到请求后,向zygote进程发送创建进程的请求;

③Zygote进程fork出新的子进程,即App进程;

④App进程通过Binder IPC向sytem_server进程发起绑定Application请求;

⑤system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进程发送scheleLaunchActivity请求;

⑥App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息;

⑦主线程在收到Message后,通过发射机制创建目标Activity,并回调Activity.onCreate()等方法。

⑧到此,App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面。

备注:
Launcher,PMS,Zygote,App进程是三个独立的进程,相互通信就需要使用进程间通信机制。与Zygote通信是使用的socket通信,Launcher,PMS,App进程间使用的是Binder机制。

⑤ Android 10.0 Activity的启动流程

本文主要学习记录,基于Android 10的源码,有错误欢迎指正,主要目的是梳理流程图。

以进程为单位的调用栈图如下:

1.activity中的startActivity方法最终都会通过拿到ATSM的代理IActivityTaskManager调用的startActivity;

2.之后进入system server进程中的ATMS startActivity,ATMS 经过收集Intent信息,然后使用ActivityStackSupervisor.startSpecificActivityLocked,如果进程已经存在,则直接使用realStartActivityLocked,通过App的binder客户端的代理ApplicationThread调用回到bindApplication,走入Activity的启动流程;如果进程不存在则通过socket链接Zygote,请求fork新的进程;

3.App进程创建完成后,进程启动会调用ActivityThread.main方法,初始化主线程Handler,接着走入attach方法,然后通过AMS的代理调用AMS的attachApplication方法,并将App进程的通信代理ApplicationThread传入AMS;

4.AMS获取到ATMS调用ApplicationThread的bindApplication回到App进程的ActivityThread.ApplicationThread.bindApplication方法中,然后使用Handler切换到主线程执行handleBindApplication,这里初始化了App的进程名字、时间,用户的硬件配置,包括App的文件系统,创建了App的Context实例,Instrumentation实例,调用App的onCreate回调方法,同时告诉AMS APP初始化工作完毕;

5.AMS接着会调用ATMS的attachApplication,最后调用ClientLifecycleManager的scheleTransaction方法,通过App的Binder代理ApplicationThread回到ActivityThread;

6.进入ActivityThread.ApplicationThread.scheleTransaction方法之后就进入了Activity的onStart、onResume回调

创建进程之前的过程主要是AMS的内部信息收集的判断的过程,下面主要看一下App进程启动的源码流程

从应用进程被创建开始,ActivityThread.main被执行

调用ActivityThread的attach方法,然后将activity和AMS通信的Binder代理IApplicationThread实例传入AMS

接着进入AMS进程,ActivityManagerService.attachApplicationLocked

1.thread.bindApplication :该方法主要讲App进程的配置信息通过IApplicationThread Binder通信回传到ActivityThread中

2.mAtmInternal.attachApplication :mAtmInternal实际就是ActivityTaskManager的实例,通过LocalServices加载

那么这里相当于走到了ActivityTaskManagerServer的attachApplication中

先看第一条:

注意:ActivityThread中存在于Binder通信的代理--》ApplicationThread extends IApplicationThread.Stub

ActivityThread--》ApplicationThread--》bindApplication

这里的bindApplication主要初始化了AppBindData,然后发送BIND_APPLICATION给APP的主线程BIND_APPLICATION,最后执行了handleBindApplication

handleBindApplication如下:

ActivityThread--》class H extends Handler

该方法主要在App进程中对App的一些硬件资源配置申请的属性、App的文件夹等完成App基本信息的初始化

接着看第二条:mAtmInternal.attachApplication

mAtmInternal.attachApplication最终会调用mRootActivityContainer.attachApplication(wpc)

RootActivityContainer.attachApplication

接着调用ActivityStackSupervisor.realStartActivityLocked开始创建Activity

ActivityStackSupervisor.realStartActivityLocked

创建ClientLifecycleManager和ClientTransactionHandler来辅助管理Activity的生命周期

注意

clientTransaction.addCallback是LaunchActivityItem

lifecycleItem是ResumeActivityItem

ClientLifecycleManager.scheleTransaction最终会调用ClientTransaction的schele方法

那么这个mClient是IApplicationThread的实例,那么此时也就回到了ActivityThread的ApplicationThread中

ActivityThread的ApplicationThread中

因为ActivityThread继承ClientTransactionHandler,所以到了ClientTransactionHandler中

通过Handler发送消息EXECUTE_TRANSACTION到H中

接着TransactionExecutor的execute方法

LaunchActivityItem.execute方法

client其实是在ActivityThread的实例,那么就回到了ActivityThread的handleLaunchActivity

接着调用performLaunchActivity

在performLaunchActivity中,主要是加载App的资源包,然后创建了Activity的context实例,并创建了Activity的实例,接着调用activity.attach方法,attach执行完之后调用了onCreate方法。

activity.attach

activity.attach中主要

1.创建了PhoneWindow实例

2.设置了Window接口的监听

3.初始化了成员变量,包括线程和WindowManager

到此Oncreate已经完成,那么OnStart和OnResume去哪了?

TransactionExecutor的execute方法

之前们只分析了executeCallbacks,接着executeLifecycleState方法

TransactionExecutor的executeLifecycleState方法

cycleToPath:lifecycleItem即为ResumeActivityItem

第一点:

int finish = lifecycleItem.getTargetState()

lifecycleItem对应ResumeActivityItem,如下:

ResumeActivityItem的getTargetState方法

对应ActivityLifecycleItem中的枚举类型:

第二点:ActivityClientRecord中的mLifecycleState,由于在前面已经执行了handleLaunchActivity所以mLifecycleState=1

对应ActivityLifecycleItem中的枚举类型:

PRE_ON_CREATE = 0

所以final int star = 1

接着看getLifecyclePath,此时start=1,finish=3

那么返回的IntArray就是2

接着看performLifecycleSequence

最终执行的是handleStartActivity所以最终走到了ActivityThread的handleResumeActivity

两点:

调用activity.performStart

调用Instrumetation.callActivityOnPostCreate

performStart方法:

调用了Instrumentation.callActivityOnStart方法:

最终到了activity的onStart方法

第二点:Instrumentation.callActivityOnPostCreate

上面主要走了cycleToPath,接着ResumeActivityItem.execute

调用了handleResumeActivity方法

handleResumeActivity最终调用performResumeActivity

调用了Instrumentation.callActivityOnResume,

到了activity.onResume()方法

参考文章: https://blog.csdn.net/u011386173/article/details/87802765

⑥ Android App安装以及启动流程

Android App的安装可以分为有界面的安装和无界面的安装。

有界面的安装其实就是调用系统App(PackageInstaller)咐码去安装apk,打开安装apk应用之后,点击安装按钮执行startInstall方法,然后就进入安装中界面开始安装,安装成功或者衡族哪失败都会有对应的回调。内部其实也是使用PackageManager的installExistingPackage方法,通过binder机制,调用到PackageManagerService的installExistingPackage方法,最终调用到installExistingPackageAsUser方法安装,而 安装的核心原理其实就是将apk文件拷贝到系统可识别的重要的文件目录

无界面安装是调用adb命令,执行到一个c写的commandline脚本,调用 install_app 方法,然后再调用 pm_command ,然后执行到pm脚本,执行 run 方法,调用 runinstall ,然后调用 installPackageAsUser 通过AMS执行安装。

说到App的启动,就需要从穗则开机开始说起,Android开机会先把所有应用安装一遍就是把apk拷贝到对应的目录(这也是Android开机慢的原因)。

整个流程如下:

其实App的启动,除了刚开机是不一样之外,正常时候基本与Activity的启动非常接近。

阅读全文

与android执行流程相关的资料

热点内容
教育系统源码达标 浏览:884
声卡驱动安装程序在哪个文件夹 浏览:58
钱还完了银行不给解压 浏览:169
linux的系统调用表 浏览:752
php怎么转换页面 浏览:546
我的世界买了服务器之后怎么开服 浏览:828
r1234yf汽车空调压缩机 浏览:145
ftp服务器地址栏 浏览:900
linux图形分区 浏览:965
安徽到辽宁源码 浏览:577
libs安卓的文件夹叫什么 浏览:871
生意圈app是什么意思 浏览:397
linuxarcgisserver 浏览:234
加密pdf怎么修改文件 浏览:138
红米刷机无命令怎么办 浏览:356
啥叫美国谷歌外包程序员 浏览:260
云服务器管家婆 浏览:440
发邮件命令 浏览:354
程序员好做吗工作好吗 浏览:886
云电脑服务器维护一个月多少钱 浏览:882