app進入的時候我們會看到一個閃屏頁,這個閃屏頁做起來很簡單,但是閃屏頁一般需要屏蔽返回鍵,去監聽一下Home鍵,爲什麼需要這樣考慮呢?我們先看代碼吧。
SplashActivity
public class SplashActivity extends Activity {
private Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
//充滿屏幕
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_splash);
//註冊廣播
registerReceiver(mHomeKeyEventReceiver, new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
new Thread(new Runnable() {
@Override
public void run() {
handler.sendEmptyMessageDelayed(0x1, 2000);
}
}).start();
handler=new Handler(){
public void handleMessage(android.os.Message msg) {
if(msg.what==0x1){
startActivity(new Intent(SplashActivity.this, MainActivity.class));
SplashActivity.this.finish();
}
};
};
}
看代碼知道,我們new Thread()的時候會創建一個子線程,如果我們按下很快的返回鍵或者按下home鍵(沒有超過2秒),這時候程序退出了,但是這個線程沒有結束,還在執行。那麼這時候會跳到MainActiivty,如果用戶看到了此情況,會不會很納悶呢?怎麼解決這個問題?一般做閃屏頁的話,我們需要屏蔽返回鍵,監聽一下Home鍵;
//屏蔽返回鍵
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode==KeyEvent.KEYCODE_BACK)
{
return true;
}
return false;
}
KeyEvent.KEYCODE_HOME這個方法壓根不管用,監聽不到Home鍵。我們 監聽Home鍵的時候,需要註冊一個廣播監聽是否按下Home鍵;
監聽Home鍵:
private final BroadcastReceiver mHomeKeyEventReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
//Intent.ACTION_CLOSE_SYSTEM_DIALOGS判斷是否爲home鍵
if (action.equals(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)){
//退出程序,釋放資源
System.exit(0);
}
}
};
//當程序銷燬的時候,註銷這個廣播
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(mHomeKeyEventReceiver);
}
如果大家覺得哪裏不對的話,可以反映一下,大家一起學習;
轉載請註明出處!