zoukankan      html  css  js  c++  java
  • 比较windows phone 的回退事件与android的回退事件

        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事件一点点了解。

    好好学习天天向上。

  • 相关阅读:
    使用log4cplus时遇到的链接错误:无法解析的外部符号 "public: static class log4cplus::Logger __cdecl log4cplus::Logger::getInstance(class std::basic_string<wchar_t,struct std::char_traits<wchar_t>,
    linux中free命令内存分析
    ImportError: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory
    error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2
    创建预编译头 Debug 正常 Release Link Error:预编译头已存在,使用第一个 PCH
    C++定义字符数组
    客户端数据持久化解决方案: localStorage
    转:JavaScript函数式编程(三)
    转: JavaScript函数式编程(二)
    转:JavaScript函数式编程(一)
  • 原文地址:https://www.cnblogs.com/manuosex/p/3226710.html
Copyright © 2011-2022 走看看