android启动界面(SplashActivity)
2016-07-23 09:39
429 查看
当前比较成熟一点的应用基本上都会在进入应用之显示一个启动界面,既SplashActivity,用来当作进入应用的第一个过度界面,显示一个logo信息。
如下所示,个人写demo展示的SplashActivity:
但是,一定要注意:在应用中不要使用武器之类的图标(ps:时间紧张,在本地找到一张先用着),应用的名字一定不要带有“武器”等带有暴力等敏感性的词/字,游戏好像是另外一回事儿
启动界面的本意是以友好用户界面来掩饰后台缓冲加载,让用户用平和等待的心情进入正常应用界面.
但是因为启动界面是放在开始,在这个特殊的点上,可以做更多的事情,如应用宣传,显示版权,展示广告等等.
所以,这个启动界面的元素,可多可少,就看你的用意和需求.
下面我把一些常见的元素罗列出来:
(1). 应用名称
(2). 应用版本
(3). 应用图标
(4). 版权
(5). 一句话描述
(6). 进度条
(7). 额外信息,如市场专版,独家首发等
SplashActivity的优点
(1). 友好的等待界面,这是最基本的
(2). 应用的基本说明,宣传介绍
(3). 动态的广告,全屏广告
(4). 应用的属性说明如版本,版权等信息,知晓用户当前应用的基本属性
从技术的角度细看,还有如下:
(5). 加载耗时资源
(6). 检查新版本
(7). 预设条件
(8). 代码分离
布局(建议使用RelativeLayout,但是对于一些简单的布局,使用LinearLayout也是足够的):
代码分离
把代码分开写,条理清晰,降低各个组件之间的耦合度,提高代码复用率,尽可能避免代码冗余性
比如说检查新版本这个操作,
如果放在主界面中,就容易把本来是一个独立的操作和加载数据的操作混在一起,增加了主界面代码的复杂度,
如果放启动界面中,就会显得更干净更清晰的在启动模块中检测(因为检测新版本本来就是应该在应用启动的时候执行),而且还可以考虑是否允许用户进入主界面(当你决定完全放弃老版本的时候,有时需要强制用户升级到新版本)。
好了,废话不多说,上代码:
如果使用Thread,那么再创建一条线程,但是如果把SplashActivity放在主线程的话,会阻塞主线程,但是如果因为这个启动界面而new一条子线程,那么对内存来说是种很大的浪费
通过 handler.sendEmptyMessageDelayed 把消息延迟发送
Handler mHandler = new Handler();如果只是new一个handler,并不会对消息作出处理
Handler的消息传给 handleMessage进行处理
如下所示,个人写demo展示的SplashActivity:
但是,一定要注意:在应用中不要使用武器之类的图标(ps:时间紧张,在本地找到一张先用着),应用的名字一定不要带有“武器”等带有暴力等敏感性的词/字,游戏好像是另外一回事儿
启动界面的本意是以友好用户界面来掩饰后台缓冲加载,让用户用平和等待的心情进入正常应用界面.
但是因为启动界面是放在开始,在这个特殊的点上,可以做更多的事情,如应用宣传,显示版权,展示广告等等.
所以,这个启动界面的元素,可多可少,就看你的用意和需求.
下面我把一些常见的元素罗列出来:
(1). 应用名称
(2). 应用版本
(3). 应用图标
(4). 版权
(5). 一句话描述
(6). 进度条
(7). 额外信息,如市场专版,独家首发等
SplashActivity的优点
(1). 友好的等待界面,这是最基本的
(2). 应用的基本说明,宣传介绍
(3). 动态的广告,全屏广告
(4). 应用的属性说明如版本,版权等信息,知晓用户当前应用的基本属性
从技术的角度细看,还有如下:
(5). 加载耗时资源
(6). 检查新版本
(7). 预设条件
(8). 代码分离
布局(建议使用RelativeLayout,但是对于一些简单的布局,使用LinearLayout也是足够的):
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#eeeeee" android:orientation="vertical" > <TextView android:id="@+id/tv_version_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:layout_marginRight="20dp" android:layout_marginTop="30dp" android:text="@string/txt_version_name" android:textSize="20sp" android:textColor="@color/dark_gray" android:shadowColor="#551111" android:shadowRadius="1" android:shadowDx="0" android:shadowDy="1" /> <ImageView android:layout_height="230dp" android:layout_width="230dp" android:src="@drawable/logo_splash" android:layout_gravity="center_horizontal" android:layout_marginTop="30dp" /> <TextView android:text="@string/app_name" android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_gravity="center_horizontal" android:textSize="40sp" android:layout_marginTop="10dp" android:textColor="@color/dark_gray" android:shadowColor="#42EB88" android:shadowRadius="3" android:shadowDx="1" android:shadowDy="1" /> <ProgressBar android:layout_marginTop="10dp" android:layout_height="70dp" android:layout_width="70dp" android:layout_gravity="center_horizontal" /> </LinearLayout>
代码分离
把代码分开写,条理清晰,降低各个组件之间的耦合度,提高代码复用率,尽可能避免代码冗余性
比如说检查新版本这个操作,
如果放在主界面中,就容易把本来是一个独立的操作和加载数据的操作混在一起,增加了主界面代码的复杂度,
如果放启动界面中,就会显得更干净更清晰的在启动模块中检测(因为检测新版本本来就是应该在应用启动的时候执行),而且还可以考虑是否允许用户进入主界面(当你决定完全放弃老版本的时候,有时需要强制用户升级到新版本)。
好了,废话不多说,上代码:
public class SplashActivity extends BaseActivity { Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { switch (msg.what) { case 1: startMainActivity(); break; default: break; } } }; @Override protected void initView() { this.setContentView(R.layout.activity_splash); mHandler.sendEmptyMessageDelayed(1,2000); } private void startMainActivity() { Intent intent = new Intent(this, MainActivity.class); startActivity(intent); finish(); } }
如果使用Thread,那么再创建一条线程,但是如果把SplashActivity放在主线程的话,会阻塞主线程,但是如果因为这个启动界面而new一条子线程,那么对内存来说是种很大的浪费
通过 handler.sendEmptyMessageDelayed 把消息延迟发送
Handler mHandler = new Handler();如果只是new一个handler,并不会对消息作出处理
Handler的消息传给 handleMessage进行处理
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories