Jobin0528
V2EX  ›  Android

关于安卓点击问题

  •  
  •   Jobin0528 · Jan 28, 2016 · 14222 views
    This topic created in 3761 days ago, the information mentioned may be changed or developed.
    用 nexus6 大半年了,发现一个很影响体验的问题,有很多 app ,可能有时候手贱就点了两遍,问题来了, ios 上点了一遍就没了只出现一个页面,而安卓却会出现两个同样页面,要点两次返回。
    不明白,求解释。
    怎么解决?
    21 replies    2016-01-29 05:58:01 +08:00
    gengrui
        1
    gengrui  
       Jan 28, 2016
    因为在安卓里面的点击代码是:
    onClicked(View v) {
    switch(v.getId()) :
    case R.id.xx:
    startActivity(new Intent(this, AnotherActivity.class));
    }

    所以你会发现一旦 onclicked 执行了两次,那么 startActivity 就会被执行两次。

    iOS 里面是不是系统 handle 了这个 case ,还真不太了解 iOS 开发。

    不过在 android 里面,一般这种情况最好在开发的时候 handle 住,比如加个 loadingIndicator 或者判断两次点击 interval 之类的。
    jinhan13789
        2
    jinhan13789  
       Jan 28, 2016
    是你手快还是手机卡? 点击启动页面是需要一定的时间的,在此期间你又点击了一下~
    你试试系统自带的软件有没有这个问题,有的话就是你手快了。没有的话就是别的 app 开发者在点击事件里做了过多的计算,或者是页面切换动画时间不合理
    twoyuan
        3
    twoyuan  
       Jan 28, 2016
    在点击之后进行 setEnable(false),响应后进行 setEnable(true)
    lomoya
        4
    lomoya  
       Jan 28, 2016
    设置 launchMode 也会弹出两个 Activity 吗?
    Totato5749
        5
    Totato5749  
       Jan 28, 2016
    @twoyuan 对于 listview 这样的 onclickitem 还真没什么好办法

    我看过 RxJava 能屏蔽连续快速点击的

    总之是个好问题,现实使用中经常发生
    twoyuan
        6
    twoyuan  
       Jan 28, 2016
    @Totato5749

    onItemClick 或者 onClick 都会回调一个事件源 View ,用这个 setEnable 即可

    以时间为界限来防止连击的方法 Rx 那个解决方案不错,不过有些时候需要逻辑执行完毕或者出错才让 view 重新可以点击的时候就不是很好用了
    BillionWang
        7
    BillionWang  
       Jan 28, 2016
    写 app 的时候没做这个限定啦。
    rockyou12
        8
    rockyou12  
       Jan 28, 2016
    我写 app 一般都懒得判断拉,反正用户手贱多点两下一般也不会让 app 崩溃,而且手速这么快的用户真的很少……
    Totato5749
        9
    Totato5749  
       Jan 28, 2016
    @rockyou12 我觉得这经常发生。。。所以这问题很有探讨价值
    aliuwr
        10
    aliuwr  
       Jan 28, 2016
    @rockyou12 你过于高估了用户的手机性能。
    Jobin0528
        11
    Jobin0528  
    OP
       Jan 28, 2016
    @rockyou12 nexus 6 , 6.0.1 xposed +xp+绿守+阻止。真的不卡,我手也真的不快,不知道为什么有些 app 就会出现两遍,这的确不会导致崩溃,但这很影响用户体验!
    Jobin0528
        12
    Jobin0528  
    OP
       Jan 28, 2016
    不懂 ios 安卓编程,小白用户。
    只是想问下有没有什么插件或者 app 可以解决这个问题?
    Totato5749
        13
    Totato5749  
       Jan 28, 2016
    我认为原因是点击之后 startActivity 之前有太多工作,或者新的页面渲染时间太长,所以性能越差的机子复现这问题越容易
    rockyou12
        14
    rockyou12  
       Jan 28, 2016
    @Totato5749 应该只是手机性能或者代码写太长了,我写的时候一般 startIntent 前最多就 3,4 行,除了用 monkey 测试的时候基本没发现这种问题

    @Jobin0528 其实就是个消抖的问题,大学学硬件的时候就经常接触,这个东西软件硬件都要考虑。既然你的手机硬件已经这样了,除非是改驱动层面的东西不然很难解决
    bigdogbigpig
        15
    bigdogbigpig  
    PRO
       Jan 28, 2016
    @gengrui ios 同样有这样的问题, 4S 里的微信就经常会被我点出两个对话页面,要返回两次
    greenskinmonster
        16
    greenskinmonster  
       Jan 28, 2016
    一般需要开发者解决
    http://stackoverflow.com/a/20672997
    crystom
        17
    crystom  
       Jan 28, 2016
    @mazyi 同 4s ,我的网易云音乐之前也会卡成这样,但是一次更新之后似乎解决了
    Totato5749
        18
    Totato5749  
       Jan 28, 2016
    @greenskinmonster

    非常好的解决办法 不过有个问题 mLastClickTime=currentClickTime; 应该放在这个 if(elapsedTime<=MIN_CLICK_INTERVAL) return; 之后

    OnClickListener OnItemClickListener 都可用 很好!
    greenskinmonster
        19
    greenskinmonster  
       Jan 28, 2016
    @Totato5749 好像不应该改吧?
    假设用户 0ms 时点击一次,界面卡了, 500ms 又点击一次, 700ms 又点击一次。
    如果改了的话, 700ms 那次又触发了。
    nashxk
        20
    nashxk  
       Jan 28, 2016
    开发的时候加几句代码就好了。不过有时候嫌麻烦就不加了。
    gengrui
        21
    gengrui  
       Jan 29, 2016
    @mazyi 原来是这样,谢谢
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2989 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 14:42 · PVG 22:42 · LAX 07:42 · JFK 10:42
    ♥ Do have faith in what you're doing.