Android学习之启动优化详解

本文和大家分享的主要是android 启动优化相关内容,一起来看看吧,希望对大家  学习android开发有所帮助。
    应用的启动方式
  ·  冷启动
  ·  当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用。
  ·  系统会先创建和初始化 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);
  }
  }
 
来源:简书
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值