Android 启动APP时黑屏白屏的三个解决方案(转载)
你会很奇怪,为什么有些app启动时,会出现一会儿的黑屏或者白屏才进入Activity的界面显示,但是有些app却不会如QQ手机端,的确这里要做处理一下。这里先了解一下为什么会出现这样的现象,其实很简单,简历一个简单的例子就可以理解了。
其实,黑屏或者白屏这里并不是不正常,而是还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景。代码如下,可以自己写个小demo就理解了。
1
2
3
4
5
6
7
8
9
10
11
12
|
@Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); // 注意:添加3秒睡眠,以确保黑屏一会儿的效果明显,在项目应用要去掉这3秒睡眠 try { Thread.sleep( 3000 ); } catch (InterruptedException e) { e.printStackTrace(); } // 在这里之前,黑屏或者白屏都是window的背景颜色,是窗口背景,还没到界面的布局呢,要执行setContentView后才显示布局 setContentView(R.layout.activity_launcher); } |
那window窗口背景在那里提供呢?在提供theme里面,如下提供的是白色背景,那就是启动时白屏一会儿的颜色设置。
1
2
3
4
5
6
|
<!-- Application theme. --> <style name= "AppTheme" parent= "AppBaseTheme" > <item name= "android:windowNoTitle" > true </item> <item name= "android:windowBackground" > @color /white</item> <!-- All customizations that are NOT specific to a particular API-level can go here. --> </style> |
所以,在theme设置windowBackground就可以解决启动时白屏黑屏一会儿了,下面提供三种解决方案:
一、提供.png背景图
提供背景图是解决的一个方法,但是要适配各种屏幕,提供很多张图片。除非图片非常复杂只能用背景图了就用这种方法吧,否则个人不建议。
二、提供.9.png(NinePatch)背景图片
如果图片不是很复杂,可以做成NinePatch图片,那就直接制作NinePatch图片,提供一张就可以适配任何手机,何乐而不为呢。
三、使用Layout-list制作背景图片
如果可以使用这种方式,推荐使用这种Layout-list制作背景图片。前2种都是使用图片占用内存啊,使用Layout-list比较省内存,做出app也不会说因为图片多体积变大吧。
下面给出代码。
LaunchActivity为启动界面停留3秒后跳转到主页面MainActivity,为了达到显示黑屏白屏的效果更明显,在setContentView之前线程睡眠3秒。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
public class LauncherActivity extends Activity { public final int MSG_FINISH_LAUNCHERACTIVITY = 500 ; public Handler mHandler = new Handler(){ public void handleMessage(Message msg) { switch (msg.what) { case MSG_FINISH_LAUNCHERACTIVITY: //跳转到MainActivity,并结束当前的LauncherActivity Intent intent = new Intent(LauncherActivity. this , MainActivity. class ); startActivity(intent); finish(); break ; default : break ; } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); // 不显示系统的标题栏,保证windowBackground和界面activity_main的大小一样,显示在屏幕不会有错位(去掉这一行试试就知道效果了) getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // 注意:添加3秒睡眠,以确保黑屏一会儿的效果明显,在项目应用要去掉这3秒睡眠 try { Thread.sleep( 3000 ); } catch (InterruptedException e) { e.printStackTrace(); } setContentView(R.layout.activity_launcher); // 停留3秒后发送消息,跳转到MainActivity mHandler.sendEmptyMessageDelayed(MSG_FINISH_LAUNCHERACTIVITY, 3000 ); } } |
activity_launcher.xml布局文件,很简单,要记住这里的LinearLayout使用的背景是layout_list_start_pic,跟主题theme使用一样的背景,这样就消除了背景不一样的效果。这里要自己试试才知道这样做的好处和效果。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android" android:layout_width= "fill_parent" android:layout_height= "fill_parent" android:background= "@drawable/layout_list_start_pic" > <TextView android:layout_width= "wrap_content" android:layout_height= "wrap_content" android:textColor= "#ffffff" android:text= "@string/hello_world" /> </LinearLayout> |
AndroidManifest.xml,这里注意application使用的theme是AppTheme,而LauncherActivity使用的主题是StartAppTheme。这样做的效果是只要LauncherActivity使用StartAppTheme主题,其他Activity都是用AppTheme主题哦。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
<?xml version= "1.0" encoding= "utf-8" ?> <manifest xmlns:android= "http://schemas.android.com/apk/res/android" package = "com.example.launcheractivity" android:versionCode= "1" android:versionName= "1.0" > <uses-sdk android:minSdkVersion= "8" android:targetSdkVersion= "18" /> <application android:allowBackup= "true" android:icon= "@drawable/ic_launcher" android:label= "@string/app_name" android:theme= "@style/AppTheme" > <activity android:name= ".LauncherActivity" android:label= "@string/app_name" android:theme= "@style/StartAppTheme" > <intent-filter> <action android:name= "android.intent.action.MAIN" /> <category android:name= "android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name= ".MainActivity" ></activity> </application> </manifest> |
styles.xml,2个主题设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<!-- Base application theme, dependent on API level. This theme is replaced by AppBaseTheme from res/values-vXX/styles.xml on newer devices. --> <style name= "AppBaseTheme" parent= "android:Theme.Light.NoTitleBar" > <!-- Theme customizations available in newer API levels can go in res/values-vXX/styles.xml, while customizations related to backward-compatibility can go here. --> </style> <!-- Application theme. --> <style name= "AppTheme" parent= "AppBaseTheme" > <item name= "android:windowNoTitle" > true </item> <item name= "android:windowBackground" > @color /white</item> <!-- All customizations that are NOT specific to a particular API-level can go here. --> </style> <style name= "StartAppTheme" parent= "AppBaseTheme" > <item name= "android:windowNoTitle" > true </item> <item name= "android:windowBackground" > @drawable /layout_list_start_pic</item> <!-- All customizations that are NOT specific to a particular API-level can go here. --> </style> </resources> |
layout_list_start_pic.xml 启动页面使用这个作为背景图片
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
<?xml version= "1.0" encoding= "utf-8" ?> <!-- 设置整个屏幕背景为白色 --> <item > <color android:color= "@color/white" /> </item> <!-- 中间logo --> <item > <bitmap android:gravity= "center" android:src= "@drawable/ic_launcher" /> </item> <!-- 底部图表 --> <item android:bottom= "10dp" > <bitmap android:gravity= "bottom|center_horizontal" android:src= "@drawable/copyright" /> </item> </layer-list> |
还有一张图片copyright.png
好了现在提供下效果图吧
启动时,黑屏白屏改造成这图片样子,哈哈~
启动完成后加装的LauncherActivity界面
调整到MainActivity界面
就这样了,本来想给gif动画的,用微信拍下来,澳澳不知道怎么发到电脑呜呜~~~后来才知道可以发到网页微信。。。
下载链接迟点发上来,哎呀妈的,要睡觉了~~·~~
若本文对你有帮助请点点赞支持,有疑问请留言共同探讨~
本文链接:http://www.cnblogs.com/liqw/p/4263418.html
下载地址:http://download.csdn.net/detail/lqw770737185/8411705
Android 启动APP时黑屏白屏的三个解决方案(转载)的更多相关文章
- Android 启动APP时黑屏白屏的三个解决方案
你会很奇怪,为什么有些app启动时,会出现一会儿的黑屏或者白屏才进入Activity的界面显示,但是有些app却不会如QQ手机端,的确这里要做处理一下.这里先了解一下为什么会出现这样的现象,其实很简单 ...
- Android 启动APP时黑屏白屏的解决方案
在开发中,我们在启动app的时候,屏幕会出现一段时间的白屏或者黑屏,不同设备时间长短不同.很影响用户体验. 首先分析一下,产生这个现象的原因,当我们在启动一个应用时,系统会去检查是否已经存在这样一个进 ...
- Android 启动APP黑屏解决方案
#Android 启动APP黑屏解决方案# 1.自定义Theme //1.设置背景图Theme <style name="Theme.AppStartLoad" parent ...
- Splash动画启动app时空白屏
相信大多数人一开始都会对启动app的时候出现先白瓶或者黑屏然后才进入第一个界面,例如:SplashActivity.那这是什么原因造成的呢? <style name="Splash_T ...
- Android -- 距离感应器控制屏幕灭屏白屏
权限 <u ...
- 关于React Native 安卓首屏白屏优化
问题描述 在android中,当点击某个rn模块的入口按钮,弹出rn的activity到rn的页面展现出来的过程中,会有很明显的白屏现象,不同的机型不同(cpu好的白屏时间短),大概1s到2s的时间. ...
- AndroidStudio启动App时,数据取不到。
最近在用AndroidStudio开发App的时候,所连的服务器如果是换成本机上的,那么启动App的时候数据就读取不出来,连其它电脑上的服务器就是正常的,如下: 05-11 09:36:57.178 ...
- Qt for Android 启动短暂的黑屏或白屏问题如何解决?
解决方法一: 使用透明主题 点击项目 -> 在 构建设置 里面找到 Build Android APK 栏目,点击 create templates 创建一个 AndroidManifest.x ...
- 启动app时全屏显示Default.png
一直很喜欢MJ的讲课视频,今天看了他的博客学到了些东西顺便记录下来. 在默认情况下,app显示Default.png时并非真正的"全屏显示",因为顶部的状态栏并没有被隐藏,比如下面 ...
随机推荐
- 用js捕捉鼠标连续点击三次事件怎么实现啊
var count = 0, timer; document.onclick = function(){ if(count < 2){ if(timer){ clearTimeout(timer ...
- 常用上网增强类Chrome扩展(转)
Chrome是个非常好用的浏览器,拥有丰富的扩展资源库,能够满足网民各种各样的需求,对于网民来说,通过Chrome扩展来增强上网体验是一个基本需求,但是安装过多的扩展有容易耗费大量系统资源,今天月光博 ...
- 帝国cms7.2灵动标签万能教程
学完本文,就完全能掌握帝国模板开发制作啦!这里只介绍sql语句调用方法(方便,快捷!) 灵动标签语法: [e:loop={,24,0}] 模板内容 [/e:loop] 详细解释:黄色部分:条件语句,即 ...
- 17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Based Replication
17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Based Replication 基于语句和基于行复制的优点和缺点: ...
- Dream
即使下着雨,天空依旧明亮,因为远方有我的梦想. ——forever97
- 拿出来分享了!VIP珍藏!!!全网最齐全的 DEDECMS模板 全盘下载地址列表!没有你找不到的!
拿出来分享了!VIP珍藏!!!全网最齐全的 DEDECMS模板 网盘地址!没有你找不到的! 模板类型最齐全: ----------------------优美的走起!------------ 一:DE ...
- Register/unregister a dll to GAC
gacutil /i "C:\Test.dll"gacutil /u "Test"
- base64这种编码的意义
BASE64不是用来加密的.你看看经过BASE64编码后的字符串,全部都是由标准键盘上面的常规字符组成,这样编码后的字符串在网关之间传递不会产生UNICODE字符串不能识别或者丢失的现象.你再仔细研究 ...
- [LeetCode]题解(python):021-Merge Two Sorted Lists
题目来源: https://leetcode.com/problems/merge-two-sorted-lists/ 题意分析: 题目给出两个排好序的链表,将这两个链表整合成一个新的有序的链表. 题 ...
- hdu1695 GCD
http://acm.hdu.edu.cn/showproblem.php?pid=16951 /** 大意: a<=x<=b , c<= y <= d ,求在此范围内 有多少 ...