android启动界面(SplashActivity)

当前比较成熟一点的应用基本上都会在进入应用之显示一个启动界面,既SplashActivity,用来当作进入应用的第一个过度界面,显示一个logo信息。

如下所示,个人写demo展示的SplashActivity:
SplashActivity Demo

  • 但是,一定要注意:在应用中不要使用武器之类的图标(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进行处理
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值