
麦子学院 2017-07-27 11:02
Android的启动如何优化?
回复:0 查看:2365
应用的启动方式
·
冷启动
·
当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用。
·
系统会先创建和初始化
Application
类,再创建和初始化
LauncherActivity
类(包括一系列的测量、布局、绘制),最后显示在界面上。
·
热启动
·
当启动应用时,后台已有该应用的进程(例:按
back
键、
home
键),应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看,所以在已有进程的情况下,这种启动会从已有的进程中来启动应用。
·
热启动因为会从已有的进程中来启动,所以热启动就不会走
Application
这步了,而是直接进入
Activity
。
冷启动的启动过程分析
当点击app
的启动图标时,安卓系统会从
Zygote
进程中创建出一个新的进程分配给该应用,之后会依次创建和初始化
Application
类、创建
LauncherActivity
类、加载主题样式中的
windowBackground
等属性设置给
LauncherActivity
,然后配置
Activity
层级上的一些属性、再加载布局显示。
应用的启动流程如下:Application
的构造器方法
——>attachBaseContext()——>onCreate()——>Activity
的构造方法
——>onCreate()——>
配置主题中背景等属性
——>onStart()——>onResume()——>
测量布局绘制显示在界面上
冷启动过程中的白屏问题
当用户点击图标启动应用到应用首界面显示,有时候会出现一段白屏或黑屏时间。原因大致有两方面:其一,在Application
或
Activity
的
onCreate
方法中,加载资源耗时较长。其二,页面布局相对复杂,渲染画面花费较长时间。
白屏的解决办法
·
资源加载
·
首先尽量避免将耗时操作直接写在
Application
的
onCreate()
中,可以采用异步或者
IntentService
的方式加载资源。
·
不要以静态变量的方式在
Application
中保存数据
·
画面渲染
·
为启动的
Activity
自定义一个
Theme
,指定一个闪屏画面相同的背景图片
<style name="AppSplash">
<item name="android:windowBackground">@mipmap/splash_bg</item>
</style>
·
将新的
Theme
应用到设置到
AndroidManifest.xml
中
LauncherActivity
中
<activity android:name=".MainActivity"
android:theme="@style/AppWelcom">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
·
在
MainActivity
中需要设置回原来的
Theme
public
class
MainActivity
extends
AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
来源:简书