每一个Android应用启动之后都会出现一个Splash启动界面,显示产品的LOGO、公司的LOGO或者开发人员信息。假设应用程序启动时间比較长,那么启动界面就是一个非常好的东西,能够让用户耐心等待这段枯燥的时间。

  1.制作Splash界面
  突出产品LOGO,产品名称,产品主要特色;
  注明产品的版本号信息;
  注明公司信息或者开发人员信息;
  背景图片,亦能够用背景颜色取代;

  2.处理后台资源
  大多数的Splash界面都是会等待一定时间,然后切换到下一个界面;
  事实上,在这段时间里,能够对系统状况进行检測,比方网络是否通,电源是否充足;
  或者,预先载入相关数据;
  为了能让启动界面展现时间固定,须要计算运行以上预处理任务所花费的时间,那么:启动界面SLEEP的时间=固定时间-预处理任务时间;

  思路有两个,一个是用两个Activity来做,一个用来做启动画面,还有一个是主页面;还能够用一个Activity来做,程序启动时显现启动画面,当启动完毕后,它会被隐藏来。

方法一:两个Activity,通过线程延迟指定的时间再运行Activity的跳转,我们须要建立两个Activity,一个是SplashActivity,用来做启动画面。还有一个是HelloWorldActivity。在这里仅仅是说明怎样来做启动画面,所以就不具体来完毕Activity了。

核心代码:

package com.demo.app;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;public class SplashActivity extends Activity {private final int SPLASH_DISPLAY_LENGHT = 6000; // 延迟六秒@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.splash);new Handler().postDelayed(new Runnable() {public void run() {Intent mainIntent = new Intent(SplashActivity.this,HelloWorldActivity.class);SplashActivity.this.startActivity(mainIntent);SplashActivity.this.finish();}}, SPLASH_DISPLAY_LENGHT);}
}

说明:

Handler().postDelayed  是延迟指定的时间再运行

Handler类主要能够使用例如以下3个方法来设置运行Runnable对象的时间:

//  马上运行Runnable对象
public final boolean post(Runnable r);
//  在指定的时间(uptimeMillis)运行Runnable对象
public final boolean postAtTime(Runnable r, long uptimeMillis);
//  在指定的时间间隔(delayMillis)运行Runnable对象
public final boolean postDelayed(Runnable r, long delayMillis); 

以下两行代码启动一个新的Activity,同一时候关闭当前Activity。

SplashActivity.this.startActivity(mainIntent);
SplashActivity.this.finish();

以下再讲一下Activity的生命周期,方便大家理解Activity的跳转。

如上所看到的,Android 程序猿能够决定一个 Activity 的“生”,但不能决定它的“死”,也就时说程序猿能够启动一个 Activity,可是却不能手动的“结束”一个 Activity。

当你调用 Activity.finish()方法时,结果和用户按下 BACK 键一样:告诉 Activity Manager 该 Activity 实例完毕了对应的工作,能够被“回收”。

随后 Activity Manager 激活处于栈第二层的 Activity 并又一次入栈,同一时候原 Activity 被压入到栈的第二层,从 Active 状态转到 Paused 状态。

比如上面样例中:从 SplashActivity 中启动了 HelloWorldActivity,则当前处于栈顶端的是 HelloWorldActivity,第二层是 SplashActivity 。

当我们调用 SplashActivity.finish()方法时(我们是在SplashActivity中通过SplashActivity.this.finish()调用的),SplashActivity 从 Active 状态转换 Stoped 状态,并被系统从栈中移除,标志能够被“回收”。

Activity 的状态与它在栈中的位置关系例如以下图:

上图的样例是

从 Activity1 中启动了 Activity2,则当前处于栈顶端的是 Activity2,第二层是 Activity1,当我们在 Activity2中调用 Activity2.finish()方法时,Activity Manager 又一次激活 Activity1 并入栈,Activity2 从 Active 状态转换 Stoped 状态,同一时候标注Activity2能够被“回收” 。Activity1. onActivityResult(int requestCode, int resultCode, Intent data)方法被运行,Activity2 返回的数据通过 data參数返回给 Activity1。

还有一点要注意的是,不要忘了改动AndroidManifest.xml文件。例如以下:

<?xmlversion="1.0"encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.demo.app" android:versionCode="1" android:versionName="1.0"<applicationandroid:icon="@drawable/icon";android:label="@string/app_name"><activityandroid:name=.SplashActivity" android:label="@string/app_name"> ;<intent-filter><actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <activityandroid:name="Main"></activity> </application> <uses-sdkandroid:minSdkVersion="3"/>
</manifest>

方法二:一个 Activity来做。程序启动时显现启动画面,当启动完毕后,它会被隐藏来

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent"><LinearLayout android:id="@+id/splashscreen"android:orientation="vertical" android:layout_width="fill_parent"android:layout_height="fill_parent"><TextView android:id="@+id/info" android:layout_width="fill_parent"android:layout_height="wrap_content" android:gravity="center"android:paddingTop="10px" android:text="This is a splash !" /></LinearLayout><TextView android:layout_width="fill_parent"android:paddingTop="10px" android:layout_height="wrap_content"android:text="This is a Context" />
</LinearLayout>

说明:

这里有一个id为splashscreen的LinearLayout,是程序启动时显现的部分。当启动完毕后,它会被隐藏。

核心代码:

