一、Splash使用背景

现在大部分APP都有Splash界面,下面列一下Splash页面的几个作用:
1、展示logo,提高公司形象
2、初始化数据 (拷贝数据到SD)
3、提高用户体验
4、连接服务器是否有新的版本等。

二、样例

1、使用Splash的一般方式

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

2、假如现在想实现点击Splash界面的图片,跳转到指定界面
再添加如下代码:

 @Override  public boolean onTouchEvent(MotionEvent event)  {  if(event.getAction()==MotionEvent.ACTION_UP)  {  Intent intent = new Intent(SplashActivity.this, MainActivity.class);  startActivity(intent);  finish();  }  return super.onTouchEvent(event);  }

3、存在重复跳转到MainActivity界面的问题

二、改进

1、使用Runnable对象

public class SplashActivity extends Activity
{  private Handler handler = new Handler();  private Runnable runnable;  @Override  protected void onCreate(Bundle savedInstanceState)  {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  handler.postDelayed(runnable = new Runnable()  {  @Override  public void run()  {  Intent intent = new Intent(SplashActivity.this, MainActivity.class);  startActivity(intent);  finish();  }  }, 3000);  }  @Override  public boolean onTouchEvent(MotionEvent event)  {  if(event.getAction()==MotionEvent.ACTION_UP)  {  Intent intent = new Intent(SplashActivity.this, MainActivity.class);  startActivity(intent);  finish();  if (runnable != null)  handler.removeCallbacks(runnable);  }  return super.onTouchEvent(event);  }  }

2、使用message消息,因为removeMessages()方法必须要传入一个int值,所以任意取值为-1

public class SplashActivity extends Activity
{  private Handler handler = new Handler()  {  public void handleMessage(android.os.Message msg)  {  Intent intent = new Intent(SplashActivity.this, MainActivity.class);  startActivity(intent);  finish();  handler.removeMessages(-1);  };  };  private Runnable runnable;  @Override  protected void onCreate(Bundle savedInstanceState)  {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  handler.sendMessageDelayed(handler.obtainMessage(-1), 3000);  }  @Override  public boolean onTouchEvent(MotionEvent event)  {  if (event.getAction() == MotionEvent.ACTION_UP)  {  handler.sendMessage(handler.obtainMessage(-1));  finish();  }  return super.onTouchEvent(event);  }  }

三、此外,不建议使用这种方式,存在问题

private Handler handler = new Handler()  {  public void handleMessage(android.os.Message msg)  {  Intent intent = new Intent(SplashActivity.this, MainActivity.class);  intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);  startActivity(intent);  finish();  };  };

其余代码和上面的代码一样,就去掉了移除消息的部分,添加了一个Intent的flag。当仅有这两个Activity时是没有问题的,感觉也可以。但是要明白FLAG_ACTIVITY_SINGLE_TOP的含义是,当此Activity存在且位于栈顶时复用,也就是说,3秒内用户进入别的Activity了,依然会发生重新进入的现象。

