LinuxZone

LinuxZone.net
Linux系统网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

Linux内核启动开始系统设置方式App启动方式

2023年10月25日 717点热度

背景

随着App的快速发展,在功能、内容丰富的同时不可防止的会引入好多第三方工具库,比如友盟、支付组件、视频组件、IM即时通信组件等,造成App首次启动的时侯,时间较长,用户体验差,用户流失甚至弃用。

系统启动阐述

1.打开电源引导芯片代码加载引导程序BootLoader到RAM中去执行

2.BootLoader把操作系统拉上去

3.Linux内核启动开始系统设置linux内核启动流程图,找到一个init.rc文件启动初始化进程

4.init进程初始化和启动属性服务,然后开启Zygote进程

5.Zygote开始创建JVM并注册JNI方式,开启SystemServer

6.启动Binder线程池和SystemServiceManager,并启动各类服务

7.AMS启动Launcher

linux内核开发流程_内核的启动流程_linux内核启动流程图

App启动方法

linux内核开发流程_linux内核启动流程图_内核的启动流程

App启动方法主要分为三种,冷启动、热启动、温启动

1.1:冷启动

冷启动:app没有启动或则进程被杀害后,系统不存在该app进程。冷启动流程指app启动全过程,包括创建app进程、加载资源、启动MainThread、初始化SplashActivtiy等

1.2:热启动

热启动:app处于后台状态未被杀害,系统只是把app从后台带到前台,展示给用户

1.3:温启动

介于两者之间,通常有两种情况:

1.用户点击back键退出,又重新启动;

2.用户退出app后,在onCreat()中恢复之前用onSaveInstanceState()中保存的状态;

App启动流程阐述

以冷启动为例

1.当用户点击appIcon,Launcher进程采用BinderIPC形式向system_server发出startActivity恳求

2.system_server接收到恳求后,向zygote进程发起创建App进程的恳求

3.Zygote进程孵化出新的子进程,即App进程

4.App进程通过BinderIPC形式向system_server发出attachApplication恳求

5.system_server接收到恳求后,做一系列打算工作,通过BinderIPC向App进程发送scheduleLaunchActivity的恳求

6.App进程的binder线程(ActivityThread)在收到恳求后,通过handler向主线程发送LAUNCH_ACTIVITY消息

7.主线程在收到message后,通过反射的方法创建相关的Activity,并调用Activity的onCreat等方式

8.至此,app便即将启动,即将步入Activity的生命周期,执行完渲染完便可以看到App的主界面。

内核的启动流程_linux内核启动流程图_linux内核开发流程

黑白屏优化1.概述

android中的黑白屏指的是在点击appicon到主页界面UI这段时间所出现的蓝屏或则死机现象黑白屏优化是一种伪优化,只是为了用户使用体验舒适一些。

linux内核开发流程_内核的启动流程_linux内核启动流程图

2.解决办法:

1.在自己的中加入windowsbackground

2.设置windowbackground为透明的true

3.以上这2种方式会有个问题,所有的activity启动就会显示linux vps,须要单独弄成一个主题

 @drawable/launch_layout
 true
 true
 @null
 

再在功能清单中的单独activity下设置

之后在APP欢迎页(第一页)的onCreate()super前添加代码如下

setTheme(R.style.AppTheme);

4.QQ中使用的技巧

true
@null

linux内核开发流程_linux内核启动流程图_内核的启动流程

启动时间优化概述

app启动时间优化指的是Application中的onCreate(),运行到Activity的onCreate(),中的运行时间优化。

这个过程中时间过长的话,可能存在几个问题:1.点击图标许久不响应。2.首页显示太慢。

发觉问题-查看启动时间

AndroidStudio4.4曾经:

adb shell am start -W -n 包名/包名.activity.MainActivity

ThisTime:最后一个启动的Activity的启动历时;TotalTime:自己的所有Activity的启动历时;WaitTime:ActivityManagerService启动App的Activity时的总时间(包括当前Activity的onPause()和自己Activity的启动)。

AndroidStudio4.4之后Logcat输入Display筛选系统日志不过滤信息NoFilters

定位问题

-查看Application中onCreate()中的所有方式的具体运行时间

1.Debug.startMethodTracing(filePath);中间为须要统计执行时间的代码Debug.stopMethodTracing();

2.adbpull/storage/emulated/0/app1.trace把文件拉下来剖析把pull到笔记本上的文件拖到AS中就可以剖析了

解决问题-优化方案1.开线程

1.上面的API不能去创建handler2.不能有UI操作3.对异步要求不高的

2.懒加载

用的时侯再初始化linux端口映射,如网路、数据库操作

@Override
 public void onCreate() {
 super.onCreate();
 File file = new File(Environment.getExternalStorageDirectory(), "app1.trace");
 Log.i(TAG, "onCreate: " + file.getAbsolutePath());
 //把分析结果存在一个文件
 Debug.startMethodTracing(file.getAbsolutePath());
 //对全局属性赋值
 mContext = getApplicationContext();
 mMainThread = Thread.currentThread();
 mMainThreadId = android.os.Process.myTid();
 mMainLooper = getMainLooper();
 mHandler = new Handler();
 //因为LQRUIKit中已经对ImageLoader进行过初始化了
//        initImageLoader(getApplicationContext());
 new Thread(){
 @Override
 public void run() {
 //如果要用线程来节约了这些初始化的时间
 //1.里面的API不能去创建handler
 //2.不能有UI操作
 //3.对异步要求不高
 initNim();
 initImagePicker();
 initOkHttp();//可以懒加载
 }
 }.start();
 Debug.stopMethodTracing();
 }

