在開發android應用的時候 ,尤爲是遊戲的時候,常常須要有一個Splash Screen(就相似於Eclipse啓動的畫面)。可是,android好像沒有對這個有很好的支持(也許我沒找到吧)。好比iphone,只須要將 Splash的圖片以default命名,就能夠能夠出現Splash Screen了,方式很簡單。那在android中怎麼辦呢?我試了兩種方法,下面我給你們一一道來。java
第一種,我採用的方式是在Activity中新開一個線程,這個線程判斷過去了多長時間,若是到大了設定的時間,則結束當前的Splash Screen,啓動新的Activity,每每是遊戲的主菜單。這種方式表面上使用沒有任何的問題,可是,當我結束線程的使用stop方法的時候,android實際上跑出了一個異常:不支持這個操做。儘管可以運行,可是有異常,有點不爽。因此我就改造了一下,使用了第二種方法。android
第二種,經過Timer和TimerTask,Handler的結合。Timer來計時,TimerTask來判斷是否是已經知足設定時間,hanlder來具體啓動新的Activity。這種方法比較好,沒有出現異常。具體的實現方法:iphone
在Activity中的onCreate方法中,初始化並開始Timer:ide
timer = new Timer(true); startTime = System.currentTimeMillis(); timer.schedule(task, 0, 1);
startTime是開始時間,要判斷時間差是否知足設定的時間。下面是TimerTask的代碼:
private final TimerTask task = new TimerTask() { @Override public void run() { if (task.scheduledExecutionTime() - startTime == 1000 || !_active) { Message message = new Message(); message.what = 0; timerHandler.sendMessage(message); timer.cancel(); this.cancel(); } } };
還有handler的代碼:
private final Handler timerHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case 0: SplashScreen.this.finish(); //start new activity here break; } super.handleMessage(msg); } };
這樣一個基本的Splash就實現了。this
另外,不知道你們發現沒有,個人代碼中有一個這個_active變量,這個是作什麼的呢?見下面的代碼:線程
@Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { _touched = false; } return true; }
在顯示Splash Screen的過程當中,若是觸摸了屏幕,會直接跳過Splash Screen的,給用戶以更高的體驗。code
沒有更深刻研究,歡迎你們討論。遊戲