应用程序的启动,又可称为根Activity的启动。但是在讲应用程序启动之前,我们有必要对应用程序进程(AppProcess)启动有所了解,那是因为启动一个应用程序首先要保证该应用程序的进程已经被启动。...AMS在启动应用程序时,会先检查应用程序进程是否存在,如果不存在就需要请求Zygote进程创建并启动应用程序进程。这里我不会贴上大段大段的代码,只是一些总结,并提供了相关源码的链接。...应用程序进程(AppProcess)启动 启动大纲 AMS发送启动应用程序进程请求. Zygote接收请求并创建应用程序进程....---- 应用程序(App)启动 讲完了应用程序进程(AppProcess)启动的相关内容后,接下来我们就来看看应用程序是如何一步一步启动的。 启动大纲 1.Launcher请求AMS。...---- 应用程序启动的进程关系图 应用程序启动的过程中,主要涉及了Launcher进程、SystemServer进程、Zygote进程和应用程序进程这四个进程,它们之间的关系如下。
一、adb启动 应用程序 (1)查看app包名: 进入android操作系统 adb shell 在root@android:/ # 后边,输入 cd data/data 然后输入ls 这样就能看见android...系统上安装的安装包 包名: 例如: cn.com.conversant.swiftsync.android com.android.backupconfirm com.android.browser...com.android.calculator2 com.android.calendar com.android.camera ... (2)adb启动 应用程序 adb shell am start...shell am start -n 包名/Activity类的类名 包名和Activity类的类名一定要输入正确,可以用re-sign工具(在最后的弹出信息框会显示出包名和Activity类名)。...二、adb停止 应用程序 adb shell am force-stop cn.com.conversant.swiftsync.android 备注: cn.com.conversant.swiftsync.android
前言 在前篇中我们讲到了Android应用程序进程启动过程,这一篇我们来讲遗留的知识点:在应用程序进程创建过程中会启动Binder线程池以及在应用程序进程启动后会创建消息循环。...1.Binder线程池启动过程 我们首先来看RuntimeInit类的zygoteInit函数,如下所示 frameworks/base/core/java/com/android/internal/os...注释1调用PoolThread的run函数来启动一个启动一个新的线程。...根据上一篇文章我们得知,mMethod指的就是ActivityThread的main函数,mArgs 指的是应用程序进程的启动参数。...可以看出,系统在应用程序进程启动完成后,就会创建一个消息循环,用来方便的使用Android的消息处理机制。
android 在一个应用中启动另一个应用 在程序开发过程当中,常遇到需要启动另一个应用程序的情况,比如在点击软件的一个按钮可以打开地图软件。...其实手机安装的每一个应用的包名都是可以查到的,只要我们查到相关应用的包名,再通过它获得主类名,再按照上面的方法就可以了。 第一步:怎么获得包名?...,当然包括包名,只需要查找自己需要的程序就可以了。...反编译工具:android-classyshark https://github.com/EasySpringBoot/android-classyshark 通过java -jar xxx.jar执行...然后,你就可以直接看APK的源码了。
使用am start命令启动android apk应用程序 am start -n {包(package)名}/{包名}....am start -W,才惊觉这个命令的功能还是很强大的 am start -n 解释:启动一个activity e.g. am start -n com.android.settings.../.Settings 启动android原生设置的一级页面 am start -a -d 解释: 启动一个activity同时传入-d后面的参数...设备上启动 “am” 的脚本,其中的 shell 非常基础。...该脚本的作用是设置 CLASSPATH 变量,将 am.jar 添加到 CLASSPATH 中,并执行 app_process 命令来启动 com.android.commands.am.Am 类。
需求 在我们的应用程序里,启动其他的应用程序。 思路 我们称呼 即将调用的应用程序成为 目标应用程序 1.获得目标应用的 包名( packageName) 2.获得 一个 “启动intent"。...使用 getPackageManager().getLaunchIntentForPackage(packageName); 该方法会返回一个”可以启动该应用程序的intent“ 3.启动 intent...实现 布局 android="http://schemas.android.com/apk/res/android" xmlns:tools...="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height...> android="http://schemas.android.com/apk/res/android" android
1.首先在当前应用的按钮的点击事件里面添加如下按钮 ``` Intent intent = new Intent(); ComponentName cn = new ComponentName...catch (Exception e) { Log.i("charge app", "没有找到对应app"); } ``` 2.接着需要将目标Activity的android...3.在当前应用的AndroidMainfest里声明目标Activity ``` android:name="com.example.fm.MainFragmentActivity...>希望可以帮助大家 如果哪里有什么不对或者不足的地方,还望读者多多提意见或建议
ActivityStack.realStartActivityLocked 这个函数定义在frameworks/base/services/java/com/android/server...函数中,注意,这里的第二个参数r,是一个ActivityRecord类型的Binder对象,用来作来这个Activity的token值。...函数,这是遵循Activity的生命周期的。...{ …… } return activity; } …… } 函数前面是收集要启动的...,而是通过mInstrumentation的callActivityOnCreate函数来间接调用,前面我们说过,mInstrumentation在这里的作用是监控Activity与系统的交互操作,相当于是系统运行日志
封面09.jpg 面试官:什么是应用程序启动 应用程序的启动,又可称为根Activity的启动。...但是在讲应用程序启动之前,我们有必要对应用程序进程(AppProcess)启动有所了解,那是因为启动一个应用程序首先要保证该应用程序的进程已经被启动。...AMS在启动应用程序时,会先检查应用程序进程是否存在,如果不存在就需要请求Zygote进程创建并启动应用程序进程。这里我不会贴上大段大段的代码,只是一些总结,并提供了相关源码的链接。...应用程序(App)启动 讲完了应用程序进程(AppProcess)启动的相关内容后,接下来我们就来看看应用程序是如何一步一步启动的。 启动大纲 Launcher请求AMS。...应用程序启动的进程关系图 应用程序启动的过程中,主要涉及了Launcher进程、SystemServer进程、Zygote进程和应用程序进程这四个进程,它们之间的关系如下。
一、启动另一个APP 目前公司项目需求,一个主APP,需要打开某些小APP,这些小APP是整合了Unity的,但是还是android程序(所有小APP的包名是已知的)。...以前没做过,查询了一下实现方法,其实还是挺简单的,测试也可以。...intent = packageManager.getLaunchIntentForPackage("com.maiji.textviewchangedemo"); //这里参数就是你要打开的app...的包名 startActivity(intent); } catch (Exception e) { Log.e("打开另外一个应用出错"...,e.getMessage()); //未打开,可能要打开的app没有安装,需要再此进行处理 } 2、重启本APP 这个功能比较少见,见于qq设置字体大小之后会重启APP 代码:
, Global Constructor)和Binary布局来提升FireFox启动速度的文章。...文章中以x86及x86-64平台为基础,以下加了Mac OS及Android上的binary布局。 什么是Static Initializer? 简而言之就是全局C++对象的初始化。...以下即终于在Mac OS上的布局: 在Android ARM ELF中则是以下这个布局: FireFox的优化 在Mozillaproject师的文章[链接]中,基于Firefox 4.0b8在x86...及x86-64的測试数据发现例如以下的平均启动时间: 平均启动时间(ms) Pages Read Bytes...參考:关于通过调整ELF优化启动时间以下是终于的效果: 平均启动时间(ms) Pages Read Bytes
5.3 使用am工具启动Android应用程序 除了在 GUI 界面中启动应用程序之外,在 Android 的命令行终端(可以使用 adb shell 进行连接)也可以使用 am 工具启动应用程序。...例如:使用 am 启动应用程序的格式如下所示: # am start -n {包名}/{包名}.活动名 启动 Android 设置工具的命令如下所示: # am start -n com.android.settings...启动 Android 照相机程序的命令如下所示: # am start -n com.android.camera/com.android.camera.Camera 启动 Android 摄像机程序的命令如下所示...对于某些具有附加数据的应用程序,还可以使用-d 选项增加数据 URL,示例如下所示: ? 以上程序分别进行了音乐播放、视频播放、图片浏览等功能。com.android.music....MediaPlaybackActivity、com.android.camera.MovieView 和 com.android.camera.ViewImage 分别是对应的应用程序。
Android应用程序与SurfaceFlinger服务的连接过程分析 Android系统的开机动画是由应用程序bootanimation来实现的,它位于/system/bin目录下,它的具体实现可以参考...为什么要选择Android系统的开机动画来分析Android应用程序与SurfaceFlinger服务的连接过程呢?...、键盘等),因此它能够以最简洁的方式来体现Android应用程序与SurfaceFlinger服务的关系。...服务中,用来代表使用SurfaceFlinger服务的一个客户端,即一个与UI相关的Android应用程序。...从前面Android应用程序与SurfaceFlinger服务的关系概述和学习计划这篇文章可以知道,一个Android应用程序最多可以创建31个Surface。
大家好,又见面了,我是全栈君 下载链接:http://download.csdn.net/detail/a123demi/7511823 我们经常在开发的时候,通过获取系统已启动的服务来推断该server...是否还须要再启动。...而本文将介绍android设备中已启动的服务,并推断某一服务是启动 1.依据ACTIVITY_SERVICE获取系统服务 activityManager = (ActivityManager) getSystemService...(ACTIVITY_SERVICE); 2.获取系统中正在执行的服务 runningList = activityManager.getRunningServices(30);//代表我们希望返回的服务数目大小...getSystemService(ACTIVITY_SERVICE); runningList = activityManager.getRunningServices(30);//代表我们希望返回的服务数目大小
前言 在此前的文章中,我讲过了Android系统启动流程和Android应用进程启动过程,这一篇顺理成章来学习Android 7.0的应用程序的启动过程。...分析应用程序的启动过程其实就是分析根Activity的启动过程。...1.Launcher请求ActivityManageService 在 Android系统启动流程(四)Launcher启动过程与系统启动流程这篇文章我讲过Launcher启动后会将已安装应用程序的快捷图标显示到界面上...3.ActivityThread启动Activity Android应用程序进程启动过程(前篇)这篇文章中提到过ActivityThread,在应用程序进程启动时会创建ActivityThread实例。...ActivityThread作为应用程序进程的核心类,它是如何启动应用程序(Activity)的呢?我们接着往下看。
在Android 11中,引入了IORap,这是一个新功能,可大大缩短应用程序的启动时间。我们观察到,各种设备上的应用平均启动速度(冷启动)快5%以上。有的用例显示启动时间快20%以上。...适用于Android应用程序的IORap预读 IORap通过预测将需要哪些I / O并提前进行来减少应用程序启动时间。...它perfetto通过IPC 与package manager, activity manager, perfetto 等服务交互。...基本上,预取列表包含应用程序启动时访问的文件信息(名称,偏移,长度)。...更新应用程序时,预取列表将会过时。因为该应用程序可能会更改,并且先前的数据可能不准确。 Dexopt服务可以在安装后优化应用程序。优化应用后,布局可能会有所不同,从而使预取列表过时。
偶然间看别人的视频无意中发现这个小软件,感觉很实用。 它是一个launcher,使用它可以通过键盘快速的启动你的应用程序,而不必用鼠标在一堆的应用程序中选择。...软件安装也很简单,在它的官网下载Quicksilver.解压后拖入Application中即可。...运行这个软件,它会自动将经常打开的文件,程序记录到它的category中,可以通过键盘输入快速检索你所要启动的程序。...这个软件默认的快捷启动键是Control-Space,你可以修改成其他快捷键比如option-space 这里有一个简要的快速入门:http://docs.blacktree.com/quicksilver...Quake式的下拉形式
背景 最近在项目中着手做Android10和Android11 适配时候,期间遇到了不少的坑。之前有专门写过qq、微信分享的适配。但是此次在针对偏业务侧适配工作的时候还是碰到了一些新的问题。...但是,这里有个坑: 在Android10上不行,在Android11上又可以!!为什么? 因为Google改回来了,让Android11支持file://格式了。。。。 (wtf?...我谢谢你啊~~) **我这里说的 Android10 和 android 11 是指 targetSdkVersion 哦 ** 2.1 往公共目录插入一张图片 只能通过mediaStore方式: ContentValues...完美避开无法访问公共目录的坑!!! 在Android11上 以上标志会自动失效。因此,应用存储的东西还在放在App-specific目录下。分享私有目录可以通过fileprovider 方式适配。...2. targetSdk=30,android:requestLegacyExternalStorage="false"运行在Android11的设备上 会咋么样?
转载自 https://juejin.im/post/5b0d0a0cf265da091f105858 本文阐述了用户点击启动图标后,Android 系统是怎么启动你的应用程序,将应用视图显示在移动设备上...首先说一下 Android 应用程序的两个特点 多入口,和只有一个 main 方法的应用程序不同,Android 应用程序有四大组件构成 ( Activity , Service ) ,每个组件都是一个入口...当用户或者其他应用程序用到了属于你的应用程序的组件,比如 ( Activity ,Service ) Android 就会为你的应用程序启动一个新的进程(你的应用进程不存在当前 Android 系统中时...当你的应用程序 需要打开相册功能就会打开系统的相册应用,因为你的应用和相册应用都有自己独立的应用进程,通过启动相册的操作,在一个进程中启动另外一个进程,这适用于其他应用程序里面的每一个组件。...然后 init 进程还会启动系统服务进程 SystemServer,SystemServer 去创建系统服务类比如 ActivityManagerService (AMS)。
简介 Activity有四种加载模式 standard singleTop singleTask singleInstance 设置方式 android:launchMode="singleTask"...standard: 标准(默认)模式 当通过这种模式来启动Activity时,Android总会为目标 Activity创建一个新的实例,并将该Activity添加到当前 Task栈中.注意,这种方式不会启动新的...:当将要被 启动的Activity已经位于Task栈顶时,系统不会重新创建 目标Activity实例,而是直接复用Task栈顶的Activity 假设 栈结构为 ABC 再打开C C为singleTop...当系统采用singleTask模式加载Activity时,又分为以下 三种情况: (1)如果将要启动的Activity不存在,那么系统将会创建该 实例,并将其加入Task栈顶 (2)如果将要启动的Activity...模式加载Activity时,又分为以下 两种情况: (1)如果将要启动的Activity不存在,那么系统将会先创建一个 全新的Task,再创建目标Activity实例并将该Activity实例 放入此全新的
领取专属 10元无门槛券
手把手带您无忧上云