Flutter TV App 中如何防止按键过快

17 篇文章 0 订阅
15 篇文章 1 订阅

        在刚刚开发完成的Flutter TV app中,遇到过好多个棘手的问题,最后都迎刃而解了。正好有空就一个个总结出来。

        第一个问题:如何处理flutter TV 按键过快?

        机顶盒app开发中,内存问题首要考虑的,因为大多数的机顶盒内存较低,它们的Ram在2G以下,特别是很多内存1G, 500M的盒子。app在这种盒子上运行时动不动就闪退,着实令人头疼。

        由于硬件内存的限制,用遥控器切换app页面时,速度会很慢,偶尔还会发生ANR,这种情况下如果不控制遥控器的接收按键速度,flutter widget 不停切换或者刷新,ANR和闪退的几率会非常高。

        那么如何控制flutter widget的按键速度呢?

     我们知道Android activity的所有按键响应都是可以在 dispatchKeyEvent()方法里,FlutterActivity 也不例外,所有遥控器的按键拦截都可以在这个方法中进行。在flutter app的这个方法,我们要拦截两类按键,一是拦截重复按键, 二是拦截按键过快。

所以最终的处理代码如下:

@Override
public boolean dispatchKeyEvent(KeyEvent event) {

   
if(event.getRepeatCount() > 0) {  //拦截重复按键
       
return true;
    }
   
if(event.getAction()  == KeyEvent.ACTION_DOWN) {
       
if(isFastClick()) { // 拦截与前一次按键间隔太短的按键
           
return true;
        }
    }
   
// TODO Auto-generated method stub
   
return super.dispatchKeyEvent(event);
}


private static final int MIN_CLICK_DELAY_TIME = 400; //ms,两次有效按键之间的最小间隔时间
private static long lastClickTime;

public static boolean isFastClick() {
   
boolean flag = false;
   
long curClickTime = System.currentTimeMillis();
   
if ((curClickTime - lastClickTime) <= MIN_CLICK_DELAY_TIME) {
        flag =
true;
    }
   
lastClickTime = curClickTime;
   
return flag;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值