Android开发笔记--制作启动界面splash

本文介绍如何在Android应用中实现带有延迟跳转功能的欢迎界面。通过设置SplashActivity并在一定时间后自动跳转到主Activity,文章还解释了Handler类的使用方法及Activity生命周期的相关概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先设置布局文件,欢迎界面为splash.xml。具体要什么样子的欢迎界面,请自己设计。

然后在主启动文件中输入下面代码:

[java]  view plain  copy
  1. package hopedark.HelloWorld;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. import android.os.Handler;  
  7.   
  8. public class SplashActivity extends Activity {  
  9.   
  10.     private final int SPLASH_DISPLAY_LENGHT = 3000// 延迟八秒  
  11.   
  12.     @Override  
  13.     protected void onCreate(Bundle savedInstanceState) {  
  14.         super.onCreate(savedInstanceState);  
  15.         setContentView(R.layout.splash);  
  16.   
  17.         new Handler().postDelayed(new Runnable() {  
  18.             public void run() {  
  19.                 Intent mainIntent = new Intent(SplashActivity.this,  
  20.                         ProgramActivity.class);//由启动文件SplashAcitivity跳转到ProgramActivity执行代码。ProgramActivity文件内包含了程序主要的核心代码。  
  21.                 SplashActivity.this.startActivity(mainIntent);  
  22.                 SplashActivity.this.finish();  
  23.             }  
  24.   
  25.         }, SPLASH_DISPLAY_LENGHT);  
  26.   
  27.     }  
  28. }  

[html]  view plain  copy
  1. <activity  
  2.     android:label="@string/app_name"  
  3.     android:name=".<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; ">SplashActivity</span><span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; ">></span>  
  4.     <intent-filter > //这句话将SplashActivity.java文件设为程序启动文件  
  5.         <action android:name="android.intent.action.MAIN" />  
  6.   
  7.         <category android:name="android.intent.category.LAUNCHER" />  
  8.     </intent-filter>  
  9. </activity>  
  10. <activity android:name=".<span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; ">ProgramActivity</span><span style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; ">"></activity></span>  
上面的XML代码在Manifest文件中修改。


说明:

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

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

[java]  view plain  copy
  1. //  立即执行Runnable对象    
  2. public final boolean post(Runnable r);    
  3. //  在指定的时间(uptimeMillis)执行Runnable对象    
  4. public final boolean postAtTime(Runnable r, long uptimeMillis);    
  5. //  在指定的时间间隔(delayMillis)执行Runnable对象    
  6. public final boolean postDelayed(Runnable r, long delayMillis);   

有关 Handler 类的更详细可以看这篇文章:http://book.51cto.com/art/201006/207064.htm

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

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

对 finish 方法的解释如下: http://android.toolib.net/reference/android/app/Activity.html 
Call this when your activity is done and should be closed. The ActivityResult is propagated back to whoever launched you via onActivityResult().



图来自: http://www.ibm.com/developerworks/cn/opensource/os-cn-android-actvt/

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

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

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

例如上面例子中:从 SplashActivity 中启动了ProgramActivity,则当前处于栈顶端的是ProgramActivity,第二层是 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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值