应用程序防黑屏启动图片添加方法
2012-06-23 17:16
162 查看
Android应用框架决定了,在我们常规的Android应用启动时,会有一段时间的黑屏。这主要是机制本身决定的。另外,如果你在onCreate函数中做耗时操作,会增加黑屏的时间。
从Activity启动的原理分析,我们可以了解到。首先启动起来的黑屏,其实是一个窗口(startingwindow)。如果我们为这个window加一个背景,就可以在第一时间用这个图取代黑屏。需要注意的是,startingwindow是针对一个Task而言的。Task内部的Activity切换不会出现starting window,因此也不会黑屏。
一般程序可能不止一个程序入口。也就是说,Task启动的第一个Activity可能是不同的。我们最好针对每个Activity做一个启动背景图,已达到更好的用户体验。
具体如何实现呢?一般情况很简单。一句话概括就是:为每个入口Activity写一个Theme,指定它的windowbackground。如何为一个Activity指定一个自定义的Theme呢?方法如下:
其中drawable属性,需要指定你的启动图片。WindowNoTitle根据你的需要选择需不需要指定。name属性自己指定。
在Activity中加上以下属性:
特殊情况:
一般情况通过这种方式就可以达到要求。但是也有一些特殊情况,大家可以了解一下。有些程序(例如电子邮件),它是通过一个没有界面的Activity作为统一入口,即(onCreate函数中没有setContentView,或者ContentView中没有内容)。然后此Activity再在代码中通过判断一些条件,启动相应的不同的Activity。
这种情况,由于Task的第一个Activity为一个空白的Activity,而由这个Activity启动其他Activity不会出现starting window。所以,按上面那种方式,就只能为第一个空白Activity指定window图片,后面的Activity指定window图片无效。
如果一定要使用不同的window图片启动,那就必须采用一些特殊的方法:
一、Task分离
由于一个Task只能有一个starting window,为了让后面的Activity有启动window,就需要将第一个Activity与其他Activity在Task上分离。这个可以在Manfest中手动指定,属性是android:taskAffinity,我们将application指定为一个task,将第一个Activity指定为另一个task。
二、删除第一个Activity的Task记录
由于一个程序被我们手动分为了两个Task。这样就会导致在多任务切换界面出现两个相同包名的任务。这很明显是不合理的。因为第一个Activity对应的Task其实只是一个空壳,我们应该将它在Task记录中去掉。
我们可以在Manifest中为这个Activity设置属性android:excludeFromRecents="true"。它的意义就是指明此Task不会出现在Recent列表中。
三、设置Activity不可见
我们设置了后面启动的Activity的启动背景图,但是第一个空白Activity还是会启动,出现黑框口。为了不让黑窗口出现,我们可以将第一个空白Activity设置为不可见。即设置主题为android:theme="@android:style/Theme.NoDisplay"。
从Activity启动的原理分析,我们可以了解到。首先启动起来的黑屏,其实是一个窗口(startingwindow)。如果我们为这个window加一个背景,就可以在第一时间用这个图取代黑屏。需要注意的是,startingwindow是针对一个Task而言的。Task内部的Activity切换不会出现starting window,因此也不会黑屏。
一般程序可能不止一个程序入口。也就是说,Task启动的第一个Activity可能是不同的。我们最好针对每个Activity做一个启动背景图,已达到更好的用户体验。
具体如何实现呢?一般情况很简单。一句话概括就是:为每个入口Activity写一个Theme,指定它的windowbackground。如何为一个Activity指定一个自定义的Theme呢?方法如下:
添加启动图片资源:
在drawable资源文件夹中添加启动图片资源文件。注意横竖屏。横屏可以放在默认的drawable文件夹中,竖屏图片应该与横屏图片同名,放在drawable-port文件夹中。自定义Theme:
在your_project/res/values/styles.xml中加入自定义Activity的Theme,如下所示:<style name="style_xxx_launch_add_account" parent="@android:style/Theme"> <item name="android:windowBackground"> @drawable/launch_add_accont </item> <item name="android:windowNoTitle"> true </item> </style>
其中drawable属性,需要指定你的启动图片。WindowNoTitle根据你的需要选择需不需要指定。name属性自己指定。
修改Manifest,将Activity与Theme对应:
定义好Theme后,就该为对应的Activity绑定Theme了。这个代码主要在Manifest中实现:在Activity中加上以下属性:
android:theme="@style/style_xxx_launch_add_account"
特殊情况:
一般情况通过这种方式就可以达到要求。但是也有一些特殊情况,大家可以了解一下。有些程序(例如电子邮件),它是通过一个没有界面的Activity作为统一入口,即(onCreate函数中没有setContentView,或者ContentView中没有内容)。然后此Activity再在代码中通过判断一些条件,启动相应的不同的Activity。
这种情况,由于Task的第一个Activity为一个空白的Activity,而由这个Activity启动其他Activity不会出现starting window。所以,按上面那种方式,就只能为第一个空白Activity指定window图片,后面的Activity指定window图片无效。
如果一定要使用不同的window图片启动,那就必须采用一些特殊的方法:
一、Task分离
由于一个Task只能有一个starting window,为了让后面的Activity有启动window,就需要将第一个Activity与其他Activity在Task上分离。这个可以在Manfest中手动指定,属性是android:taskAffinity,我们将application指定为一个task,将第一个Activity指定为另一个task。
二、删除第一个Activity的Task记录
由于一个程序被我们手动分为了两个Task。这样就会导致在多任务切换界面出现两个相同包名的任务。这很明显是不合理的。因为第一个Activity对应的Task其实只是一个空壳,我们应该将它在Task记录中去掉。
我们可以在Manifest中为这个Activity设置属性android:excludeFromRecents="true"。它的意义就是指明此Task不会出现在Recent列表中。
三、设置Activity不可见
我们设置了后面启动的Activity的启动背景图,但是第一个空白Activity还是会启动,出现黑框口。为了不让黑窗口出现,我们可以将第一个空白Activity设置为不可见。即设置主题为android:theme="@android:style/Theme.NoDisplay"。
相关文章推荐
- VS2008中添加程序启动时显示图片功能方法
- VS2008中添加程序启动时显示图片功能方法
- Ubuntu中添加应用程序快速启动器的方法
- Ubuntu中添加应用程序快速启动器的方法
- OpenWRT 添加应用程序开机启动方法
- Unity 安卓启动图片(splash image)前黑屏解决方法
- VS2008中添加程序启动时显示图片功能方法
- iOS添加背景图片方法
- iOS开发---使用Xcode8 添加Launch Image(启动图片)
- Android启动问题——黑屏、死机等解决方法
- Windows下Mysql Cluster集群启动脚本与启动服务添加方法
- C# 添加Word文本和图片超链接的方法
- Android Activity中启动另一应用程序的方法,无需类名
- “应用程序配置不正确,程序无法启动”的解决方法资料收集
- Qt for android 在安卓上面运行app启动闪黑屏的解决方法
- 因为应用程序配置不对,程序未能启动”--原因及解决方法
- MFC启动其它应用程序的方法
- “应用程序配置不正确,程序无法启动”的解决方法资料收集
- Unable to load dll 应用程序配置不正确,程序无法启动 的解决方法
- jquery生成二维码怎么添加图片(两种方法)