有须要文中完整代码的朋友可以私信发送“底层源码”即可免费获取

如今私信还可以获得更多《Android学习笔记+源码解析+笔试视频》

最后我想说:

对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提高自己,从来都是我们去适应环境,而不是环境来适应我们

技术是无止境的,你须要对自己递交的每一行代码、使用的每一个工具负责linux内核启动流程图,不断挖掘其底层原理,能够使自己的技术升华到更高的层面

Android构架师之路还很漫长,与君自勉

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: activity app 冷启动 软件
最后更新:2023年10月25日

Linux系统网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux系统网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
Linux内核中的系统调用的标准表示可移植操作系统接口 分区和目录中创建的文件数量有限制 网络攻防干货:显示文件的前10行知识点详解 :Access访问时间函数讲解文件:#include定义函数 嵌入式Linux系统组成部分部分64移植过程 Linux中的文件时间属性可以使用stat命令命令查看 linux 命令 操作系统版本 中标麒麟-内核Linux银河麒麟内核 linux内核移植的主要模块(或组件) Ubuntu下终端默认字体,看起来很舒畅,蛮漂亮的 Linux设备树编译:内核中的dtc工具 服务器配置进行域名解析及域名的解析与解析 安装完linuxredhat5.4,打开浏览器发现显示中文全部成了乱码 linux下mysql英文乱码解决方式(2008-08-22) ubuntu字体安装方法,超实用!!(附详细教程) Linux下USB转串口DB9(RS232)和转换线 Linux上部署Web应用程序时非常常见的做法虚拟主机 (Linux基础知识)Linux用户权限管理 关于Linux发行版本的详细信息和架构信息的说明书 Linux操作系统安装Linux系统的镜像文件导入进去的应用 基于Linux的驱动开发:远见品质Linux内核与品质
Linux上部署Web应用程序时非常常见的做法虚拟主机Linux下USB转串口DB9(RS232)和转换线ubuntu字体安装方法,超实用!!(附详细教程)linux下mysql英文乱码解决方式(2008-08-22)安装完linuxredhat5.4,打开浏览器发现显示中文全部成了乱码服务器配置进行域名解析及域名的解析与解析Linux设备树编译:内核中的dtc工具Ubuntu下终端默认字体,看起来很舒畅,蛮漂亮的linux内核移植的主要模块(或组件)linux 命令 操作系统版本 中标麒麟-内核Linux银河麒麟内核Linux中的文件时间属性可以使用stat命令命令查看嵌入式Linux系统组成部分部分64移植过程:Access访问时间函数讲解文件:#include定义函数网络攻防干货:显示文件的前10行知识点详解分区和目录中创建的文件数量有限制Linux内核中的系统调用的标准表示可移植操作系统接口SHELL编程中使用变量的实验原理和使用技巧和技巧Linux服务器出现CPU负载达到100%居高不下的情况Java代码运行步骤及文档说明--Java代码动态规划软链接使用指令ln-s指令创建软连接文件操作系统
linux内核探秘:深入解析文件系统和设备驱动的架构与设计 基于i386硬件架构的BootLoader的历史变迁 (Linux基础知识)Linux发行版本的内核版本一般都使用uname Linux下的仿真调试工具--Valgrind工具分析器 优麒麟服务器版本常见问题及解决办法 如何成为正义黑客(EthicalHacker),你应该学习如何用c编程 Linux文件系统的目录结构介绍及使用方法 常见字符集vs字符编码的关系及其常见的几个层次 微软开发平台合作部王超群:微软是支持开源的公司 虚拟机安装VMwareplayer的安装要想使用Linux,刷题觉得博主写的不错的话 阿里云CentOS6与CentOS8操作系统安装图形化界面 linux 字符设备驱动 (七分简历)信息互动有限公司--诚聘英才 Linux系统下的软件查找、安装与删除,并介绍两款 迈克菲杀毒软件VirusScanEnterprise存在多达10个漏洞 说明书一种智能家居多级控制系统技术领域(0001) 管理文件系统其实是相当复杂的工作光驱工作 linux系统是装在固态还是机械上?推荐将linuxdebian硬盘安装? Linux重启命令--1-3-6操作系统 如何在安卓上安装Linux模拟器? linux内核比较小,安装系统其实用不了多大的磁盘
标签聚合
linux系统 操作 文件 应用 命令 目录 linux服务器 文件目录 内核 软件
书籍
课程
技术群
技术干货大合集↓
  • 2023年12月 / 28篇
  • 2023年11月 / 89篇
  • 2023年10月 / 94篇
  • 2023年9月 / 90篇
  • 2023年8月 / 92篇
  • 2023年7月 / 96篇
  • 2023年6月 / 91篇
  • 2023年5月 / 93篇
  • 2023年4月 / 91篇
  • 2023年3月 / 69篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源 | Linux系统

COPYRIGHT © 2024 LinuxZone.net ALL RIGHTS RESERVED.