Android程序开始的等待动画或LOGO

在进入程序前,一般都要有一个欢迎图片LOGO或者动画,等待几秒后隐藏Logo或做Intent跳转:

可以使用HandlerThread新建一个线程来执行等待动作,也可以使用Android的TimerTask:

1.HandlerThread:

Java代码  收藏代码
  1. public class WelcomeAct extends Activity {  
  2.       
  3.     protected static final String TAG = "WelcomeAct";  
  4.       
  5.     private Handler handler; //因为要重写构造方法,所以不能用匿名内部类  
  6.       
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         super.onCreate(savedInstanceState);  
  10.         // 设置登录无标题栏  
  11.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  12.         setContentView(R.layout.welcome);  
  13.   
  14.         HandlerThread myThread = new HandlerThread("myHandlerThread");  
  15.         myThread.start();  
  16.         handler = new myHandler(myThread.getLooper());  
  17.         handler.post(new Runnable() {  
  18.             @Override  
  19.             public void run() {  
  20.                 try {  
  21.                     //耗时的操作  
  22.                     Thread.sleep(2500);  
  23.                     //handler主要用于异步消息的处理,使用sendMessage()后,方法立即返回,Message放入消息队列,  
  24.                     //等待Message出消息队列,由handlerMessage(Message msg)通知UI线程子线程已经挂起,并使用返回的msg。  
  25.                     handler.sendMessage(handler.obtainMessage());  
  26.                 } catch (InterruptedException e) {  
  27.                     e.printStackTrace();  
  28.                 }  
  29.             }  
  30.         });  
  31.     }  
  32.       
  33.     class myHandler extends Handler{  
  34.           
  35.         public myHandler(Looper looper) {  
  36.             super(looper);  
  37.         }  
  38.   
  39.         //负责从消息队列中取消息给UI线程  
  40.         @Override  
  41.         public void handleMessage(Message msg) {  
  42.             super.handleMessage(msg);  
  43.             Intent intent = new Intent(WelcomeAct.this, LoginAct.class);  
  44.             startActivity(intent);  
  45.         }  
  46.     }  
  47. }  

 2.使用TimerTask:

Java代码  收藏代码
  1. public class WelcomeAct extends Activity {  
  2.       
  3.     protected static final int LOGINOVER = 0;  
  4.   
  5.     protected static final String TAG = "WelcomeAct";  
  6.       
  7.     private Handler handler; //因为要重写构造方法,所以不能用匿名内部类  
  8.       
  9.     @Override  
  10.     protected void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         // 设置登录无标题栏  
  13.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  14.         setContentView(R.layout.welcome);  
  15.         ProgressBar loading = (ProgressBar)findViewById(R.id.loading);  
  16.         loading.setVisibility(View.VISIBLE);  
  17.         HandlerThread myThread = new HandlerThread("myHandlerThread");  
  18.         myThread.start();  
  19.         handler = new Handler(){  
  20.             @Override  
  21.             public void handleMessage(Message msg) {  
  22.                 if(msg.what == LOGINOVER){  
  23.                     Log.i(TAG, Thread.currentThread().getName());  
  24.                     Intent intent = new Intent(WelcomeAct.this, LoginAct.class);  
  25.                     startActivity(intent);  
  26.                 }  
  27.             }  
  28.               
  29.         };  
  30.         tt.run();  
  31.     }  
  32.       
  33.     TimerTask tt = new TimerTask() {  
  34.         @Override  
  35.         public void run() {  
  36.             Log.i(TAG, Thread.currentThread().getName());  
  37.             handler.sendMessageDelayed(handler.obtainMessage(LOGINOVER), 3000);  
  38.         }  
  39.     };  
  40. }  

也可设计为没有Intent跳转,使用View.setVisibility(View.GONE);和 View.VISIBLE来达到想要的效果。

使用TimerTask,打印线程名可以看出,系统没有新开线程,而且达到了阻塞等待的目的,代码量小,推荐用。

原文地址:https://www.cnblogs.com/tonglingqijie/p/4692087.html