您的位置:首页 > 移动开发 > Android开发

Android应用启动最佳实践

2017-09-19 10:35 393 查看
Android开发人员都知道,App在启动的时候或多或少会在启动前有短暂的黑屏或者白屏的现象。在早期的Android Studio 版本中,应用的启动白屏可能最高会有六七秒的时间,这个问题可以通过升级Android Studio 版本实现。然而还是会有一秒左右的黑屏或者白屏时间。下面就针对这个问题谈谈对应的解决方法。

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跳转。具体实践本人没有具体实践过,当然也是日常中很少接触到这种需求,这里给各位一个解决的思路吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: