您的位置:首页 > 移动开发 > Android开发

Android Splash界面支持用户点击 直接进入主界面

2014-12-11 13:37 405 查看
现在随便下载一个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" 问题也可以解决了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