当前位置:首页 > 图片 > 国际图片 > 正文
文章正文

android 启动app流程图 大连Android培训 安卓app启动方式及流程

图片 > 国际图片 > :android 启动app流程图 大连Android培训 安卓app启动方式及流程是由美文导刊网(www.eorder.net.cn)为您精心收集,如果觉得好,请把这篇文章复制到您的博客或告诉您的朋友,以下是android 启动app流程图 大连Android培训 安卓app启动方式及流程的正文:

大连Android培训 安卓app启动方式及流程

近年来移动端市场占比已过五分之四的Android还在进一步的蚕食余下不多的市场份额,Android开发培训也越来越受到人们的瞩目,蓝鸥大连Android培训的专家老师接下来会为同学们介绍app的启动方式以及启动的流程。

app的启动方式:

1.)冷启动

当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。冷启动因为系统会重新创建一个新的进程分配给它,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。

2.)热启动

当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。热启动因为会从已有的进程中来启动,所以热启动就不会走Application这步了,而是直接走MainActivity(包括一系列的测量、布局、绘制),所以热启动的过程只需要创建和初始化一个MainActivity就行了,而不必创建和初始化Application,因为一个应用从新进程的创建到进程的销毁,Application只会初始化一次。

app的启动流程:

通过上面的两种启动方式可以看出app启动流程为:

Application的构造器方法——>attachBaseContext()——>onCreate()——>Activity的构造方法——>onCreate()——>配置主题中背景等属性——>onStart()——>onResume()——>测量布局绘制显示在界面上

app的启动优化:

基于上面的启动流程我们尽量做到如下几点

Application的创建过程中尽量少的进行耗时操作

如果用到SharePreference,尽量在异步线程中操作

减少布局的层次,并且生命周期回调的方法中尽量减少耗时的操作

蓝鸥大连安卓培训的专家提醒大家:想要零基础迅速投入Android开发的怀抱,首选蓝鸥大连Android培训,关注微信公众号“蓝鸥大连”了解更多专业技术资讯。返回搜狐,查看更多

【腾讯GAD】5分钟教你打造一个秒开的Android App

近日在开发过程中,发现每次点击app从桌面启动都有一个在桌面明显的等待时间,机型越低端的越明显,冷启动优化看来已经势在必行,所以怒而一顿研究再解决之。话不多说先上优化前后效果图:

买家秀:

淘宝秀:

Android App启动流程:

俗话说要想优化好,流程不可少!关于android app启动的流程图如下:

总结一下一个完成的冷启动app过程应该是经过:

Zygote Fork Proccess -> Application:attachBaseContext() -> Application:onCreate() -> MainActiviity:onCreate()

这里主要是把相应的生命周期回调写出来。 因为一般大家的业务代码都是在这些函数回调中调用。

App冷启动相关优化点

1. 生命周期内减少耗时操作:

· Application:attachBaseContext():

这个方法中一般雷区主要都在这句代码上,因为在Android 5.0(API 21) 以下会存在65535方法数分包的问题,当dex过大时会导致Application启动慢, ANR或者ClassNotFound等异常,关于分包解决和优化方案网上一堆就不在做赘述了。

· Application:onCreate()

这个方法是需要重点优化的,因为大家的第三方插件初始化一般都会放在这里,在Application初始化做繁重的东西会严重阻塞app启动(DiskIO,网络请求等)。以下是我们第三方插件初始化的耗时:

debug:

release:

这里把debug和release下的时间都贴出来,是希望大家不要重蹈覆辙。。。 因为debug模式下和release模式下一个是1000ms左右, 一个是300ms左右,误差很大,请大家一定要在release下测试数据!!!!

针对于解决第三方插件初始化耗时方案一般是:

1.SDK分优先级加载,非必要SDK由懒加载实现。

2.可以多线程初始化的sdk由多线程方式来进行初始化。

· MainActiviity:onCreate()

同上一样,尽量不要在此布局做一些耗时的操作或者呈现一些过于复杂的布局。在具体分析自己的app时发现onCreate中有这样一行代码:

其作用是希望用户在打开时,一定能看见Splash的画面,主动延迟了1s加载。这里其实有更好的解决办法处理,则是把跳转MainPage的方法放在onResume中而不是放在onCreate中。因为Android系统中onResume一定是处于可见可交互的状态,用户一定能看见SplashActivity再去跳转,由系统生命周期决定,而不是固定的等待1s,此处优化后启动速度又提升了500ms。所以建议大家以后还是遵循生命周期去做一些事情,尽量别进行人为延迟阻塞。

