浅析WPhone、Android的Back与Home键
浅析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键的更多相关文章
- 正在运行的android程序,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法
正在运行的android程序,按home键之后退回到桌面,在次点击程序图标避免再次重新启动程序解决办法 例如:一个android程序包含两个Activity,分别为MainActivity和Other ...
- Android 如何监听返回键,弹出一个退出对话框
android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用程序不小心点击退出键而直接退出.自己记录下这个简单的demo,备用. public class BackKeyTest ...
- android webview点击返回键返回上一级activity
android webview点击返回键返回上一个activity @Override public boolean onKeyDown(int keyCode, KeyEvent event) { ...
- android webview点击返回键回到上一个html
android webview点击返回键返回上一个html @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ( ...
- Android监听键盘右下角确定键
代码改变世界 Android监听键盘右下角确定键 kotlin写法 <EditText android:id="@+id/seachFriend" android:layou ...
- [转]Android 如何监听返回键,弹出一个退出对话框
本文转自:http://blog.csdn.net/sunnyfans/article/details/8094349 Android 如何监听返回键点击事件,并创建一个退出对话框, 防止自己写的应用 ...
- Android 禁用以及捕捉home键
最近要做个小项目,其中有需要禁止home键的需求,一开始以为不可以,感觉得root一下才行,后来查了一下,发现还是不少朋友都实现了这个功能,现在也引用一下,供大家参考一下: 1. 在activity中 ...
- Android下监听Home键
网上看到demo,亲测了以下机器和设备,均测试通过: 测试通过的手机: 1.华为荣耀3(Android 4.2.2) 2.小米2s(Android 4.1.1) 3.联想的手机 (Android2.3 ...
- Android WindowManager 监听返回键及home键
一.监听home键盘,Android Home键系统负责监听,捕获后系统自动处理.有时候,我们需要监听home键处理自己的逻辑,监听方法如下: /** * 监听home键广播 */ private f ...
随机推荐
- 讲讲js中的逻辑与(&&)以及逻辑或(||)
前几天看到一个函数,百思不得其解,今天早上醒来看了本js的书,正好讲到操作符的用法,给大家分享下js中的&&,||,和我们用的其他的编程语言还是有点区别的. 直接上那个函数的代码: f ...
- 损失函数(Loss Function)
转载请注明出自BYRans博客:http://www.cnblogs.com/BYRans/ 线性回归中提到最小二乘损失函数及其相关知识.对于这一部分知识不清楚的同学可以参考上一篇文章<线性回归 ...
- iOS 内存错误调试(EXC_BAD_ACCESS)
内存错误crash现场: Thread堆栈: 有可能是访问被释放对象造成,根据现场并不能找到具体哪个对象出现内存错误. 1.开启僵尸对象调试 Edit Scheme->Debug->Dia ...
- LNMP环境搭建
LNMP环境搭建 Linux + Nginx + MySQL + PHP PHP是一种脚本语言,当前中国乃至世界上使用PHP语言开发的网站非常普遍 Nginx是一个web服务软件,和apache是一类 ...
- C# 计算文件MD5
因工作需要对文件进行是否被修改判断,整理的一段生成文件MD5码的代码: 1: public class FileHelper 2: { 3: /// <summary> 4: /// 对文 ...
- 常用的JavaScript模式
模式是解决或者避免一些问题的方案. 在JavaScript中,会用到一些常用的编码模式.下面就列出了一些常用的JavaScript编码模式,有的模式是为了解决特定的问题,有的则是帮助我们避免一些Jav ...
- jquery图片时钟
一.生成数字时钟 <script src="http://code.jquery.com/jquery-latest.js"></script> <s ...
- plain framework 1 参考手册 入门指引之 代码风格
代码风格 介绍 介绍 框架自身采用了google的C++风格,作者也鼓励在你的应用中使用此风格,有关此风格你可以查阅相关资料了解.下面是一段plain framework中的代码,以便大家参考: 你可 ...
- Vim 命令整理
1. 文件命令 2. 模式切换 3. 移动命令 4. 书签命令 5. 修改命令 6. 可视化操作 7. 区域选择 8. 宏命令 9. 分屏 10. 系统设置命令 1. 文件命令 [:]开始的命令需要输 ...
- stanford coursera 机器学习编程作业 exercise 5(正则化线性回归及偏差和方差)
本文根据水库中蓄水标线(water level) 使用正则化的线性回归模型预 水流量(water flowing out of dam),然后 debug 学习算法 以及 讨论偏差和方差对 该线性回归 ...