SplishActivity的作用

简介: 众所周知,我们很多应用都会有一个SplashActivity,用来当作进入应用的第一个过度界面,显示一个logo信息。如下所示,是我的简洁天气的SplashActivity。 但是,它的作用仅仅只是用来显示一个logo信息吗?这样岂不是太浪费了?答案是肯定的。 其实一开始学习Android的时候,我也以为它的作用仅仅是用来显示logo信息,但是在观察新浪微博、腾讯微博等应用之后

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


目录
相关文章
|
数据可视化 API vr&ar
探索Qt 3D之旅:从基础到实战,打造引人入胜的三维界面与应用
探索Qt 3D之旅:从基础到实战,打造引人入胜的三维界面与应用
2744 3
|
JSON 程序员 数据格式
深入探索 “JSON for Modern C++“:安装、构建与应用
深入探索 “JSON for Modern C++“:安装、构建与应用
480 0
|
3月前
|
人工智能 数据安全/隐私保护
AI生成的痕迹:我们如何检测机器撰写的文本
AI生成的痕迹:我们如何检测机器撰写的文本
894 117
|
3月前
|
存储 人工智能 专有云
云栖政企速递|飞天企业版“双I”战略正式发布,开启专有云智能化与国际化新篇章
2025年9月25日,在杭州云栖大会“专有云智能化与国际化论坛”上,阿里云正式发布面向未来十年的飞天企业版“双I”战略——以AI(智能化)为技术方向,International(国际化)为市场方向,全面推动专有云“智能化升级”与“全球化拓展”的双重跃迁。
521 0
|
11月前
|
机器学习/深度学习 数据可视化 算法
RT-DETR改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
RT-DETR改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
772 5
|
人工智能 监控 数据库
LLM 应用可观测性:从 Trace 视角展开的探索与实践之旅
基于大语言模型的应用在性能、成本、效果等方面存在一系列实际痛点,本文通过分析 LLM 应用模式以及关注点差异来阐明可观测技术挑战,近期阿里云可观测推出了面向 LLM 应用的可观测解决方案以及最佳实践,一起来了解下吧。
20413 120
LLM 应用可观测性:从 Trace 视角展开的探索与实践之旅
|
UED
理解服务中数据驱动及实现方式
【6月更文挑战第15天】本文介绍数据驱动设计强调通过分析用户行为和反馈来指导设计决策,减少个人偏见。通过识别关键领域、设定具体目标、形成可验证的假设,设计师可以使用数据来优化CTA转化率、降低跳出率等关键指标。数据分为定量和定性两种,用于衡量设计更改的效果。这种方法已被证实能提升转化率和销售额,同时平衡创新与用户体验。
572 3
理解服务中数据驱动及实现方式
|
消息中间件 负载均衡 Kafka
Kafka分区分配策略大揭秘:RoundRobin、Range、Sticky,你真的了解它们吗?
【8月更文挑战第24天】Kafka是一款突出高吞吐量、可扩展性和数据持久性的分布式流处理平台。其核心特性之一是分区分配策略,对于实现系统的负载均衡和高可用性至关重要。Kafka支持三种主要的分区分配策略:RoundRobin(轮询)、Range(范围)和Sticky(粘性)。RoundRobin策略通过轮询方式均衡分配分区;Range策略根据主题分区数和消费者数量分配;而Sticky策略则在保持原有分配的基础上动态调整,以确保各消费者负载均衡。理解这些策略有助于优化Kafka性能并满足不同业务场景需求。
1231 59
|
关系型数据库 MySQL 索引
如果我需要一个联合索引,应该如何创建
【10月更文挑战第15天】如果我需要一个联合索引,应该如何创建
594 0
|
关系型数据库 MySQL Linux
关系型数据库mysql的跨平台支持
【6月更文挑战第12天】
613 1

热门文章

最新文章