Android的Splash界面支持用户点击相关推荐

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

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/23613403 现在大部分APP都有Splash界面,下面列一下Splash页面的 ...

  2. android的webView的教程,Android WebView 应用界面开发教程

    WebView组件本身就是一个浏览器实现,Android5.0增强的WebView基于Chromium M37,直接支持WebRTC.WebAudio.WebGL.开发者可以直接在WebView中使用 ...

  3. 微信小程序:用户点击跳转付款码界面

    最近工作中遇到一个需求是用户点击活动领取的微信代金券后跳转到微信付款码界面,于是乎,一顿翻文档,说实话,微信小程序的文档翻起来真的-一言难尽. 很快找到了一个wx.requestPayment(Obj ...

  4. C# checklistbox用户点击列表框上的一个项目,将选中的项的值显示到界面上,取消勾选时,同步在界面上取消

    简易场景:用户点击列表框上的一个项目,将选中的项的值显示到界面上,取消勾选时,同步在界面上取消. 注意,要在ItemCheck事件里面写(如果在mouseClick事件里写,会有很多坑爹的问题),该事 ...

  5. android 添加splash,$Android启动界面(Splash)的两种实现方法

    (一)用2个Activity实现 用Handler对象的postDelayed方法来实现延迟跳转的目的. 补充:Handler的常用方法: // 立即执行Runnable对象 public final ...

  6. Android开发——后台获取用户点击位置坐标(可获取用户支付宝密码)

    1. getevent命令 我们首先是根据adb shell getevent命令获取到被点击位置的信息. 这里要说明的是,不同的手机手机获得的点击输出是不一样的.以我的真机为例,输出如下 本文原创, ...

  7. android 滑动过程 触发,android 代码实现模拟用户点击、滑动等操作

    /** * 模拟用户点击 * * @param view 要触发操作的view * @param x 相对于要操作view的左上角x轴偏移量 * @param y 相对于要操作view的左上角y轴偏移 ...

  8. java手机杀毒_Android项目实战_手机安全卫士splash界面

    - 根据代码的类型组织包结构 1. 界面 com.hb.mobilesafe.activities 2. 服务 com.hb.mobilesafe.services 3. 业务逻辑 com.hb.mo ...

  9. android自定义打电话界面,两种Android打电话实现方法

    在android开发中,用户能够拨打电话是最基本的需求.俗话说"条条大路通罗马",实现拨打电话的方式有多种,今天,就提供最常用两种. 首先,拨打电话,对于用户来说,是一个耗费的操作 ...

  10. Android三大按钮,模拟Android导航栏三大金刚按键点击

    模拟Android导航栏三大金刚按键点击 这里需要使用的是AccessibilityService无障碍辅助服务,可以全局监听界面所有的变化: 1.构建无障碍服务 public class Float ...

最新文章

  1. Scala error: type mismatch; found : java.util.List[?0] required: java.util.List[B]
  2. 艰难就业季,2020 AI算法岗春招汇总 面经大全来了!!!
  3. linux获取ad用户列表,Powershell小技巧之查询AD用户
  4. arcgis xml 下载 切片_GIS开发:Arcgis的切片格式
  5. Taro+react开发(3)--tora官网
  6. LeetCode 第 31 场双周赛(273/2767,前9.87%,第3次全部通过)
  7. P2024 [NOI2001]食物链[扩展域并查集]
  8. 1-4 多文档界面处理(2)
  9. 速达 从xp系统换成win7
  10. win10 linux双系统卸载,win10双系统卸载ubuntu的方法
  11. 六、数据库管理与维护
  12. WIN7下恼人的AppData——删除无用的缓存文件
  13. html div 同行居中,CSS:多个DIV在同一行居中显示的一种实现方法
  14. uniapp微信登录
  15. 三方平台管理公众号----创建第三方平台
  16. 佐切的第一天学习分享
  17. [软考]项目管理之十二大项目管理输入输出、工具技术、作用及内容总结
  18. 苹果计算机的桌面图是什么情况,苹果电脑开机后,只能显示电脑桌面,桌面图标都不能显示。怎么办?...
  19. JRebel-JVMTI [FATAL] Please make sure that ‘C:\Users\\AppData\Roaming\JetBrains\IntelliJIdea2020.
  20. 【思路整理】凑数问题

热门文章

  1. keepalived+LVS 详解(3) -- VRRP协议简介
  2. mmap 系统调用 的使用
  3. ffmpeg文档1:制作屏幕录像
  4. sysdig_Linux 监控和调试利器 Sysdig 入门教程
  5. python3.4教程_Python基础教程3.4 字符串方法
  6. 最长递增子序列(LIS longest-increment-subsequence)最长连续递增子序列 最大连续子序列和
  7. 通过释放cache内存解决ubuntu死机问题
  8. java.util.current_Java基础知识-java.util.concurrent包下常见类的使用
  9. python装b代码_教你装逼了:怎么样发布你的 Python 代码给别人 “pip install”
  10. 在netbeans中使用tomcat服务器的web应用,在NetBeans中创建Apache—Tomcat-web服务器