android利用定时器实现应用开头加载图片或者静态广告的显示

时间:2021-11-23 19:59:45

下载了韩寒的电子杂志《一个》,它有一个广告,就是每次进入程序的时候都会有一个静态的图片(如果没猜错的话应该是ImageView),然后显示几秒钟过后才进入真正的程序,其他的一些APP中也有一些是刚进程序的时候,先显示一张静态的等待图片,其实那个是等待加载的图片,其实功能也和这个类似,只不过那个是加载完成后再跳转,我这个为了实现定时就是显示固定的实现,那么这个简单的有用的小功能是如何实现的呢?

首先这个功能要用到两个知识点一个是Handler 一个是定时器工具TimerTask。备注:一般情况下TImerTask我们都是配合Timer来使用利用Timer来控制我们需要的时间。例如5秒后执行run()中的内容。

TimerTask task = new TimerTask() {
            @Override
            public void run() {
                // to do what you want
            }
        };
 
        Timer timer = new Timer();
        timer.schedule(task, 5000);

我们的需求实现起来其实很简单,那就是在一个activity里面有一个ImageView开始的时候让它显示5秒,过后隐藏它就能达到我们的效果了,这个时候如果用上述的方法的话,则程序运行会报错。

android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

这主要是Android的相关View和控件不是线程安全的,所以使用Handler可以很好的处理主线程UI的更新操作,那这里既然引入了Handler那么我们就可以利用Handler来控制时间了,所以就不用Timer了最后的代码如下:

TimerTaskActivity.java

package com.challen;

import java.util.TimerTask;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;

public class TimerTaskTestActivity extends Activity {
	ImageView image1;
	Handler handler;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//去掉title标题栏
		this.requestWindowFeature(Window.FEATURE_NO_TITLE);
//		//设置activity全屏
//		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
//				WindowManager.LayoutParams.FLAG_FULLSCREEN);
		//设置显示的XML,需要注意的是去掉状态栏和全屏的操作要放在setContentView之前,不然会报错。
		setContentView(R.layout.main);
		// 显示的全屏图片
		image1 = (ImageView) findViewById(R.id.Image1);
		handler = new Handler();
		TimerTask task = new TimerTask() {
			public void run() {
				// 隐藏掉全屏图片
				image1.setVisibility(View.GONE);
			}
		};
		// 5秒后执行TimerTask任务
		handler.postDelayed(task, 5000);
	}
}

好了这样就实现了进入程序的时候首先是显示图片,然后显示5秒后才是去掉这张全屏图的内容,顺带把布局也放上来吧,这个ImageView需要放到最上面一层

main.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/Image1"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:src="@drawable/bg" 
        android:visibility="visible"
        />
   <TextView
        android:id="@+id/text"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="图片消失后的内容" />

</LinearLayout>