导航:首页 > 操作系统 > android启动app流程图

android启动app流程图

发布时间:2022-10-29 04:18:46

1. android app启动动画是怎样制作的

Android的开机动画,开始页面并非MainActivity,而是在另外一个页面(就是开机的那幅图[xml里面写])停留2秒(时间自定 ),然后再跳转到MainActivity页面即可.

1
2
3
4
5
6
7
8
9
10
11
12
13

@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.acty_appstart);
new Handler().postDelayed(new Runnable() {
@Override public void run() {
if (!AppStart.this.isFinishing()) {
Intent intent = new Intent(this,MainActivity.class);//2秒之后跳转到主界面执行
startActivity(intent);
AppStart.this.finish();
}
}
}, 2000);
}

2. android 系统怎么启动app的

启动你自己编写的app有2种方式:一种是安装模拟器,启动时选择该模拟器启动,模拟器会安装该APP,第二种是真机调试,需要的是安卓系统的手机,用数据线连接电脑,打开调试模式,运行android编辑器,它会把app安装到你得手机上

3. Android 启动流程图 (一)

阅读顺序,
先看Binder机制, 接着对照此图看ServiceManager的启动和获取,
先了解基础启动流程, 后面的文章都会再次基础上进行增加, 例如AMS的启动和注册等.

4. 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机制。

5. 手机app怎么制作流程图

操作方法
01
准确的产品定位是制作手机app的前提条件。企业如何正确的为企业app定位是最为关键的,这样决定着app能够为企业创造多大的利润。

02
有了正确定位的app,之后就是功能需要整理的阶段。客户对自己企业产品有了正确的分析,就可以确定app需求。

03
在需求整理完整的情况下,app开发公司就可以对app进行产品的原型设计,也就是UE设计。企业和开发公司之间会针对产品的原型进行沟通,最终将产品原型确定。

04
app原型确定之后,就进入app设计阶段。app设计是其中至关重要的一部分。app设计是直观上给用户第一的视觉体验。

05
在这些前期的准备工作完成后,正式进入app原生代码开发阶段。无论是Android还是iOS版本,开发都是要在前期的UE、UI完全确定的情况下进行的。

06
app开发代码完成后,就交专门的测试部门进行测试,对其中出现的bug进行修改。最终完全交付给客户。值得注意的是,原生代码开发的app在交付时,代码是一定要交给客户的。反之,如果是一些模板开发是没有代码交付这一步骤。

6. android app启动动画是怎样制作的

Android的开机动画,开始页面并非MainActivity,而是在另外一个页面(就是开机的那幅图[xml里面写])停留2秒(时间自定 ),然后再跳转到MainActivity页面即可.

java">@OverrideprotectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.acty_appstart);
newHandler().postDelayed(newRunnable(){
@Overridepublicvoidrun(){
if(!AppStart.this.isFinishing()){
Intentintent=newIntent(this,MainActivity.class);//2秒之后跳转到主界面执行
startActivity(intent);
AppStart.this.finish();
}
}
},2000);
}

7. 如何查看androidapp启动过程

启动的过程如下:
Shell接收到命令,启动一个程序,此时shell首先会fork一个新的进程
新fork的进程,通过execve系统调用,陷入到内核中,内核检查和加载需要执行的二进制映像文件,检验其合法性及权限。通常用户态进程要启动一个新的程序(如shell),fork后,execve要紧跟着执行,这样会有更好的效率(由于使用COW技术,这样可以避免页表复制,而execve后,之前进程中的所有内容都是无用的,若execve紧跟fork后,可以避免COW引起的拷贝);
通常二进制文件都会要依赖一些系统动态库,此时kernel会启动加载器/system/bin/linker,执行linker的__linker_init()
Linker的linker_init(),会分析二进制的elf文件,加载依赖的动态库文件,然后转入二进制映像的入口函数__start中执行
__start会调用C库的初始化函数__libc_init()
__libc_init()会调用映像的main函数,这个main函数也就是用户app的入口函数
main() 函数执行完毕后,通过exit()退出进程执行

8. android中怎么启动app

通过包名获取此APP详细信息,包括Activities、services、versioncode、name等等
PackageInfo packageinfo = null;
try {
packageinfo = getPackageManager().getPackageInfo(packagename, 0);
} catch (NameNotFoundException e) {
e.printStackTrace();
}
if (packageinfo == null) {
return;
}

// 创建一个类别为CATEGORY_LAUNCHER的该包名的Intent
Intent resolveIntent = new Intent(Intent.ACTION_MAIN, null);
resolveIntent.addCategory(Intent.CATEGORY_LAUNCHER);
resolveIntent.setPackage(packageinfo.packageName);

// 通过getPackageManager()的queryIntentActivities方法遍历
List<ResolveInfo> resolveinfoList = getPackageManager()
.queryIntentActivities(resolveIntent, 0);

9. android 系统怎么启动app的

可能是某程序在运行,请打开任务管理器看看有我作程序在运行将他关掉。再查出来是什么程序,打开程序设置将它重新设置一下。
\r\n如果不是程序请点开始
附件
系统设置
系统还原
还原到以前正常的时候就可以了。\r\n附件:狼.2015362

10. 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流程图相关的资料

热点内容
脚本提取源码器 浏览:928
smo源码 浏览:875
为什么要搭建单独服务器 浏览:478
编译器有什么控制 浏览:891
希尔伯特pdf 浏览:645
php数组全数字 浏览:645
解密塔罗牌小程序源码 浏览:862
聚合跑分源码 浏览:553
注册dns服务器写什么 浏览:879
linux安装deb包 浏览:521
电脑盘文件夹如何平铺 浏览:267
相机卡满了没文件夹 浏览:751
如何批量快速压缩视频 浏览:432
我的世界如何加入ice服务器 浏览:873
兄弟cnc编程说明书 浏览:204
php闪电入门教程学习 浏览:152
金岳霖逻辑pdf 浏览:938
linuxtomcat线程 浏览:77
pboc长度加数据加密 浏览:188
英雄联盟国际服手游怎么下安卓 浏览:299