package com.demo.app;import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import android.view.View;
import android.view.Window;
import android.widget.LinearLayout;
import android.widget.TextView;public class MainActivity extends Activity {private LinearLayout splash;private TextView tv;private static final int STOPSPLASH = 0;// time in millisecondsprivate static final long SPLASHTIME = 1000;private Handler splashHandler = new Handler() {public void handleMessage(Message msg) {switch (msg.what) {case STOPSPLASH:SystemClock.sleep(4000); splash.setVisibility(View.GONE);break;}super.handleMessage(msg);}};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().requestFeature(Window.FEATURE_PROGRESS);setContentView(R.layout.main);splash = (LinearLayout) findViewById(R.id.splashscreen);tv = (TextView) findViewById(R.id.info);tv.setText("正在建立数据连接");Message msg = new Message();msg.what = STOPSPLASH;splashHandler.sendMessageDelayed(msg, SPLASHTIME);}
}

当在应用启动后发送一个消息,把指定区域设置为隐藏, splash.setVisibility(View.GONE); 就实现了启动界面。

总结一下,个人认为还是第一个方法比較合适,当一个程序主Activity里的东西比較多的时候,假设我们还把启动画面也加进去,势必会影响程序的效率,所以实际应用的话,第一个方法是首选。

Android创建启动画面相关推荐

  1. android 开机动画实现,Android App启动画面实现

    app打开时都会有个启动画面(一幅图.一个提示之类的),画面停留2-3秒,然后结束掉自己,启动要呈现的第一个activity. Handler的postDelayed方法就很适合实现这个功能.它相当于 ...

  2. Android -- 程序启动画面 Splash

    很多应用都会有一个启动界面.欢迎画面慢慢隐现,然后慢慢消隐. 我的方式是使用两个Activity,程序启动时候load第一张Activity,然后由tick触发N秒钟后startActivity另外一 ...

  3. android开发启动画面,Android开发笔记——如何正确实现App启动页

    启动页在当前的Android APP中有着广泛的使用,在Material Design规范出来之前,Android官方是不推荐使用启动页的,理由是让用户在启动APP后干等是一种浪费时间的行为.Mate ...

  4. android最优化启动画面,Android启动页黑屏及最优解决方案

    原标题:Android启动页黑屏及最优解决方案 作者:拉丁吴 链接:https://juejin.im/post/58ad90518ac2472a2ad9b684 前言 相信做过Android的朋友都 ...

  5. android studio 启动画面,Android Studio 利用Splash制作APP启动界面的方法

    public class SplashActivity extends Activity { // private final int SPLASH_DISPLAY_LENGHT = 2000; // ...

  6. Android 12 启动画面-SplashScreen,面试看这个就够了

    默认情况下,使用启动图标.

  7. Android 12 启动画面-SplashScreen

  8. 最简单的delphi启动画面(转)

    首先做一窗体,然后将BorderStyle的属性设为bsnone,放image控件,align设为alclient 然后将主程序的修改为 uses Windows, Forms, Unit1 in ' ...

  9. Android 12 新APP启动画面(SplashScreen API)简介源码分析

    以往的启动画面 默认情况下刚启动APP时会显示一会白色背景 如果把这个启动背景设置为null,则一闪而过的白色会变成黑色 如果把启动Activity设置为背景透明[< item name=&qu ...

最新文章

  1. Maven+mybatis教程
  2. yii2.0框架中自定义接口,实现类的多继承
  3. Select SQL查询效率优化原则
  4. python读取json文件转化为list_Python从所有子目录读取JSON文件
  5. 号称要打败阿尔法狗的DeepZenGo 高调挑战人类
  6. 2009 年 5 月 忙碌的一个月
  7. Android数据的四种存储方式SharedPreferences、SQLite、Content Provider和File (二) —— SQLite...
  8. python电脑编程求圆的面积案例_学Python划重点七 网络编程(UPD Socket编程、上传文件实例、计算圆的面积实例)...
  9. 突发!Python再次卫冕,Java和C下降,你怎么看?
  10. Hadoop初次接触后感
  11. 突发:格鲁吉亚所有公民的个人详情被泄露在黑客论坛
  12. 【Android架构GPS篇】之定位数据如何从GPS芯片到应用层
  13. 小红书创始人瞿芳回应裁员风波:战略部署清晰 人员翻倍
  14. aspeed显卡安装ubuntu驱动
  15. 详细分析《三合一收款码》后台程序识别原理
  16. VMware虚拟机使用记录
  17. 桌面计算机图标变黑块,电脑桌面图标变成黑色方块该怎么解决?
  18. 哪类人适合学软件测试?零基础能学测试吗?
  19. linux dd if提示是目录,Linux dd 命令详解
  20. 宋宝华:为什么numactl内存绑定对代码段不起作用

热门文章

  1. Windows10 右键“打开文件所在位置”找不到应用程序
  2. mysql +hive 安装
  3. 7.25 Ext JS下拉单选框(Combobox,TagFied)使用及疑难问题解决
  4. c语言dp算法,C++动态规划dp算法题
  5. 数据库oracle修改属性列,Oracle修改表结构
  6. STM32之PWM波
  7. jquery 监听返回事件
  8. Myeclipse包变成文件夹
  9. php微信公众号测试号token配置失败,微信公众号Token配置失败解决办法
  10. 计算机原理 ---- 程序之下