2. 避免冷启动

App启动方式一般有3种:

(android 启动app流程图)

· ColdStart ——冷启动:

此种方式最为耗时,一般是因为进程被干掉,系统需要重新fork进程进行一系列初始化。

· WarmStart ——暖启动

比ColdStart稍快,因为app的所有Activities还常驻在内存中,并没有被杀掉,所做的只是把app从后台提到前台来展示,并不需要重走初始化一系列行为,减少了对象初始化、布局加载等工作。但其行为表现与冷启动一致,是会displays a blank screen直到App渲染activity。这个blank screen后面会解释。

· LukeWarm Start——热启动

启动方式最快,类似于返回键退出应用又立即进入的那种行为。

优化方案:

既然冷启动那么慢,我们就在非用户主动kill进程或系统通知kill进程的其他情况下不再主动退出进程。那答案很简单了,就是在位于Activity栈底activity中Hook其返回键行为,保证用户点击返回键后不再退出app。在我们App里位于我们栈底的一定是我们的MainActivity,因为一系统行为都是由其向下衍生的。所以只需加入以下几句话:

moveTaskToBack:作用是不再Finish到此Activity,仅仅是把它放到后台隐藏。类似于用户主动触发系统Home键的效果。在同是点击返回键优化前后的对比如下:

优化前:(android 启动app流程图)

优化后:

若图1中时间久后进程回收后优化效果会更为明显。

3.WindowBackGround——脱下秒开的最后一层薄丝袜

经过上面一顿操作后,我发现然并卵!!!启动速度是提升了,但是App一点击还是会在桌面停顿一下。哇呀~很难受~细细思考了一下,一个APP启动无论如何都是会新Fork进程,难道就是这个问题导致其在桌面上停顿一会儿?那其他app又是怎么做到秒开的呢?在AndroidDeveloper的Launch-Time Performance有这么一句话:

其实在创建App进程时,android系统会为你立即显示一个background window,然后再去创建app进程,当app完成first draw时,会立即由你的MainActivity(即默认启动的Activity)替换掉它。这里的background window就是上文WarmStart中提到的blank screen。谜底到此解开所谓的秒开原来就是视觉欺骗。。。所以说有人给你说他只是仅仅是优化生命周期内初始化代码达到秒开都是扯淡。但不得不承认这样用户体验大大的提升了,一点击launcher就渲染好一个背景图片,给用户一种已经启动的感觉,前面做的一系列优化,不过为了让用户少看一会儿系统给渲染的black window。

(android 启动app流程图)

那为什么我们的APP会出现在系统桌面上停留一会,而不是渲染背景图呢?原来在项目创建时,系统会为launcherActivity默认了一个LightTheme,这样就会导致App点击启动后会白屏一段时间然后展示自己的Activity,为了解决白屏的问题把theme主题换成透明的就像下面

但其实这样虽然解决了白屏的问题,但是就会出现上文所说的,点击后停留在桌面一会儿,直至MainActivity渲染出来。这是大部分App的做法,但并不是最佳解决方案。

(android 启动app流程图)

WindowBackground最佳解决方案:

应该由windowBackground此属性作为你的品牌推广页或者logo页,如果你的SplashActivity完全不需要做任何初始化,只是希望有个闪屏页,完全可以由windowBackground来满足。

1.设置自定义带windowBackground的Theme

前两行代码是设置Theme不透明并且默认渲染的背景图是我们必看影视闪屏页的图片。

- windowBackground:关键,主要设置你想要的背景图或者是动态自绘的drawable皆行,这个视图会在你冷启动时渲染给用户过渡看。

- windowFullscreen:全屏展示,免得顶部状态栏显现颜色不一致过于脱节和突兀

2. 为你的launcher Activity设置你的启动Theme

3. 在Launch Activity启动后再把主题设置回自己的AppTheme

此时你的App就能完成秒开了!

推荐测试工具

最终我们App从launcher点击到第一个Activity渲染完成总共需要时间是888ms,很吉利!

· Time to full Display

上图的那行日志是由系统打印出来的,意思就是渲染Acitivity所需要的时间,如果是第一个Activity启动时长也是算在内的。 在Android4.4(API19)以上才会有此Log打出,在verbose级别搜索Displayed即可。不仅可以看自己的还可以看到其他APP的启动时长。

附带一张小米4上业界各大App的冷启动时长~仅供参考~

· Hugo

执行时间打印神器,集成至项目后,只需在想要测试的地方加上注解即可:

