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

现在随便下载一个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" 问题也可以解决了!

时间: 2024-10-16 06:40:51

Android Splash界面支持用户点击 直接进入主界面的相关文章

android延迟进入主界面和点击按钮进入主界面代码

我是做web开发的,最近在学习android. 周末的时候想写个延迟进入主界面的功能,主要用到Handler和Runnable,代码如下:  package com.zx.app; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widge

android 代码实现模拟用户点击、滑动等操作

/** * 模拟用户点击 * * @param view 要触发操作的view * @param x 相对于要操作view的左上角x轴偏移量 * @param y 相对于要操作view的左上角y轴偏移量 */private static void analogUserClick(View view, float x, float y) { if (view == null) { return; } LogUtil.e(TAG_POINT, "正在模拟点击操作:p->" + x +

ViewPager实现引导页(添加导航点,判断是否第一次进入主界面)

1.引导页的4个界面布局,里面加载一张背景图片 插入到guide的界面布局中(这里不用fragment) guide_background_fragment1.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width

ViewPager滑动到最后一页再向左滑动进入主界面

在OnPageChangeListener中的onPageScrolled方法里判断 @Override public void onPageScrolled(int arg0, float arg1, int arg2) { if(arg0==list.size()-1){ openActivity(MainActivity.class); finish(); } } list为List<View> .这样当最后一个你再向左滑动的时候就会进入MainActivity了.

多语言支持:系统界面以及用户产生内容

促使我们下决心真正支持多语言的驱动力是:中国的企业越做越大,我们的很多客户都在全球有业务,甚至并购了其他国家的公司,不支持多语言,就根本无法为客户提供服务,不支持多语言的门户产品功能再多也是个不能用的门户产品 多语言的支持听起来简单,但在企业里面并不简单,因为企业里多语言有两个含义:一是系统界面的多语言,二是客户产生内容的多语言 SharePoint原生支持系统界面的多语言,但有限制,另外SharePoint并不支持客户产生内容的多语言,鉴于此,光合信息的OpenShare对SharePoint

Android 手机卫士--安装过程中点击回退按钮

本文地址:http://www.cnblogs.com/wuyudong/p/5903707.html,转载请注明源地址. 在手机卫士之前的版本升级的对话框中: 有的用户暂时不想更新,没有点击“稍后再说”,而是选择点击回退按键,那么这时候的逻辑应该是让用户进入home界面而不是splash界面.所以需要添加代码逻辑来控制,添加的代码如下: builder.setOnCancelListener(new OnCancelListener() { @Override public void onCa

Android L中水波纹点击效果的实现

博主参加了2014 CSDN博客之星评选,帮我投一票吧. 点击给我投票 前言 前段时间android L(android 5.0)出来了,界面上做了一些改动,主要是添加了若干动画和一些新的控件,相信大家对view的点击效果-水波纹很有印象吧,点击一个view,然后一个水波纹就会从点击处扩散开来,本文就来分析这种效果的实现.首先,先说下L上的实现,这种波纹效果,L上提供了一种动画,叫做Reveal效果,其底层是通过拿到view的canvas然后不断刷新view来完成的,这种效果需要view的支持,

Android Camera子系统之用户View

一.拍照模式 打开原生Camera应用,将出现如下所示拍照界面 左边为预览区域,右边为控制面板. 控制面板分为三部分,从上到下依次为缩略图.快门按钮和模式选择器. 模式选择器中显示当前模式为拍照模式. 按下快门按钮将会执行拍照操作,缩略图区域显示所拍照片的缩略图. 二.录像模式 点击模式选择器区域,选择录像模式,将会进入录像界面,如下图所示 点击快门按钮将会开始录像,再次点击快门,结束录像. Android Camera子系统之用户View,码迷,mamicode.com

Android多语言支持以及各国语言Values文件夹命名规则

创建好的项目工程由于需求 需要做多国语言的支持  下面介绍怎么快捷的创建文件夹 建好一个android 的项目后,默认的res下面 有layout.values.drawable等目录 这些都是程序默认的资源文件目录,如果要实现多语言版本的话,我们就要添加要实现语言的对应的资源文件. 首先我们点击添加Android Xml File按钮,在Resource Type中选择Values 在File中输入string.xml ,会出现下面的界面: 下面 以添加一个 英语(美国):values-en-