public void onBackPressed() {
finish();
}

如果要做一个页面导航的功能的话,就我而言,认为,windows phone开发比android更加人性化,更加傻瓜化能够后退键保存相应的数据啊。

不是吗,windows phone 导航更加傻瓜,因为微软的api中直接有一个goback的方法,能够使你回到相应的后退界面,因为他航到 Back 堆栈中的最新条目。 如果 Back 堆栈中没有任何条目,则此方法将引发异常;在调用此方法前,始终都要检查 CanGoForward。 这是由于一个页面毡对相应的page进行了管理,自愿遵守先进后出的原理也很好管理。而android中activity本身也有一个栈对象对相应的activity进行了管理,自愿后退时候,也能够进行了后退。想法是很好的,但现实是残酷的。你看我们android程序员必须在onkey事件中对相应的事件进行监听,判断他按下是不是back键来回退按钮。 这里事件是activity必须要实现传递,来截获这个后退按下的事件。我这里重点要提出一个问题,onKeyDown事件究竟是一层层实现back事件的.android 就是比.net好啊!开源,看源代码。

需调用activity中的onKeyDown事件,他的源代码如何: 这是我们定义到了activity中的onKeyDown事件,他的源代码是这样子的:

if (keyCode == KeyEvent.KEYCODE_BACK) {
if (getApplicationInfo().targetSdkVersion
>= Build.VERSION_CODES.ECLAIR) {
event.startTracking();
} else {
onBackPressed();
}
return true;
}

判断其目标版本是不是比本版本大的的话,就调用event.startTracking()方法,对event.startTracking()方法跟踪,发现他总是相隔了一段时间进行调用。

否则的话,就调用onbackPressed方法。这个方法又是个怎么鸟样。源代码如下:

    public void onBackPressed() {
finish();
}

他就调用 finish结束了当前的activity了,他的源代码又是这个鸟样:

    public void finish() {
if (mParent == null) {
int resultCode;
Intent resultData;
synchronized (this) {
resultCode = mResultCode;
resultData = mResultData;
}
if (Config.LOGV) Log.v(TAG, "Finishing self: token=" + mToken);
try {
if (ActivityManagerNative.getDefault()
.finishActivity(mToken, resultCode, resultData)) {
mFinished = true;
}
} catch (RemoteException e) {
// Empty
}
} else {
mParent.finishFromChild(this);
}
}

判断其父activity是不是有值的,有的话,就把当前数据保存起来,如果当前activity结束了,就通知dalvik虚拟机已经结束了当前activity,否则的父一级的activity来结束当前activity。

这就是back事件的实现,他的实现的流程图是这样的:

这就是我对back事件一点点了解。

好好学习天天向上。

最新文章

  1. ArrowLayer : A coustom layer animation
  2. strstr函数
  3. Restive.js – 轻松让网站变成响应式和自适应
  4. FZU 2184 逆序数还原
  5. 从Google开源RE2库学习到的C++测试方案
  6. C#字符串处理(String与StringBuilder)
  7. Objective-C 高性能的循环
  8. CLR via C#深解笔记六 - 泛型
  9. ps前端切图常用快捷键
  10. 简述oracle视图
  11. HDU 5437 Alisha’s Party (优先队列)——2015 ACM/ICPC Asia Regional Changchun Online
  12. Xcode 的正确打开方式——Debugging
  13. ZJOI 最小割 CQOI 不同的最小割 (最小割分治)
  14. extjs_11_mvc模式
  15. SERVERCONFIG
  16. 0 can't find referenced pointcut declarePointExpress
  17. bzoj 3675: [Apio2014]序列分割
  18. 为何没有asia/beijing时区?
  19. 2018-软工机试-B- 梵高先生
  20. [UE4]更新UI的三种方式

热门文章

  1. insert ignore duplicate key
  2. Eclipse导入SVN项目的三种方式
  3. [BZOJ2815][ZJOI2012]灾难(拓扑排序/支配树)
  4. BZOJ.2286.[SDOI2011]消耗战(虚树 树形DP)
  5. PHP 5.5以上 使用 CURL 上传文件
  6. 【HDU】2866:Special Prime【数论】
  7. the elements of computing systems 的读书笔记2
  8. Three.js 类的粗略总结和实现
  9. IEEE Bigger系列题解
  10. Mysql show indexes 查看索引状态