浅析WPhone、Android的Back与Home键

背景

  本人一直在用诺基亚手机(目前是Nokia 925,Windows Phonre 8.1),在界面设计、应用多样性等方面没少受身边Android机主的鄙视。

  的确,不过分地说,一款Android平台上发布的应用,WPhone平台上接下来可能会出现,也可能不会,当然也不排除相反的情况(用过的朋友就会知道这种情况比较少一点点^-^)。

  就拿支付宝来吧,WPhone安装的支付宝钱包去年才可以查余额宝信息,到现在也不能够抢红包,微信不支持钱包功能(不支持红包、支付宝绑定),就会造成很多不便,如用滴滴打车时无法直接付钱。我就有几次,用软件打车,用现金付钱,司机都摸不清头脑。

  今天主要是对WPhone、Android手机Back与Home键的相似与区别之处进行分析。

Back

  在导航页面的制作方面,WPhone比Android在开发过程中体现地更加人性化,微软的API中有一个Go Back方法,能够使你回到之前的界面,即Back堆栈中的最新条目。如果Back堆栈中没有任何条目,则此方法将引发异常,所以在调用此方法前,始终都要检查 Can Go Forward。而Android中Activity本身也有一个栈对象对相应的Activity进行管理。

  但Android程序员必须在onKey事件中对相应的事件进行监听,判断按下的键是不是Back键来决定是否执行回退操作。

  Android中运行的程序无需刻意地去退出,当按下手机的Back键的时候,系统会默认调用程序栈中最上层Activity的Destroy()方法来销毁当前Activity。当此Activity又被其它Activity启动起来的时候,会重新调用OnCreate()方法进行创建,当栈中所有Activity都弹出结束后,应用也就随之结束了。如果说程序中存在Service之类的,则可以在恰当的位置监听处理下也就可以了。

  相信看这篇文章的人中现在还在用诺基亚的很少了吧,所以接下来通过我的诺基亚手机的各种操作截图来说明两者之间的区别。

  首先来看百度和微信首次点击Back键的效果图:

                                

  WPhone并不会像Android那样:只是将目标Activity从堆栈中销毁,但是当你按最右边的菜单键键(Home键右边,手机下方总共三个键)时,还是可以看到这个Activity的。如果你点击它,又会重新回到Activity的最前面成为当前的活动。

  来看看Android手机上对应用点击了Back或Home键后再点击菜单键的效果图:

  这里需要注意,这个过程中Activity是重新生成的,关键体现在其启动类的在onCreate()方法中的SavedInstanceState的值此时是null(而Home键情况不同,在后面会进行讲解)。

  而从图中可以发现,WPhone采取的策略是要么取消回退,要么直接退出应用程序。

  其实,这也体现在了手机最下方的按键设计上,WPhone三个键分别为Back,Home及Search,并没有菜单键。没错,是搜索按键,当我安装了Beta(语音辅助软件)后,点击Search按键就会弹出Beta的服务界面。

Home

  至于Home键,WPhone和Android倒是没有多大的区别,功能上几乎一致:点击后直接回到主界面,将当前应用压入Activity堆栈中,此时的WPhone也不会强制将应用关闭了。

  Android点击菜单键出现的效果,WPhone中自然也会有,不然怎么关闭点击Home键后依然存在的Activity呢。在WPhone中,若想要看到到底有哪些应用界面依然存在,方法是长按Back键。效果图如下:

  此时,若想将某个应用重新打开,那么只要在其界面区域单击即可;若想关闭,就点击对应界面右上角的圆形叉叉。

代码

  上面提到过,Android在点击Back和Home键之后,让应用重新回到活动状态的过程是不一样的。

  这里给出在onCreate()方法中进行判断的代码:

 @Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  if (savedInstanceState == null) {
    Toast.makeText(this, "savedInstanceState is null", Toast.LENGTH_SHORT).show();
  }
  else {
    Toast.makeText(this, "savedInstanceState is not null", Toast.LENGTH_SHORT).show();
  }
11 }

  若之前是点击Back,那么在界面上会显示"savedInstanceState is null",否则会显示"savedInstanceState is not null"。

总结

  最后再来说说WPhone和Android的图标布局方式吧。先上图:

  可以看到,WPhone是采用上下的竖排方式,不像Android是左右的翻页样式。也就是说,添加得越多,这一页就会越长,在寻找应用图标时就只能上下滚动。

  这里有必要再说一下,在应用图标的排布方面Android和IOS是相似的,采用页面左右滑动的设计;而在重新唤醒或彻底关闭Acticity堆栈中的应用时,WPhone和IOS是相似的,将应用界面左右排布,不过两者的区别在于:

  1、WPhone是长安Back键跳出所有应用界面,IOS是连续、快速地点击两次Home键;

  2、WPhone是点击关闭按钮或者向下滑动应用界面,IOS是将应用界面向上滑动;

  但是,也有其有意思的方面,注意上图中的图标大小。WPhone是允许用户自定义图标大小的,而且可以将图标在页面上任意拖动以完成自己想要的布局。

  每每想到诺基亚(确切地说是微软诺基亚)的未来,都会在思考,要是当时它能坚定地转向Android平台,现在世界上的手机格局又会是怎样一副情景!

