1
gengrui 2016-01-28 06:09:35 +08:00
因为在安卓里面的点击代码是:
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 之类的。 |
2
jinhan13789 2016-01-28 09:41:14 +08:00
是你手快还是手机卡? 点击启动页面是需要一定的时间的,在此期间你又点击了一下~
你试试系统自带的软件有没有这个问题,有的话就是你手快了。没有的话就是别的 app 开发者在点击事件里做了过多的计算,或者是页面切换动画时间不合理 |
3
twoyuan 2016-01-28 09:46:04 +08:00
在点击之后进行 setEnable(false),响应后进行 setEnable(true)
|
4
lomoya 2016-01-28 10:16:49 +08:00
设置 launchMode 也会弹出两个 Activity 吗?
|
5
Totato5749 2016-01-28 10:37:41 +08:00
|
6
twoyuan 2016-01-28 10:44:47 +08:00
@Totato5749
onItemClick 或者 onClick 都会回调一个事件源 View ,用这个 setEnable 即可 以时间为界限来防止连击的方法 Rx 那个解决方案不错,不过有些时候需要逻辑执行完毕或者出错才让 view 重新可以点击的时候就不是很好用了 |
7
BillionWang 2016-01-28 10:58:08 +08:00
写 app 的时候没做这个限定啦。
|
8
rockyou12 2016-01-28 11:09:40 +08:00
我写 app 一般都懒得判断拉,反正用户手贱多点两下一般也不会让 app 崩溃,而且手速这么快的用户真的很少……
|
9
Totato5749 2016-01-28 11:12:40 +08:00
@rockyou12 我觉得这经常发生。。。所以这问题很有探讨价值
|
11
Jobin0528 OP @rockyou12 nexus 6 , 6.0.1 xposed +xp+绿守+阻止。真的不卡,我手也真的不快,不知道为什么有些 app 就会出现两遍,这的确不会导致崩溃,但这很影响用户体验!
|
12
Jobin0528 OP 不懂 ios 安卓编程,小白用户。
只是想问下有没有什么插件或者 app 可以解决这个问题? |
13
Totato5749 2016-01-28 11:50:33 +08:00
我认为原因是点击之后 startActivity 之前有太多工作,或者新的页面渲染时间太长,所以性能越差的机子复现这问题越容易
|
14
rockyou12 2016-01-28 12:44:54 +08:00
@Totato5749 应该只是手机性能或者代码写太长了,我写的时候一般 startIntent 前最多就 3,4 行,除了用 monkey 测试的时候基本没发现这种问题
@Jobin0528 其实就是个消抖的问题,大学学硬件的时候就经常接触,这个东西软件硬件都要考虑。既然你的手机硬件已经这样了,除非是改驱动层面的东西不然很难解决 |
16
greenskinmonster 2016-01-28 13:07:09 +08:00
一般需要开发者解决
http://stackoverflow.com/a/20672997 |
18
Totato5749 2016-01-28 17:19:16 +08:00
@greenskinmonster
非常好的解决办法 不过有个问题 mLastClickTime=currentClickTime; 应该放在这个 if(elapsedTime<=MIN_CLICK_INTERVAL) return; 之后 OnClickListener OnItemClickListener 都可用 很好! |
19
greenskinmonster 2016-01-28 17:34:45 +08:00
|
20
nashxk 2016-01-28 22:17:35 +08:00
开发的时候加几句代码就好了。不过有时候嫌麻烦就不加了。
|