Android应用启动最佳实践
2017-09-19 10:35
459 查看
Android开发人员都知道,App在启动的时候或多或少会在启动前有短暂的黑屏或者白屏的现象。在早期的Android Studio 版本中,应用的启动白屏可能最高会有六七秒的时间,这个问题可以通过升级Android Studio 版本实现。然而还是会有一秒左右的黑屏或者白屏时间。下面就针对这个问题谈谈对应的解决方法。
1.如果你用过Android版本的bilibili客户端,他的欢迎界面采用的是白色作为背景,将App主体设置为白色,启动的白屏自然变成了App启动界面的背景,之后真正的Logo出现有一种从无到有的过渡感。规避了这个问题的同时提升了用户的体验。如果你的启动界面刚刚好就是白色背景,可以在欢迎界面减少必要的耗时操作,同时加上过渡动画。让用户错觉的以为白屏是App启动的一部分。
2.当然如果你的首页背景不是白色的,那么就不推荐如上方式了。网上流传着两种方法,通过设置App Style来消除App的启动白屏。具体如下:
之后在Application替换属性:
恩。。。确实能消除App的启动白屏,但是实践起来并不完美,首先说说第一个,设置背景为欢迎界面图片。在某些机型上当显示了App背景之后再显示欢迎界面或出现图片移位的情况。除此之外,如果你设置了沉浸式状态栏,会和你的主题色进行冲突,导致的效果是:App启动状态栏从一种颜色变成另外一种颜色。很明显的假启动。
我们再来说说第二种情况设置App背景透明,这种方式最明显的缺点是如果是冷启动,App需要等待一秒才能开启,让人觉得是手机的锅。最明显的应用就是微信,微信采用的启动方式就是设置背景透明,所以微信第一次启动总是会慢个一秒左右。热启动之后这个等待时间也会随之消失。然而,在魅族手机上使用这种方式,App的跳转会出现无背景的转换,
就是一种渐变的转换。
3.下面我介绍一种比较可信的方法,参考 https://www.bignerdranch.com/blog/splash-screens-the-right-way/。
设置你的启动Activity无XML。
设置启动的背景用layout_list。
设置单独的主题:
给Activity设置背景:
这是认为最优秀的解决方案,找不到什么缺点,测试也很完美,实现秒启动。大家可以试试。
4.更进一步?许多时候你会不得已在欢迎界面做一些耗时操作,导致App启动的速度变慢。但是这些操作又是你不得不做的,怎么办?下面介绍一种方式,Activity+Fragment的方式作为启动界面。
当启动App的时候让Fragment先显示给用户看。Activity的耗时操作结束后再通知Fragment跳转。具体实践本人没有具体实践过,当然也是日常中很少接触到这种需求,这里给各位一个解决的思路吧。
1.如果你用过Android版本的bilibili客户端,他的欢迎界面采用的是白色作为背景,将App主体设置为白色,启动的白屏自然变成了App启动界面的背景,之后真正的Logo出现有一种从无到有的过渡感。规避了这个问题的同时提升了用户的体验。如果你的启动界面刚刚好就是白色背景,可以在欢迎界面减少必要的耗时操作,同时加上过渡动画。让用户错觉的以为白屏是App启动的一部分。
2.当然如果你的首页背景不是白色的,那么就不推荐如上方式了。网上流传着两种方法,通过设置App Style来消除App的启动白屏。具体如下:
<style name="Theme.AppStartLoad" parent="android:Theme"> <item name="android:windowBackground">@drawable/ipod_bg</item> <item name="android:windowNoTitle">true</item> </style> //2、设置透明Theme <style name="Theme.AppStartLoadTranslucent" parent="android:Theme"> <item name="android:windowIsTranslucent">true</item> <item name="android:windowNoTitle">true</item> </style>
之后在Application替换属性:
<application android:name=".PBCApplication" android:allowBackup="true" android:icon="@mipmap/ic_launch" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/替换如上">
恩。。。确实能消除App的启动白屏,但是实践起来并不完美,首先说说第一个,设置背景为欢迎界面图片。在某些机型上当显示了App背景之后再显示欢迎界面或出现图片移位的情况。除此之外,如果你设置了沉浸式状态栏,会和你的主题色进行冲突,导致的效果是:App启动状态栏从一种颜色变成另外一种颜色。很明显的假启动。
我们再来说说第二种情况设置App背景透明,这种方式最明显的缺点是如果是冷启动,App需要等待一秒才能开启,让人觉得是手机的锅。最明显的应用就是微信,微信采用的启动方式就是设置背景透明,所以微信第一次启动总是会慢个一秒左右。热启动之后这个等待时间也会随之消失。然而,在魅族手机上使用这种方式,App的跳转会出现无背景的转换,
就是一种渐变的转换。
3.下面我介绍一种比较可信的方法,参考 https://www.bignerdranch.com/blog/splash-screens-the-right-way/。
设置你的启动Activity无XML。
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.activity_launch); }
设置启动的背景用layout_list。
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <bitmap android:id="@+id/bitmap_splash" android:src="@drawable/ic_launcher" > </bitmap> </item> </layer-list>
设置单独的主题:
<style name="Theme.AppStartLoad" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowBackground">@drawable/launch</item> </style>
给Activity设置背景:
<activity android:name=".ui.activity.LaunchActivity" android:screenOrientation="portrait" android:theme="@style/Theme.AppStartLoad">
这是认为最优秀的解决方案,找不到什么缺点,测试也很完美,实现秒启动。大家可以试试。
4.更进一步?许多时候你会不得已在欢迎界面做一些耗时操作,导致App启动的速度变慢。但是这些操作又是你不得不做的,怎么办?下面介绍一种方式,Activity+Fragment的方式作为启动界面。
当启动App的时候让Fragment先显示给用户看。Activity的耗时操作结束后再通知Fragment跳转。具体实践本人没有具体实践过,当然也是日常中很少接触到这种需求,这里给各位一个解决的思路吧。
相关文章推荐
- Android应用开发企业级最佳实践
- Android应用中MVP最佳实践
- Android 最佳实践之应用及时响应(Designing for Responsiveness)
- android应用开发实践三----Atcity 通过Intent 来启动另一个Activity来实现简易拨号
- Android开发:性能最佳实践-管理应用内存
- Android开发:性能最佳实践-管理应用内存
- Android开发:性能最佳实践-管理应用内存
- Android 启动 Activity和一键退出应用的的最佳方法
- Android开发:性能最佳实践-管理应用内存
- Android最佳实践之高效的应用导航
- 谷歌开源 Google I/O应用源代码,展示Android最佳实践
- (转)Android开发:性能最佳实践-管理应用内存
- 状态栏框架-- 深入Android应用开发:核心技术解析与最佳实践
- Android最佳实践之:StrictMode介绍
- Android RxJava实际应用案例讲解:使用RxJava的最佳开发场景
- [Android进阶]Android 开发最佳实践
- Android应用启动另一个应用
- Android最佳实践之:StrictMode介绍
- 解决Android应用启动时白屏或者黑屏的问题