可以是class级别,也可以是函数级别。如果注解是Appication类级别,还会把各大生命周期回调函数执行时间打印出来及其方便!GitHub传送门

效果如下:

· Stetho

这是非死不可出的调试神器,如果开发android这个没用过的话,你一定会觉得相见恨晚!

想看更多精彩内容请关注微信公众号“Gad-腾讯游戏开发者平台”!

原文链接:http://www.gad.qq.com/article/detail/28915?ADTAG=gad.tg.sh返回搜狐,查看更多


一.android 应用程序的启动画面怎么做

图片放在项目下/res/drawable下,有三个分别对应大中小图片;
如果要现实图片的话需要声明一个图像对象,例如
在Layout 下.xml文件里写android:background="@drawable/bgdefault"
就是引用图片了;
安卓应用程序图标在Androi缉攻光纪叱慌癸苇含俩dManifest.xml内
<application
android:icon="@drawable/start"
只要改掉start换成你放在drawable内的图片名字就换了,但是尺寸有要求,80*80还是什么根据你自己需要


二.android 程序应用启动时如何设置启动图片!

将启动图片做成第一个activity,等待多少秒或者加载什么资源完成后进入第二个activity就可以了。这就是实矗肠避段篆灯遍犬拨华现的启动图片。


三.Android点击图标启动程序和从程序中跳转过去的区别

  从主界面点击图标进入

  是因为启动程序(主界面也是一个app),发现了在这个程序中存在一个设置为
  <category android:name="android.intent.category.LAUNCHER" />
  的activity,所以这个launcher会把icon提出来,放在主界面上。
  当用户点击icon的时候,发出一个Intent:
  Intent intent = mActivity.getPackageManager().getLaunchIntentForPackage(packageName);
  mActivity.startActivity(intent);

  通过上面的代码,

  再看看其他程序跳过去

  跳过去可以跳到任意允许的页面,如一个程序可以下载,那么真正下载的页面可能不是首页(也有可能是首页),
  这时还是构造一个Intent,startActivity.这个intent中的action可能有多种view,download都有可能。系统会根据第三方程序向系统注册的功能,为你的Intent选择可以打开的程序或者页面。

  所以唯一的一点不同的是从icon的点击启动的int尝耽佰甘脂仿拌湿饱溅ent的action是相对单一的,从程序中跳转或者启动可能样式更多一些。本质是相同的。(android 启动app流程图)


四.android怎么设置程序启动进去就是自己指定的activity

没明白你到底要做什么 ,如要要做的效果是 点击 app图标就启动到你的 activity 中 可以看看下面的配置
<activity
android:name="org.xiaoyunduo.LogoActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /筏罚摧核诋姑搓太掸咖>

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>


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

下载-安装~打开~使用

其实没什么的,就是用一堆代码告诉安卓系统它要干什么。加载什么资源文件。显示什么图片,显示多大字体,屏幕遭到点击后会如何。总的来说,安卓系统是接收端,而程序是发送端,程序发送一个代码,例如安卓的关机代码是。exit,那么程序发送exit,那么手机就会关机了。如果说有个图片,那么就放上1.jpg或者别的名。如果安卓系统的显示图片代码是DISPLAY 那么就写DISPLAY(1.JPG)我这只是举个例子,真正的没这么简花订羔寡薏干割吮公经单,大概让你知道个原理。



六.安卓app发布流程是什么?


简单的流程是上图所示,发布的市场有,360、百度、91等,上这些市场是不收费的(当然你要是想推广那就要收费了,具体收费你可以联系相关客服),你可以先注册一个开发者账号笭法蒂盒郦谷垫贪叮楷看下就知道了。


七.如何查看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函数也就是用户ap乏氦催教诎寄挫犀旦篓p的入口函数
main() 函数执行完毕后,通过exit()退出进程执行


八.正在运行的android程序,按home键回到桌面,再打开图标进入程序会重新开始。5分

/*
* 解决A甫锭颠瓜郯盖奠睡订精PK安装成功后点击"打开"再按Home键遇到的问题 判断本Activity是不是在栈底
*/
if (!isTaskRoot()) {
finish();
return;
}

android 启动app流程图 大连Android培训 安卓app启动方式及流程由美文导刊网(www.eorder.net.cn)收集整理,转载请注明出处!原文地址http://www.eorder.net.cn/pic31638/

文章评论
Copyright © 2006 - 2016 www.eorder.net.cn All Rights Reserved
美文导刊网 版权所有