博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
APP启动时黑屏白屏问题的三个解决方案
阅读量:5928 次
发布时间:2019-06-19

本文共 2663 字,大约阅读时间需要 8 分钟。

本文转自:

你会很奇怪,为什么有些app启动时,会出现一会儿的黑屏或者白屏才进入Activity的界面显示,但是有些app却不会如QQ手机端,的确这里要做处理一下。这里先了解一下为什么会出现这样的现象,其实很简单,简历一个简单的例子就可以理解了。其实,黑屏或者白屏这里并不是不正常,而是还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景。代码如下,可以自己写个小demo就理解了。

@Overrideprotected 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里面,如下提供的是白色背景,那就是启动时白屏一会儿的颜色设置。

所以,在theme设置windowBackground就可以解决启动时白屏黑屏一会儿了,下面提供三种解决方案:

一、提供.png背景图

提供背景图是解决的一个方法,但是要适配各种屏幕,提供很多张图片。除非图片非常复杂只能用背景图了就用这种方法吧,否则个人不建议。

二、提供.9.png(NinePatch)背景图片

如果图片不是很复杂,可以做成NinePatch图片,那就直接制作NinePatch图片,提供一张就可以适配任何手机,何乐而不为呢。

三、使用Layout-list制作背景图片

如果可以使用这种方式,推荐使用这种Layout-list制作背景图片。前2种都是使用图片占用内存啊,使用Layout-list比较省内存,做出app也不会说因为图片多体积变大吧。

下面给出代码。

LaunchActivity为启动界面停留3秒后跳转到主页面MainActivity,为了达到显示黑屏白屏的效果更明显,在setContentView之前线程睡眠3秒。

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;        }    };};@Overrideprotected 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使用一样的背景,这样就消除了背景不一样的效果。这里要自己试试才知道这样做的好处和效果。

AndroidManifest.xml,这里注意application使用的theme是AppTheme,而LauncherActivity使用的主题是StartAppTheme。这样做的效果是只要LauncherActivity使用StartAppTheme主题,其他Activity都是用AppTheme主题哦。

styles.xml,2个主题设置

layout_list_start_pic.xml 启动页面使用这个作为背景图片

转载地址:http://qmevx.baihongyu.com/

你可能感兴趣的文章
OC面向对象—封装
查看>>
List<>与string[]以及List<>与string
查看>>
神经网络- receptive field
查看>>
SharpDeveloeper开发ASP.NET MVC汗流浃背
查看>>
gridview实现分页
查看>>
ERROR (ClientException): Unexpected API Error
查看>>
获取一篇新闻的全部信息
查看>>
Inmon and Kimball
查看>>
html基础
查看>>
#HTTP协议学习# (七)cookie
查看>>
CSS中的!important属性用法
查看>>
java.lang.NoClassDefFoundError: org.ksoap2.serialization.SoapObject
查看>>
Linux常用命令
查看>>
Javascript:this用法
查看>>
PHP 7.2 新功能介绍
查看>>
洛谷——P1305 新二叉树(新建二叉树以及遍历)
查看>>
Makefile 使用总结
查看>>
centos7.0搭建svn服务器
查看>>
JS多个对象添加到一个对象中
查看>>
九度 1376 最近零子序列
查看>>