Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android Splash界面支持用戶點擊 直接進入主界面

Android Splash界面支持用戶點擊 直接進入主界面

編輯:關於Android編程

現在隨便下載一個app,打開都有一個Splash界面,為什麼一進去就有一個splash界面呢?其實用戶打開你的產品,希望用最少的信息給用戶最多的信息量,讓用戶知道這是一款什麼產品,這是說產品方面的,還有一個是功能方面的,比如數據庫的拷貝,版本更新,還有一個重要的就是展示該公司的logo等等,現在的移動互聯網相當於pC端對產品的體驗更講究,我們現在發現一個很好的產品它未必能馬上能給這公司盈利,但是用戶量大時,表示用戶對你的產品認可,那麼公司融資就比較簡單了,廢話不多說


如果splash什麼都不做,一般都是過幾秒進入主界面,代碼如下:

public class SplashActivity extends Activity {
	private Handler handler = new Handler();
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_splash);
		
		handler.postDelayed(new Runnable() {
			@Override
			public void run() {
				 loadUI();
			}
		}, 5000);
	}
	protected void loadUI() {
			Intent intent = new Intent(this,MainActivity.class);
			startActivity(intent);
			finish();
	}
}

如果這個時候你把這個交給測試人員,那你就悲劇了,除非那測試是眼瞎不然你這個bug肯定是要被發現的,我們注意下會發現MainActivity會創建2個,界面會閃動一下,這個bug怎麼解決呢?我們解決bug一定要從代碼上去看,非常你對業務很熟悉,知道那段代碼干什麼事,出現這個bug是因為loadUI()方法執行了二次,而我們肯定是想讓他只執行一次,那麼這就涉及到判斷了,但要看看這個這個方法是封裝在一個類中還是這個方法就是單獨的,如果是單獨的一般是用一個boolean指去做判斷,而這個方法是封裝在一個類中,一般根據這個類的對象是否為null進行判斷,如果為null,就執行不為null,就不執行,這只是個簡單的邏輯,

那麼在我們的這個怎麼判斷呢?我們看loadUI()方法其實在Runnable接口中執行,也就是這個方法封裝在Runnable接口中,使用的是匿名內部類,現在我們不使用匿名對象,直接創建對象,然後再判斷這個對象,解決方案代碼如下:


public class SplashActivity extends Activity {
	private Handler handler = new Handler();
	private Runnable runnbale ;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_splash);
		runnbale = new Runnable() {
			@Override
			public void run() {
				loadUI();
			}
		};
		handler.postDelayed(runnbale, 5000);
	}
	protected void loadUI() {
			Intent intent = new Intent(this,MainActivity.class);
			startActivity(intent);
			finish();
	}
	
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		if(event.getAction()==MotionEvent.ACTION_UP) {
			Intent intent = new Intent(this,MainActivity.class);
			startActivity(intent);
			finish();
			//如果之前創建了Runnable對象,那麼就把這任務移除
			if(runnbale!=null){
				handler.removeCallbacks(runnbale);
			}
		}
		return super.onTouchEvent(event);
	}
}

在有些時候我們在一個界面中使用Handler執行一個Runnable任務,當界面跳轉時候,記得要把這個Runnable要從Handler移除,不然會帶來意想不到的結果,而且找bug還不好找。


還有一種方案就要設計到Activity的啟動模式了,我們是連續啟動2個一樣的activity,而activity有一種啟動模式為singleTop,就是當啟動的activity在棧頂時就不會再啟動這個activity,我們設置下試試,

ok,設計這個android:launchMode = "singleTop" 問題也可以解決了!



  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved