作家,拉丁欧
前言
相信玩过Android的朋友都知道,APP启动后,界面会先显示白色屏幕或黑色屏幕,再进入启动页面,停留一会儿,然后进入应用程序主页。(威廉莎士比亚、坦普林、陈云)。(Northern Exposure)那么,这个黑屏或白屏到底是怎么回事呢?最好的解决办法是什么?今天我们认真讨论这个小问题吧。
此次项目的演示:
历史原因
系统启动应用程序时,zygote进程首先创建一个新的进程来运行该应用程序,但创建进程需要时间,在创建完成之前界面暴露在歌词状态下是很尴尬的。因为以为用户没有到达APP,再点击会大大降低用户体验。Android必须及时反馈以避免这种情况。因此,根据清单文件中设置的主题颜色,系统将显示白色屏幕或黑色屏幕。这个黑色(白色)屏幕的正式名称必须是预览窗口,即预览窗口。
好了,现在我们明白了Preview Window实际上是为了提高用户体验而故意设置的。所以,如果不是强迫症,可能不是问题。
但是大多数朋友好像和我一样是强迫症患者。这么丑的黑屏怎么会出现在我的app上?嗯?嗯?
好了,现在我们来谈谈这个问题的解决方法。
解决方法
既然决定解决这个问题,从哪里开始呢?Android取决于选择显示黑色屏幕或白色屏幕时设置的主题。也就是说,即使代码没有运行,配置文件也会被预先读取,并用作显示Preview Window界面的基础。大卫亚设(David Assell),Northern Exposure(美国电视新闻)。
因此,戴尔解决方案的剪切门户是整个APP的清单文件,更准确地说,应该是主题概要文件。
情景一:历史落后
此方案禁止加载Preview Window,如下所示:
style name=' apptheme ' parent=' @ Android 3360 style;
itemname=' Android : windowdisablepreview ' true/item
/style
通过将APPTheme设置为启动活动的主题,可以阻止previewindow。当然,也有人可以将previewindow设置为完全透明,以达到类似的效果。
结果,单击APP后,界面在一段时间内没有响应,进入APP。
我个人强烈不推荐这样做。因为在Android想办法的用户体验突然被你解放之前。(莎士比亚)。
案例2:自订预览视窗
具体方法如下:
style name=' apptheme ' parent=' @ Android 3360 style;
itemname=' Android 3360 window background ' @ drawable/splash _ icon/item
/style
>同样将主题设置到启动的Activity的主题中,windowBackground就是即将展示的preview window。其中splash_icon可以是一整张图片,网上很多小伙伴也都是这么做的。其实它也可以是一个能解析出图片资源的XML文件,好像只有layer-list这种能做得到,因为它能够将多个drawable叠加起来展示。
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="; android:opacity="opaque"> <item android:drawable="@color/white"/> <item> <bitmap android:gravity="center" android:src="@drawable/qq"/> </item> </layer-list>这样设置之后,当你点击APP,会立马进入你配置的界面,然后启动欢迎页,效果如下:
那么,将preview window直接设置为图片和设置为xml文件有什么区别或者优劣呢?我先卖个关子。先谈谈这种方案的优劣,首先这种方案已经解决了原生preview window的单调难看的问题,在原来的基础上进一步提升了用户体验。可是我们的APP都是有欢迎页的,从preview window跳转到欢迎页是不可避免的,这样的话,两个界面的切换就会显得很突兀的,
所以强迫症的我们,尝试让这两个界面的切换变成一个界面的变化,从而进一步提升显示效果,怎么样才能让两个界面切换看起来像是在同一个界面里的变化呢?答案就是: 动画。
在这种需求下,图片和xml文件的区别就出来了,因为后者可以帮助我们更准确的实现动画。
方案三:自定义Preview Window增强版
废话少说,我们先来看效果。
有了动画之后,界面切换顺畅了许多。
上面的动画实现其实非常简单,无非就是放缩,移动,渐变的组合使用(我仅仅用作范例给大家参考),具体的动画代码细节就不谈了,有兴趣可以去github上看本次项目的demo,我们重点来聊一聊思路。
在这里我们需要明确一点的是,preview window只能是静态图,它本身是不展示动画的,我们这里的动画,其实是在进入欢迎页之后的展示的。明确了这一点之后,整个动画效果的实现思路其实就已经摆在我们眼前了,那就是当界面从 Preview Window 跳转到 欢迎页 的时候,欢迎页必须首先展示一个和Preview Window一模一样的界面,让人看起来好像界面还没切换一样,然后再慢慢切换到欢迎页。
然后,我们再来谈谈为什么设置xml的方式可以帮助我们更准确的实现动画,就是因为要保证Preview Window和欢迎页最开始展示的界面保持绝对一致,只有通过xml的布局才是达到这种效果。
好了,启动页做到这个份儿上,应该就可以交货了,不过还有一个小问题需要大家注意的,那就是我们给Preview Window设置的背景图如果不做处理,图片就会一直存在于内存中,所以,当我们进入到欢迎页的时候,不要忘了把背景图设置为空:
S
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { //将window的背景图设置为空 getWindow().setBackgroundDrawable(null); (savedInstanceState); }到这里,关于Android启动页的相关问题就都讲完了。
获取本次项目的demo:
后记
这篇文章中,关于Android启动页的相关原理并没有从Android framework层的代码来做出解释,不过以后写到framework层的文章时候可能会提及这里。不过我想框架层的代码可能不是大家想关注的重点,因此我认为这篇文章应该是合适的。
更多Android开发方面的教程,点赞+评论、私信我回复”资料“获取!
1.《【ap黑屏是怎么回事】Android起始页黑屏及最优解决方案》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《【ap黑屏是怎么回事】Android起始页黑屏及最优解决方案》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/why/3029338.html