SplishActivity的作用

简介: <p><span style="font-family:Comic Sans MS; font-size:14px">众所周知,我们很多应用都会有一个SplashActivity,用来当作进入应用的第一个过度界面,显示一个logo信息。如下所示,是我的<a target="_blank" href="http://blog.csdn.net/way_ping_li/article/deta

众所周知,我们很多应用都会有一个SplashActivity,用来当作进入应用的第一个过度界面,显示一个logo信息。如下所示,是我的简洁天气的SplashActivity。



但是,它的作用仅仅只是用来显示一个logo信息吗?这样岂不是太浪费了?答案是肯定的。

其实一开始学习Android的时候,我也以为它的作用仅仅是用来显示logo信息,但是在观察新浪微博、腾讯微博等应用之后,我发现每次显示这个界面的时间会有所不同,网络好的时候感觉不出来,网络不好的时候会停留的时间比较长一点,所以,我可以肯定说:在这个Activity里面,肯定为下一个Activity的出现打好了基础,也就是说预先初始化了一些工具类、加载了一些必要数据。这样的话在下一个Activity很快就可以完整把所有数据展现在用户面前,获取更好的用户体验。

说到这里,也许有的童鞋就会说了,我可以在Application里做这些事情啊,然后直接进入MainActivity,其实这样也是可以的,比如我这个简洁天气最初就是这样做的,但是细心的朋友就会发现,每次进我这个应用的时候,屏幕会黑一段时间,尤其是第一次进入更加明显,其实就是因为我把加载数据的事情放在Application里面,而加载2000多个城市是需要一定时间的。这样就不可避免的会黑一段时间,这样给用户的感觉就没那么亲和了。


OK,铺垫就到这里了,下面切入正题,我们来看看这个简单SplashActivity:

  1. /** 
  2.  *  
  3.  * @author way  
  4.  * 预先加载数据的SplashActivity 
  5.  *  
  6.  */  
  7. public class SplashActivity extends Activity {  
  8.     private static final int SHOW_TIME_MIN = 3000;// 最小显示时间  
  9.     private long mStartTime;// 开始时间  
  10.   
  11.     private Handler mHandler = new Handler() {  
  12.         public void handleMessage(android.os.Message msg) {  
  13.             switch (msg.what) {  
  14.             case Application.CITY_LIST_SCUESS:// 如果城市列表加载完毕,就发送此消息  
  15.                 long loadingTime = System.currentTimeMillis() - mStartTime;// 计算一下总共花费的时间  
  16.                 if (loadingTime < SHOW_TIME_MIN) {// 如果比最小显示时间还短,就延时进入MainActivity,否则直接进入  
  17.                     mHandler.postDelayed(goToMainActivity, SHOW_TIME_MIN  
  18.                             - loadingTime);  
  19.                 } else {  
  20.                     mHandler.post(goToMainActivity);  
  21.                 }  
  22.                 break;  
  23.             default:  
  24.                 break;  
  25.             }  
  26.         }  
  27.     };  
  28.     //进入下一个Activity  
  29.     Runnable goToMainActivity = new Runnable() {  
  30.   
  31.         @Override  
  32.         public void run() {  
  33.             SplashActivity.this.startActivity(new Intent(SplashActivity.this,  
  34.                     MainActivity.class));  
  35.             finish();  
  36.         }  
  37.     };  
  38.   
  39.     @Override  
  40.     protected void onCreate(Bundle savedInstanceState) {  
  41.         super.onCreate(savedInstanceState);  
  42.         setContentView(R.layout.splash);  
  43.         mStartTime = System.currentTimeMillis();//记录开始时间,  
  44.         Application.getInstance().initData(mHandler);//开始加载数据  
  45.     }  
  46. }  

我这里把加载数据的函数放在Application里面,做一些复制数据库文件,读取数据库城市列表等一些相对比较耗时的事情,这里就不具体说这个加载数据的函数了。因为我们可以根据不同的需求改变这个函数,比如说微博应用就替换成异步请求网络数据等。我这个例子仅是提供一个扩展思路,如果有更好的建议或者批评,欢迎大家给我留言。


目录
相关文章
|
6月前
|
存储
电感器的作用及其应用
一、电感器的基本原理 电感器是一种用于存储和释放电能的 passive 设备,它的基本原理是利用线圈中的电流产生磁场,从而储存电能。电感器由一个或多个线圈组成,线圈中的导线环绕在一个或多个磁性材料的芯上。当电流通过线圈时,磁场会在芯中产生,这个磁场会储存电能。 二、电感器的类型 根据电感器的结构和特性,可以将电感器分为多种类型。常见的电感器包括固定电感器、可变电感器和互感器。 1. 固定电感器:固定电感器是指电感值不可调节的电感器。它通常由线圈和磁性芯组成,线圈中的导线匝数和磁性芯的材料和形状决定了电感器的电感值。 2. 可变电感器:可变电感器是指电感值可调节的电感器。它通常由线圈和可移动的磁
75 0
|
1月前
|
C++
C++ 接口的实现,及作用通俗理解方式
C++中的接口,一般就是指抽象类,是一种用来描述类对外提供的操作、方法或功能的集合——注意,一般只是描述(声明),而不对这些方法或功能进行定义实现,通常在
31 2
|
6月前
|
存储
电感的作用及其应用
一、什么是电感 电感是指导体中由于电流变化而产生的磁场所产生的电动势。电感是电路中的一种被动元件,通常由线圈或线圈的组合构成。当电流通过电感时,由于电流的变化,会在电感周围产生磁场,这个磁场又会产生电动势,阻碍电流的变化。因此,电感具有阻抗的特性,对交流电有较大的阻碍作用,而对直流电几乎没有影响。电感在电路中常用于滤波、储能、变压器等应用。 二、电感的作用 电感在电路中有多种作用,以下是其中几种: 1. 储能:电感能够将电能转化为磁能,当电流断开时,磁场会产生电动势,将磁能转化为电能,从而实现电能的储存。 2. 滤波:电感对交流电有较大的阻碍作用,可以用来滤除高频噪声或者直流分量,从而实现信号
125 0
|
9月前
|
C++
do while(0)的作用以及原因
do while(0)的作用以及原因
95 0
函数的作用
函数的作用
84 0
|
弹性计算 应用服务中间件 云计算
学生服务器是什么?有什么具体作用和用途?
学生服务器是什么?有什么具体作用和用途?
251 0
|
Java Spring 容器
SmartInitializingSingleton的作用和原理
SmartInitializingSingleton的作用和原理
6133 0
|
JavaScript 前端开发
|
缓存 安全 网络协议