真爱,请置顶或星标 作者:申国骏 https://www.jianshu.com/p/bef74a4b6d5e 在上一篇文章如何统计Android App启动时间中我们探讨了如何统计Android App...的启动时间,以及简要分析了App启动流程。...这一篇文章主要讲如何在实战中提升Android App的启动速度。下面我们先回顾一下App的启动流程。...1.App 启动流程分析 上一篇文章如何统计Android App启动时间我们定义了从用户角度上观察的启动时间。...经过对我们App的详细分析以及对业务的了解,可以通过以下一些方法来解决应用启动慢的问题。
App包名和类名的查看由 App Inventor 2 创建的应用要弄清包名和类名,可通过下载其应用程序的源代码,然后使用文件资源管理器或解压缩程序解压 .aia源文件(文件的扩展名修改成.zip 或....如果要更方便和直观的在手机上查看安装的APP的包名和类名,可以在手机上安装专门的查看应用包名的App,如“包名查看器”:不同品牌手机可能略有不同另外,利用Activity启动器调用系统某些功能时,不同品牌手机可能略有不同...下面代码是利用 Activity启动器启动华为 Mate8 系统的照相机:如果在使用Activity启动器启动其它应用的时候,如果出现启动不了或者找不到相应的 Activity 的情况,请检查包名、类名这些信息是否正确
真爱,请置顶或星标 作者:申国骏 https://www.jianshu.com/p/59a2ca7df681 随着App的逻辑不断庞大,一不注意就会将耗时的操作放置在应用启动过程之中,导致应用启动速度越来越慢...优化启动速度是几乎所有大型App应用开发者需要考虑的问题。优化启动速度之前首先需要准确测量App启动时间,这样有利于我们更准确可量化地看出优化效果,也可以指导我们进行持续优化。...热启动时间指在Application仍然存在的情况下,从用户点击桌面图标,到首页内容全部展示出来的时间。 App启动流程 要优化以及分析启动时间,需要先了解App的启动流程。...如何加log 在Activity中onWindowFocusChanged()方法是最好的Activity对用户可见的标志,因此综合上一节的分析,我们可以考虑在Application的attachBaseContext...具体优化的方法可以看下一篇文章《如何优化Androd App启动速度》。
image.png 核心部分 启动一个app,主要是通过startActivity打开对应的包: PackageManager packageManager = getPackageManager...实战代码 MainActivity.java: package com.exmple.startapp; import androidx.appcompat.app.AppCompatActivity
简介 每当我在我的 iOS 应用程序中修改了 LaunchScreen.storyboad 中的某些内容时,我都会遇到一个问题: 系统会缓存启动图像,即使删除了该应用程序,它实际上也很难清除原来的缓存。...,从而使启动屏显得不正常。...今天,我在应用程序的沙盒中进行了一些挖掘,发现该 Library 文件夹中有一个名为 SplashBoard 的文件夹,该文件夹是启动屏缓存的存储位置。...,您可以将其放在应用程序初始化代码中,然后在不修改启动屏时将其禁用。...这个技巧在启动屏出问题时为我节省了很多时间,希望也能为您节省一些时间。
(Cold start) 冷启动是指APP在手机启动后第一次运行,或者APP进程被kill掉后在再次启动。...可见冷启动的必要条件是该APP进程不存在,这就意味着系统需要创建进程,APP需要初始化。在这三种启动方式中,冷启动耗时最长,对于冷启动的优化也是最具挑战的。因此本文重点谈论的是对冷启动相关的优化。...在最近任务给App加锁和启动方式有什么关系 某些厂商为了用户体验提供了给APP上锁的功能,目的就是让用户自己做主是上锁的APP不被杀,启动的时候不会处于冷启动方式,但是加锁也不是万能的,Low memory...killer在内存极度吃紧的情况下也会杀死加锁APP,在此启动时也将以冷启动方式运行。...这其中的道理简单说就是学习用户的使用习惯,提前将App进程创建好,当用户打开APP时不会出去冷启动。
由于不同Android手机厂商提供的系统闹钟包名都不一致,所以只能通过过滤当前手机所有的应用,以确定闹钟应用的包名,进而启动它。...android:layout_width="match_parent" android:layout_height="wrap_content" android:text="启动系统闹钟...null) { switch (msg.what) { case HANDLE_MESSAGE_KEY: Toast.makeText(getApplicationContext(), "--app...scan over--", Toast.LENGTH_SHORT).show(); Log.d("CXC", "--app scan over--"); break; default: break...= null) { if ((applicationInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) !
打开短视频app源码时,一般都会有一个启动界面,启动界面除了会展示APP的logo外,大多数都会将广告直接放到上面,起到引流盈利的目的。...在这里为大家提供两种不同的短视频app源码开发中启动界面设置的方式: 一种是两个Activity实现,即需要一个启动界面的Activity和一个启动界面执行完后跳转到的Activity 另一种则是由一个...下面则开始介绍两种设置启动画面的方式: 第一种(两个Activity): 启动界面的Activity public class SplashActivity extends Activity{...//关闭splashActivity,将其回收,否则按返回键会返回此界面 } }, SPLASH_DISPLAY_LENGHT); } } 短视频app...) 推荐使用第一种方式进行设置 以上就是“短视频app源码开发,如何添加启动界面”的全部内容了,希望对大家有帮助。
APP通过一系列的操作, 使用AIDL的方式通过Binder 将数据交给了ATMS,(这里是启动应用的一次IPC通信,即Launcher和ATMS的一次通信)ATMS开始处理消息,Instrumentation...APP的进程是否存在 ,如果存在就直接启动目标Activity,如果不存在就创建进程。..."top-activity" : "activity"); } ATMS如何创建新的进程?...return new MethodAndArgsCaller(m, argv); } 这里通过反射的方式调用了main方法,之后就进入到APP的主入口main方法了。...5、Zygote fork进程,并调用ActivityThread的main方法,也就是app的入口。
APP启动速度非常重要,APP启动速度慢,可能会造成用户体验不良好,尤其是在最近用Android studio之后,如果长时间不打开app,启动速度就会特别的慢,下面我们一起探讨一下影响app启动速度的原因...检测启动时间 首先我们要知道app的启动时间,然后你也可以凭着感觉来,这里我教大家一个装逼的方法: adb shell am start -W [packageName]/[.MainActivity...这是一个很长时间没有启动的app,当它第一次启动的时候就有很长的启动时间,下面来说怎么来减少吧。...减少应用启动耗时 app的启动流程,简单的说,主要包括两部分: Application 启动界面的onCreate方法 因此最简单的方法就是尽量减少这两个方法中的耗时操作。...,给你的app首页主题样式加上android:windowBackground,放一下app的背景图片,这样即使app启动慢,也会首先加载背景,这样就会给用户造成一种假象,认为是app已经启动。
APP通过一系列的操作, 使用AIDL的方式通过Binder 将数据交给了ATMS,(这里是启动应用的一次IPC通信,即Launcher和ATMS的一次通信)ATMS开始处理消息,Instrumentation...APP的进程是否存在 ,如果存在就直接启动目标Activity,如果不存在就创建进程。...如果当前是Launcher的话,存在进程,进入到 热启动流程 ,不存在,进入到 冷启动流程 。..."top-activity" : "activity"); } ATMS如何创建新的进程?...return new MethodAndArgsCaller(m, argv); } 这里通过反射的方式调用了main方法,之后就进入到APP的主入口main方法了。
在上一节Activity的启动流程中,当app进程不存在(第一次启动)时,会先去创建进程。这里我们通过源码来解读app进程的启动流程。...走到这里我们总结下,在启动Activity时候,如果发现进程不存在则通过AMS以socket的方式告诉Zygote进程去启动一个新的进程,并返回进程的id。...Zygote进程socket服务端 这里就设计系统的启动过程。我们从android系统的启动源码开始进行分析。..."); return 10; } } 首先创建一个AppRuntime对象AppRuntime 继承 AndroidRuntime 判断程序启动参数,根据之前启动命令有参数--zygote...到此,我们就和前面AMS通过socket通信来启动一个进程的代码连接起来了。
测试场景 自动安装考研帮App(kaoyan3.1.0.apk),然后启动App 测试步骤 获取待测试app的packageName和Activity 配置Capability 连接设备 编辑脚本并运行...查看结果 运行前检查事项 检查设备是否连接 检查Appium server是否启动 检查Capability配置信息是否正确 测试脚本 test_kyb.py from appium import webdriver...,安装好后不要随意卸载这两个App。...【解决方案】点击启动Appium按钮后,出现[Appium] Welcome to Appium v1.7.2提示后再运行脚本 会话冲突 error: Failed to start an Appium...the App 【解决方案】重新启动Appium服务 Oppo设备系统 noReset配置 selenium.common.exceptions.WebDriverException: Message
当然我们自己也可以去编写Launcher,运行在手机上使用自己的桌面风格,当然这里我们不去讲如何去编写一个Launcher,如果你感兴趣欢迎关注我。...其次要知道的是,Launch和其他APP,运行在不同的进程中,所以他们之间的通信是通过Binder去完成的,所以AMS是必不可少的。下面我们以启动微信为例,看看启动流程是怎样的。 ? ? ? ? ?...3.AMS处理Launcher的信息 AMS告诉Launcher我知道了,那么AMS如何告诉Launcher呢?...创建好后告诉AMS微信启动好了,AMS就记录了这个APP的登记信息,以后AMS通过这个ActivityThread向APP发送消息。...APP的启动流程就是这样了,欢迎留言探讨,记得持续关注哦。 ?
当前用户越来越关心APP的启动速度.而APP的启动和很多因素相关. eMMC的读写速度. CPU 的频率. App framework 的优化. App 代码的优化....其中eMMC的读写性能一般和HW有关,可做的工作不多.对于CPU的频率,大多数的芯片vendor 也在App启动是采用了boost,也就是需要把CPU 运行在maxfreq.而App framework...问题描述, 在chrome的启动中,发现chrome启动比较慢.其system server 的systracelog 如下....,频繁出现killempy process 势必影响app的启动时间..../100; } else { return totalProcessLimit/2; } } Solution 2 另一种方法便是在App启动的过程中,我们不需要
类似桌面图标打开App的Intent 程序中需要一种通知,点击后的效果需要像点击桌面图标那样: 程序在前台就什么也不干。 程序在后台,就切换到前台。 程序未启动,就启动程序。...创建打开app的intent,自己尝试了一些写法有点bug——多次打开app——偶然性,而且不稳定?...最终从 launcher的源码中找到了系统桌面图标的点击打开app使用的Intent: ComponentName className = new ComponentName(packageName,...Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED; intent.setFlags(launchFlags); 注意: 上面最关键的是launchFlags,可以避免多次启动程序...:也就是程序已经启动了,在后台,然后点击通知后又闪出启动页面。
近日在开发过程中,发现每次点击app从桌面启动都有一个在桌面明显的等待时间,机型越低端的越明显,冷启动优化看来已经势在必行,所以怒而一顿研究再解决之。...1冷启动 第一次启动、被用户杀死进程或系统自动回收进程后,整个app后台任务被清理,再次启动app,称为 冷启动。...特点:后台任务全部结束,回收进程 2热启动 用户点击返回键退回界面,后台任务没有杀死,再次点击启动app,称为 热启动。...4如何避免 尽量不让Application参与业务操作; 不在Application的onCreate中执行耗时任务 比如:创建文件等IO操作,应在使用时再创建; 不以静态变量的的方式在Application...5白屏如何解决 大致有以下三种方法: 使用IntentService实现异步处理耗时的操作; 将背景图设置成我们APP的Logo图,作为APP启动的引导,现在市面上大部分的APP也是这么做的 将背景颜色设置为透明色
最近在帮忙定位一个问题,涉及到某个应用自动启动了,为了确定是谁调用的,使用如下的日志进行查看(注:为了简单考虑,下面的启动者为launcher) 1 2 3 4 (pre_release|✔) % adb...com.huawei.android.launcher/.unihome.UniHomeLauncher (has extras)} from uid 10070 我们看最后看到这个from uid 10070,嗯,基本定位到了是这个uid的应用启动了...确定 uid 10070 是哪个 App 确定uid不能说明问题,我们至少需要确定是哪个应用,我们尝试使用下面的命令过滤进程有关数据 1 2 adb shell ps | grep 10070 没有任何数据输出...当然前面说了,示例的启动者是launcher,那我们过滤一下launcher 1 2 adb shell ps | grep launcher u0_a70 2207 620 4979992...u0_a70), context=u:r:shell:s0 果然,u0_a70和10070 是有关联的 u0_a70 的含义 u0 默认的手机第一个用户(可以通过设置里面的多用户新增和切换) a 代表app
阅读本文需要3分钟 介绍如何用JS开发智能手表App,首先按下图创建智能手表的工程(工程名是MyFirstWatch)。 ?...watch工程目录的结构与TV工程的结构类似,只是源代码除了java部分,还有js部分,而且多了个node_modules目录,用过Node的同学都应该很清楚,这个目录是保存Node中模块的。...js目录包含了所有相关的JS、HTML和CSS代码。watch工程目录结构如下图所示。 ? 现在着重看一下js目录,结构如下: ?...在js/default目录下,有3个子目录:common、i18n和pages。其中common是一些资源,如图像等。...如果要修改输出文本,可以直接修改国际化文件zh-CN.json,也可以直接修改index.js或index.hml文件。 ?
App的启动流程和Activity的启动流程也是面试中常常被问到的知识点,但是往往会涉及到很多方面,让我们不知道从何做答,今天就一起来看看启动流程相关问题: 说一下APP的启动流程 里面涉及到哪些重要的成员呢...启动流程了解后,对我们开发有什么帮助呢? 说一下APP的启动流程 Launcher被调用点击事件,转到Instrumentation类的startActivity方法。...Zygote fork进程,并调用ActivityThread的main方法,也就是app的入口。...启动流程了解后,对我们开发有什么帮助呢? 分析源码的目的一直都不是为了学知识而学,而是理解了这些基础,我们才能更好的解决问题。学习了App的启动流程,我们可以再思考下一些之前没理解透的问题。...1)比如启动优化,分析启动过程,其实可以优化启动速度的地方有三个地方: Application的attach方法,MultiDexApplication会在方法里面会去执行MultiDex逻辑。
领取专属 10元无门槛券
手把手带您无忧上云