讲启动优化之前,先看下应用的启动流程 一、应用启动流程 应用进程不存在的情况下,从点击桌面应用图标,到应用启动(冷启动),大概会经历以下流程: Launcher startActivity AMS startActivity...2.2 MultiDex 优化(本文重点) 说MultiDex之前,先梳理下apk编译流程 2.2.1 apk编译流程 Android Studio 按下编译按钮后发生了什么?...需要注意的是闪屏页的Activity,包括闪屏页中引用到的其它类必须在主dex中,不然在MultiDex.install之前加载这些不在主dex中的类会报错Class Not Found。...,加载完再跳转到闪屏页 [image] dex加载完应该要finish掉当前Activity [image] 按照上面代码分析,今日头条在5.0以下手机首次启动应该是这样: 打开桌面图标 显示默认背景...跳转到加载dex的界面,展示一个loading的加载框几秒钟 跳转到闪屏页 实际上是不是这样呢,用4.4机器试下?
然后你打开的界面就会退回你打开界面时之前的效果,就是返回到你没点击APP手机页面效果。...问:如果在这里你会问 onRestart()的这个方法,你这个靠英语理解一下就可知道的,重新启动,那么会问为什么不onCreate()的方法,因为MainActivity()的这个已经创建了,所以就不用而用...MainActivity onStop()放在 SecondActivity onCreate() 之前会导致什么呢,会出现闪退效果的。onStop()调用,后台运行,不会销毁。...竖屏与横屏周期 什么是竖屏与横屏周期,就是手机上有横屏看,和竖屏看的效果,周期也是有不一样的。...()->onResume() 竖屏与横屏切换会闪屏效果,这是创建到销毁到创建的效果。
横竖屏切换时Activity生命周期 注意:还有一点,非常重要,一个 Android 的变更细节!...系统不知道你按下 HOME 后要运行多少其他的程序,自然也不知道 activity A 是否会被销毁 因此系统都会调用 onSaveInstanceState() ,让用户有机会保存某些非永久性的数据...以下几种情况的分析都遵循该原则: 1.当用户按下 HOME 键时 2.长按 HOME 键,选择运行其他的程序时 3.锁屏时 4.从 activity A 中启动一个新的 activity 时...2.按 Home 键,在主页面重新打开支付宝,页面上显示的并不是支付宝主页面,而是之前的支付成功页面。 3.再次进入外卖 App,可以发现支付宝成功页面已经消失。...将这两个项目分别安装到手机上之后,打开 First App,并从 FirstA 开始跳转到 FirstB,再进入 FirstC 页面。然后按 Home 键,使其进入后台任务。
精心归纳 Android 、JVM 、算法等,各位帅气的老铁支持一下!给个 Star ! 神图 ---- 在开始之前,先让我们看看 Android 的 activity 到底都有哪些东西?...界面或按 Home 键回到主屏: onPause() —> onStop() ,进入停滞状态。...3.3 onSaveInstanceState() 被执行的场景 系统不知道你按下 HOME 后要运行多少其他的程序,自然也不知道 activity A 是否会被销毁 因此系统都会调用 onSaveInstanceState...以下几种情况的分析都遵循该原则: 当用户按下 HOME 键时 长按 HOME 键,选择运行其他的程序时 锁屏时 从 activity A 中启动一个新的 activity 时 屏幕方向切换时 3.4 两个...在 Android 中,如果你的应用程序有一段时间没有响应,系统会向用户显示一个对话框,这个对话框称作应用程序无响应对话框。
:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动 2.热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,...但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动 在冷启动时,应用程序从头开始。...在其他状态下,系统需要将正在运行的应用程序从后台运行到前台。我们建议您始终根据冷启动的假设进行优化。这样做也可以改善热启动和温启动的性能 在冷启动开始时,系统有三个任务。...因为现在 App 应用启动都会先进入一个闪屏页(LaunchActivity) 来展示应用信息 默认情况下会出现白屏现象,系统默认会在启动应用程序的时候 启动空白窗口 ,直到 App 应用程序的入口...,优化用户体验 广告页优化 闪屏页过后就要展示金主爸爸们的广告页了 因为项目中广告页图片有可能是大图,APng动态图片,所以需要将这些图片下载到本地文件,下载完成后再显示,这个过程往往会遇到以下两个问题
而当用户按下BACK 键的时候,你的activity 又会再一次的显示在屏幕上,此时任务是由2个应用程序中的相关activity组成的)栈底的是启动整个任务的Activity,栈顶的是当前运行的用户可以交互的...当用户按下BACK 键的时候,当前activity 出栈,而前一个恢复为当前运行的activity。...当用户按下HOME 键的时候,回到了应用程序加载器,然后选择了一个新的应用程序(也就是一个新任务)。则当前任务遁入后台,而新任务的根activity 显示出来。...当用户按下BACK 键的时候,屏幕不会显示出用户刚才离开的activity(上一个任务的根activity)。...()方法不总是被调用,触发条件为(按下HOME键,按下电源按键关闭屏幕,横竖屏切换情况下),你应该仅重写onSaveInstanceState()来记录activity的临时状态,而不是持久的数据。
4.操作习惯:Android,Back键是否被重写,测试点击Back键后的反馈是否正确;应用数据从内存移动到SD卡后能否正常运行等。...adb uninstall 6.将 Android 设备上的文件或者文件夹复制到电脑本地:adb pull , 如复制 Sdcard 下的 pull.txt 文件到 D 盘...一个应用程序可以包含许多活动,比如事件的点击,一般都会触发一个新的Activity。...生命周期即活动从开始到结束所经历的各种状态,从一个状态到另一个状态的转变,从无到有再到无,Activity本质上有四种状态: 运行(Active/Running):Activity处于活动状态,此时Activity...如果一个活动在处于停止或者暂停的状态下,系统内存缺乏时会将其结束(finish)或者杀死(kill)。
场景就类似你打开微信聊了一会天这时候出去看了下日历 在打开微信 微信这时候启动就属于冷启动。...这其中的道理简单说就是学习用户的使用习惯,提前将App进程创建好,当用户打开APP时不会出去冷启动。...在冷启动时,应用程序从头开始。在其他状态下,系统需要将正在运行的应用程序从后台运行到前台。我们建议您始终根据冷启动的假设进行优化。这样做也可以改善热启动和温启动的性能。...- 填充加载布局Views - 在屏幕上执行View的绘制过程measure -> layout -> draw 应用程序进程完成第一次绘制后,系统进程会交换当前显示的背景窗口,将其替换为主活动。...;/item> </style> 设置闪屏图片主题 为了更顺滑无缝衔接我们的闪屏页,可以在启动 Activity 的 Theme中设置闪屏页图片,这样启动窗口的图片就会是闪屏页图片
该方法在View类中的定义,并且所有的View子类全部重写了该方法,应用程序可以通过该方法处理手机屏幕的触摸事件。该方法的签名如下所示。...onKeyDown 跟onTouchEvent类似,不过处理的是按键事件 moveTaskToBack 模拟现在的主流应用最后按Back键时不是强制退出应用或直接结束根Activity,而是采取类Home...例如当用户按BACK键的时候。...1.当用户按下HOME键时; 2.长按HOME键,选择运行其他的程序时; 3.按下电源按键(关闭屏幕显示)时; 4.从activity A中启动一个新的activity时; 5.屏幕方向切换时,例如从竖屏切换到横屏时...onSaveInstanceState常常用于存储应用程序中当前Activity中重要的状态数据,以免Activity被系统意外杀掉的情况下当用户再次回来时不能找到之前的状态。
按下快捷键后,Windows 11会在任务栏上依次展开所有打开软件的缩略图,方便我们查看各个程序的实时运行情况。 18、Win+V打开云剪贴板 “云剪贴板”也是Windows 10中的经典模块。...Win+W是这项功能的快捷键,按下后可以直接呼出资讯与兴趣栏。...20、Win+X 呼出简易开始菜单 Win+X是Windows 11里的菜单快捷键,按下后可以唤出一组包括Windows终端、磁盘管理、系统、 任务管理器 在内的系统级命令。...此外它还新增了一个布局面板,以方便触屏用户手指操作。和其他新功能一样,Windows 11也为它增加了一个快捷键,按下Win+Z后,即可快速完成窗口部署。...26、Win+Prtscn 一键截屏 Win+PrtScn是Windows 11里的一键截屏键,按下快捷键后,屏幕会首先闪一下,接下来在“此电脑-图片-屏幕截图”文件夹,就会出现一张刚刚截好的图片文件。
onDestroy() 这个方法在活动被销毁之前调用,之后的活动将变为销毁状态,此时活动处于销毁状态。...现在我们打开first_layout.xml,它里面只有一个按钮,用跳转到SecondActivity的,我们再创建一个按钮,并给上标识id。...这个时候我们点一下BACK返回到FirstActivity界面,会执行那些方法呢? ? 只会执行onResume()方法。 如果我们这个时候按home键会怎么样呢? ?...之后再按一次返回程序才会被销毁,我们从手机桌面回到这个FirstActivity的主界面会执行那些方法呢。看一下 ?...注意看和刚才FirstActivity跳转SecondActivity所执行的方法是一样的,那么我们在SecondActivity页面按BACK键返回到FirstActivity和用页面按钮跳转会是一样的吗
一、使用CMD命令打开模拟器 运行monkeyrunner之前必须先运行相应的模拟器或连上设备,不然monkeyrunner无法连接设备。...1.2 这里重点讲一下在CMD中用Android命令打开模拟器 命令:emulator -avd test (注意:test为虚拟设备的名称——AVD的全称为:Android Virtual Device...确定后,关闭CMD窗口,重新打开CMD。执行以上命令。将会启用模拟器。 二 、进入MonkeyRunner 2.1 模拟器启动成功后,我们仍在CMD环境中操作。...指定DOWN事件类型发送到设备,对应的按一个键或触摸屏幕上。 2、UP 发送一个UP事件。指定UP事件类型发送到设备,对应释放一个键或从屏幕上抬起。...参数1的部分具体内容逻辑: 按下HOME键 device.press('KEYCODE_HOME',MonkeyDevice.DOWN_AND_UP) 按下BACK键 device.press('KEYCODE_BACK
android.intent.action.MAIN 决定应用程序最先启动的Activity。...因为在该方法完成之前,此类工作可能无法完成。 已进入已停止状态,因此系统将调用 onStop() 回调。举例而言,如果新启动的 Activity 覆盖整个屏幕,就可能会发生这种情况。...谈一下返回栈 首先理解android是使用Task来管理活动,一个Task就是一组存放在栈里的活动的集合,这个栈就叫做返回栈,每启动一个新的活动,就会将其放入栈顶,当我们点击back回退或调用activity...优先级低的Activity在内存不足被回收后怎样做可以恢复到销毁前状态? 优先级低的 Activity 在内存不足被回收后重新打开(横竖屏切换的过程中)会引发Activity重建。...onSaveInstanceState()时机: (1)用户按下Home键 (2)横竖屏切换 (3)按下电源按钮(关闭屏幕显示) (4)内存不足导致优先级的Activity被杀死 onRestoreIntanceState
作为你的导师,我有义务帮你制定好后面的学习路线,那么今天我们应该从哪儿入手呢?现在你可以想象一下,假如你已经写出了一个非常优秀的应用程序,然后推荐给你的第一个用户,你会从哪里开始介绍呢?...,即点击桌面应用程序图标时首先打开的就是这个活动。...然后我们按下Back键进行返回,你会发现ThirdActivity竟然直接返回到了FirstActivity,再按下Back键又会返回到SecondActivity,再按下Back键才会退出程序,这是为什么呢...其实原理很简单,由于FirstActivity和ThirdActivity是存放在同一个返回栈里的,当在ThirdActivity的界面按下Back键,ThirdActivity会从返回栈中出栈,那么FirstActivity...最后再次按下Back键,这时所有返回栈都已经空了,也就自然退出了程序。 ?
Activity作为四大组件之一,出现的频率相当高,基本上我们在android的各个地方都能看见它的踪影,因此深入了解Activity,对于开发高质量应用程序是很有帮助的。...我们先有个大概印象,后面我们分析完后再回来看,就相当清晰了。 四、典型的生命周期 所谓的典型的生命周期就是在有用户参与的情况下,Activity经历从创建,运行,停止,销毁等正常的生命周期过程。...因此, Activity启动–>onCreate()–>onStart()–>onResume()依次被调用 2.当前Activity创建完成后,按Home键回到主屏。...5 当我们点击Back键回退时,回调结果如下: 从Log我们可以看出,当点击Back键回退时,相当于退出了当前Activity,Activity将被销毁,因此 退出当前Activity...现在我们再回头看看之前的流程图,应该是相当清晰了吧。嗯,这就是Activity整个典型的生命周期过程。下篇我们再来聊聊Activity的异常生命周期。
例子:A->B,创建A实例,创建B实例,从B->A,此时返回栈中有A实例,就会让B实例出栈,此时栈中只有A的实例,所以点击Back后就会退出程序。...这时就需要优化代码,你同事可以在第二个界面就留一个方法入口,把需要的参数都列出来,你只需要用类名.方法名即可 该方法写在第二个活动里,也就是需要跳转到的页面。...1.配置改变导致Activity被杀死,横屏变竖屏:在onStop之前会调用onSaveInstanceState()保存数据在重建Activity之后,会在onStart()之后调用onRestoreInstanceState...状态 当您的Activity在之前被破坏后重新创建时,您可以从Bundle系统通过您的Activity中恢复您的保存状态。...: 如果ActivityA已经在堆栈中,那么此时会调用onNewIntent()方法,生命周期调用顺序为: onCreate--->onStart--->onResume---按下Home键>onPause
视觉优化 应用程序启动有三种状态,每种状态都会影响应用程序对用户可见所需的时间:冷启动,热启动和温启动。 在冷启动时,应用程序从头开始。在其他状态下,系统需要将正在运行的应用程序从后台运行到前台。...在屏幕上执行View的绘制过程.measure -> layout -> draw 应用程序进程完成第一次绘制后,系统进程会交换当前显示的背景窗口,将其替换为主活动。...> [70] (无白屏,不过从点击到App仍然存在视觉延迟~) 设置闪屏图片主题 为了更顺滑无缝衔接我们的闪屏页,可以在启动 Activity 的 Theme中设置闪屏页图片,这样启动窗口的图片就会是闪屏页图片...启动窗口 优化完代码后,分析一下启动窗口的源码。...执行一下转换命令(Android/sdk/platorm-tools路径下) hprof-conv 刚刚生成的hprof文件 memory-mat.hprof 使用mat打开刚刚转换的hprof文件
一、在将启动模式之前必须了解的一些知识: 在正式的介绍Activity的启动模式之前,我们首先要了解一些旁边的知识,这些知识如果说模糊不清,那么在讨论启动模式的时候会一头雾水(笔者亲身感悟)。...3.6.当Task最后一个Activity被销毁时,对应的应用程序被关闭,清除Task栈,但是还会保留应用程序进程(狂点Back退出到Home界面后点击Menu会发现还有这个App的框框。...每个Activity界面都只有一个显示当前界面名称的TextView和一个用来组跳转的Button,所以应用OneText的功能就是从活动1跳转到活动2,活动2继续跳转活动2,代码就不给大家展示了,都能写出来...同样我们也用代码来实现一下这个过程: 还是刚才的那一坨代码,只是我们修改一下Activity1的模式为singleTask,然后让Activity2跳转到Activity3,让Activity3跳转到Activity1...我们发现back的时候会先把Foreground的Task中的Activity弹出,直到Task销毁,然后才将Background的Task唤到前台,所以最后将Activity3销毁之后,会直接退出应用
/bugtrace/bugs/view/1020426608094629409复现路径:1、在应用商店下载片多多2、于商店的页面中点击“打开”3、进入应用后点击登录,跳转到微信后,不登录(此时微信登录界面覆盖在片多多界面上...),随后按home键返回桌面4、点击桌面上的片多多icon进入,即出现黑屏无法播放视频二、问题分析该问题通过稳定复现路径所dumpsys出的activity的任务栈如下:图片从问题栈中可以得出如下结论:...下载完成后自动跳转到系统启动器页,一直点击安装4、安装完成后打开,此时发现应用没有打开原因就在于系统接口----Activity#isTaskRoot()有细节坑,它返回的是当前Activity是不是在当前任务栈的栈底...针对问题2(即使是两个HomeActivity,那么又是如何导致黑屏的):isInitPlayerFeeds静态变量的问题,由闪屏广告引入(引入时间在225版本之前),修改方案可以将其变更为成员变量,这样遇到非启动器二次创建...修改问题的时候,需要综合之前的改动通盘考虑后再进行修改,避免问题二次引入
苹果系统跟 Android 系统完全不一样,测试起来也有很大的不同。 在测试中常见的,如 xcode 版本问题,打包证书问题,闪退无法重现,不好抓 log, 上架被拒问题等等。...本文总结一些常见的坑,可以完美绕过去。 闪退 Android 手机闪退,可以用 adb 很轻易的拿到 log. IOS 系统主要是沙盒,你没法很轻松的就拿到 log....在 iPhone 手机上的软件发生闪退或开发 iOS 应用程序时出现的闪退,一般都会自己或系统生成崩溃日志,那么我们从哪里以及怎么获取到崩溃日志呢?...等待扫描后获取对应应用和日期的日志。 4.如果是应用开发者,自己代码中记录崩溃日志,并上传到服务器,发生崩溃后从网站日志管理中获取对应的崩溃日志即可。 上架流程 Mac 就一个市场,上架需要官方审核。...这里有一点需要注意的是,在你邀请外部成员参与测试之前,需要先通过苹果的审核,一般审核会在一天左右。
领取专属 10元无门槛券
手把手带您无忧上云