android calculator里面
当我输入2+2然后会输出结果4,然后按清除clear,则结果被清除,but当我按back键,回到所有ap的shortcut界面,然后点calculator重新进入calculator,结果4又被显示到界面上面,这是什么原因造成的呢?一般AP中的back键是怎么被监听到的?[问题点数:20分] 
zhq56030207
 
(Hello_Miss) 等 级: 
结帖率:96.71% 
 楼主发表于:2011-04-15 13:45:44如题?程序片段是怎样の? 
 

解决方案 »

  1.   

    个人认为是calculator程序保存了上次计算的状态,再次进入时恢复上次的状态。
    onPause()在这个里面保存当前的数据值。可以放到数据库中,也可以通过文件保存。
      

  2.   

    可是我首先是clear掉 然后才back的啊
      

  3.   

    再次求助~~~~~~~(>_<)~~~~ 
      

  4.   

    我刚刚测试了下,如果不按clear,back后再进入会显示4;如果先按clear,然后back不会显示上次结果,你再试试呀
      

  5.   

    或许是的 可是我不知道怎么修改~~~
    //
    @Override
        public void onPause() {
            super.onPause();
            mLogic.updateHistory();
            mPersist.setDeleteMode(mLogic.getDeleteMode());
            mPersist.save();
        }
    //
      

  6.   

    可是我在返回之前是先clear的
      

  7.   


    程序在“=”按钮的响应命令里实现了保存当前结果的动作,在clear之前已经保存好了,下次进入时,读取数据显示
      

  8.   

    可是为什么在android2.2以及android1.6上面没这个问题呢 应该这么修改呢?急~~~
      

  9.   

    按back只是把当前activity压栈,activity进入pause状态,并没有destroy.当下次进入的时候,系统会将上次的activity弹出,显示上次保存的结果。可以用log跟进查看。
    不过当系统内存不够的时候,压入栈的activity可能被系统kill掉已释放内存。
      

  10.   

    嗯,可是我在按back之前把结果给clear了,虽然那个history里面会有 但是 panel上面应该不显示才对~~
      

  11.   

    刚看了下程序,计算器在每次计算的时候把用户输入的信息保存至data/data/com.android.calculator2/files/calculator.data
    里面,下次重新开启的时候读取最近一次的计算结果。adb pull data/data/com.android.calculator2/files/calculator.data .
    cat calculator.data
      

  12.   

    我就是不太明白,按home键和back键到底是有啥区别?
    请问你是看的3.0的code?
      

  13.   

    刚在honeycomb上试了下,很正常啊
      

  14.   

    凑个热闹,估计这不是bug,只是开发者设置一个特性
      

  15.   

    我知道这首歌~~~
    我是说 你在honeycomb的板子上测得 还是emulator上?
      

  16.   

    有这么多高手啊,说说android版本的QQ的登陆是用什么实现的啊?谁看过啊 ?
    是线程吗?如果是线程,他的那个取消登陆是这么实现的?
      

  17.   

    咦 刚刚回复的不见了 我的意思是 你能看到calculator honeycomb的源码 吗
      

  18.   


    我的模拟器是honeycomb的,我看到的源码是我们公司优化过的,但我想这种应用层的小程序应该没改过。
      

  19.   

    可是如果你的是google的源码的话 就会出现我上面描述的问题~
    或者你没看懂具体的操作步骤~~~~~不过该issue确实是存在の
      

  20.   

    那我想问一下 你的logic.java下的 clear with history函数是怎么写的呢
      

  21.   

    按back只是把当前activity压栈,activity进入pause状态,并没有destroy.当下次进入的时候,系统会将上次的activity弹出,显示上次保存的结果。可以用log跟进查看。
    不过当系统内存不够的时候,压入栈的activity可能被系统kill掉已释放内存,还有就是可以去一些专门的android技术论坛去找找,www.connectionwe.com,推荐一个
      

  22.   

    我觉得要先确定一下是clear()结果没有入栈,还是入栈了又被释放掉了。
    adb pull data/data/com.android.calculator2/files/calculator.data .比较下back和clear + back
      

  23.   

        private void clearWithHistory(boolean scroll) {
            String text = mHistory.getText();
            if (MARKER_EVALUATE_ON_RESUME.equals(text)) {
                if (!mHistory.moveToPrevious()) {
                    text = "";
                }
                text = mHistory.getText();
                evaluateAndShowResult(text, CalculatorDisplay.Scroll.NONE);
            } else {
                mResult = "";
                mDisplay.setText(
                        text, scroll ? CalculatorDisplay.Scroll.UP : CalculatorDisplay.Scroll.NONE);
                mIsError = false;
            }
        }这些应该都一样,我觉得这个应该没有改动。现在3.0已经开放源码了吗?
    我的honeycomb模拟器就是原版的啊
      

  24.   

    我觉得你没有理解我操作的步骤第一:输入2+3 按= 则会出现 5 
    第二:按clear ,5消失了 然后按back键一次,然后再进入calculator,5又存在了(这是一个错误)然后你再clear 按back 回来 5还是存在(这样循环下去 感觉5永远都不会被clear)第三:不按clear,按back  5应该不消失(这是正确的)
    你可以再操作一次,就可以发现了~~~
      

  25.   

    是啊,我又试了一遍,没有问题啊
    大家的honeycomb模拟器都有这个问题吗?
      

  26.   

    至少我的是这样的~~~
    既然你的clearWithHistory函数没改过,怎么能没有这个问题呢????
      

  27.   

    我知道了 是不是模拟器和平板的back键不同~~~导致的 
    我实在tablet上面验证の
      

  28.   


    我觉得不是...我觉得你的源码还是有问题的 不知道为什么honeycomb的模拟器上是正常的?
    但是确切的说 这个源码在真正的板子上面是有问题の  而且如果连续的同时按好多个键,也会出现一些虚拟的字符~~~
      

  29.   

    你的板子是zoom吗?
    我们还在做老版本的一些东西
      

  30.   

    ..反正感觉honeycomb的效果很好~~~
      

  31.   

    赶紧让你们那边的QA上bug~~~~
    而且如果连续的同时按好多个键,也会出现一些虚拟的字符~~~
    这个有出现吗?
    前一个bug我已经解掉了 
    后面的bug尚未找到原因~~~