[任务分析]
欢迎界面主要展示产品Logo和版本信息,通常会在该界面停留一段时间之后自动跳
转到其他界面,因此需要在逻辑代码中设置欢迎界面暂停几秒(本项目为3秒)后再跳转,
并获取程序的版本号。
[任务实施]
(1)获取版本号
在SplashActivity中创建init)方法,在该方法中获取TextView控件,通过PackageManager
(包管理器)获取程序版本号(版本号是build.gradle 文件中的 versionName的值),并
将其显示在TextView 控件上。
(2)让界面延迟跳转
在init()方法中使用Timer以及TimerTask 类设置欢迎界面延迟3秒再跳转到主界面
(MainActivity所对应的界面,此界面目前为空白页面),具体代码如下所示。
package com.boxuegu.activity;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
import com.boxuegu.R;
import com.boxuegu.MainActivity;
import java.util.Timer;
import java.util.TimerTask;
public class SplashActivity extends AppCompatActivity {
private TextView tv_version;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
//设置此页面为竖屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
init();
}
private void init(){
tv_version=(TextView) findViewById(R.id.tv_version);
try{
PackageInfo info=getPackageManager().getPackageInfo(getPackageName(),0);
tv_version.setText("V"+info.versionName);
}catch(PackageManager.NameNotFoundException e){
e.printStackTrace();
tv_version.setText("V");
}
Timer timer=new Timer();
TimerTask task=new TimerTask() {
@Override
public void run() {
Intent intent=new Intent(SplashActivity.this, LoginActivity.class);
startActivity(intent);
SplashActivity.this.finish();
}
};
timer.schedule(task,3000);
}
}
第27,28行代码首先通过 PackageManager的 getPackagelnfo方法获取Packagelnfo对象,然后通过该对象的versionName 属性获取程序的版本号,最后通过 setText)方法将获取到的版本号设置到TextView 控件上。
第34~44行代码的作用是让程序在欢迎界面停留3秒后跳转。 在此段代码中主要用到两个类,分别为Timer类和 TimerTask类,其中Timer类是JDK(Java SEDevelopment Kit,Java开发工具包)中提供的一个定时器工具,使用时会在主线程之外开启一个单独的线程执行指定任务,任务可以执行一次或多次。Timer Task类是一个实现了 Runnable 接口的抽象类,同时代表一个可以被 Timer执行的任务,因此跳转到主界面的任务代码写在TimerTask的run)方法中。Timer的 schedule)方法是任务调度方法,在3秒之后调度TimerTask执行跳转操作,实现延迟跳转功能。