浅析WPhone、Android的Back与Home键的更多相关文章

  1. 正在运行的android程序,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法

    正在运行的android程序,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法 例如:一个android程序包含两个Activity,分别为MainActivity和Other ...

  2. Android 如何监听返回键,弹出一个退出对话框

    android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用程序不小心点击退出键而直接退出.自己记录下这个简单的demo,备用. public class BackKeyTest ...

  3. android webview点击返回键返回上一级activity

    android webview点击返回键返回上一个activity @Override public boolean onKeyDown(int keyCode, KeyEvent event) { ...

  4. android webview点击返回键回到上一个html

    android webview点击返回键返回上一个html @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ( ...

  5. Android监听键盘右下角确定键

    代码改变世界 Android监听键盘右下角确定键 kotlin写法 <EditText android:id="@+id/seachFriend" android:layou ...

  6. [转]Android 如何监听返回键,弹出一个退出对话框

    本文转自:http://blog.csdn.net/sunnyfans/article/details/8094349 Android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用 ...

  7. Android 禁用以及捕捉home键

    最近要做个小项目,其中有需要禁止home键的需求,一开始以为不可以,感觉得root一下才行,后来查了一下,发现还是不少朋友都实现了这个功能,现在也引用一下,供大家参考一下: 1. 在activity中 ...

  8. Android下监听Home键

    网上看到demo,亲测了以下机器和设备,均测试通过: 测试通过的手机: 1.华为荣耀3(Android 4.2.2) 2.小米2s(Android 4.1.1) 3.联想的手机 (Android2.3 ...

  9. Android WindowManager 监听返回键及home键

    一.监听home键盘,Android Home键系统负责监听,捕获后系统自动处理.有时候,我们需要监听home键处理自己的逻辑,监听方法如下: /** * 监听home键广播 */ private f ...

随机推荐

  1. 按要求编写一个Java应用程序: (1)编写一个矩形类Rect,包含: 两个属性:矩形的宽width;矩形的高height。 两个构造方法: 1.一个带有两个参数的构造方法,用于将width和height属性初化; 2.一个不带参数的构造方法,将矩形初始化为宽和高都为10。 两个方法: 求矩形面积的方法area() 求矩形周长的方法perimeter() (2)通过继承Rect类编写一个具有确定位

    package com.hanqi.test; public class Rect { ; ; public double getWidth() { return width; } public vo ...

  2. Java api 入门教程 之 JAVA的StringBuffer类

    StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存 ...

  3. 如何在开机时让Tomcat以进程的方式启动

    一. 安装tomcat服务 1. 打开cmd命令窗口,进入到"tomcat安装路径/bin"目录下,运行"service.bat install"命令,安装to ...

  4. 烂泥:【解决】VMware Workstation中安装ESXI5.0双网卡问题

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 由于需要做ESXI相关的实验,所以就在自己的机器上利用VM虚拟ESXI进行实验.因为此次实验是需要两块网卡的,所以就在创建ESXI虚拟机时添加了两块网卡 ...

  5. Linux和开源已经在2013年开始悄悄主宰世界?

    提到Linux,很多人觉得它依旧不温不火,实际上在这个即将过去的一年,Linux和开源软件已经悄悄主宰了计算领域的各方面,这具体表现在开源项目遍地、Chromebook崛起、SteamOS备受瞩目、A ...

  6. 工欲善其事必先利其器——dreamweaver

    1.内置了一个webkit内核,所以实时视图与chrome浏览器效果一样. 2.DW中主浏览器的快捷键是f12,所以可以f12快速打开浏览器. 3.DW中首选项无法恢复到默认值. 4.有用首选项 5. ...

  7. django用户登录和注销

    django版本:1.4.21. 一.准备工作 1.新建项目和app [root@yl-web-test srv]# django-admin.py startproject lxysite [roo ...

  8. 32-bit ALU [Verilog]

    Based on MIPS Instruction Structure Main Module module Alu( input [31:0] a, // operand 1 input [31:0 ...

  9. Spring学习之第一个Spring MVC程序(IDEA开发环境)

    回顾Java平台上Web开发历程来看,从Servlet出现开始,到JSP繁盛一时,然后是Servlet+JSP时代,最后演化为现在Web开发框架盛行的时代.一般接触到一个新的Web框架,都会想问这个框 ...

  10. DPM(voc-release5) Matlab模型文件 Mat转XML

    (转载请注明作者和出处 楼燚(yì)航的blog :http://www.cnblogs.com/louyihang loves baiyan/ 未经允许请勿用于商业用途) 由于目前DPM模型训练的代 ...