精华内容
下载资源
问答
  • 由于linux kernel 里存在大量的小文件,才用链接,每次close()之后有大量的socket处于TIME_WAIT状态,而没有释放,这导致客户端 socket被用完,当新的connect()产生时,分配不到socket. 解决方法是,修改以下两项...

    这个问题出现在一个批量上传文件的客户端程序里,系统是Ubuntu 15.04.

    测试采用的是解压缩的linux kernel 文件夹。由于linux kernel 里存在大量的小文件,才用短链接,每次close()之后有大量的socket处于TIME_WAIT状态,而没有释放,这导致客户端 socket被用完,当新的connect()产生时,分配不到socket.

    解决方法是,修改以下两项内核参数,来加速socket的释放

    sudo sysctl -w net.ipv4.tcp_timestamps=1
    sudo sysctl -w net,ipv4.tcp_tw_recycle=1

    不过下面这篇文章有关于是否应该设置的讨论,供设置是参考:

    http://vincent.bernat.im/en/blog/2014-tcp-time-wait-state-linux.html


    最终问题解决了,解决方式是使用一个Socket来处理目录下所有文件,对每一个文件开一个Socket,端口迟早会用完。

    展开全文
  • Android 防止短时间内重复点击技巧

    千次阅读 2014-10-22 16:16:01
    在Android开发中,当完成一款软件时...好的情况是结果被执行多次,坏的情况就可能使程序崩溃,因此很多时候就必须对点击行为进行必要的处理,程序在短时间内重复点击中只执行一次点击行为。下面介绍两种方式: 1、按

    在Android开发中,当完成一款软件时,测试人员会对软件进行测试,本来可以正常运行的软件在测试人员里就可以出现意想不到的bug,其中一个比较常见的问题就是短时间内重复点击一个按钮,本来正常点击只执行一次,但是在短时间内点击多次,好的情况是结果被执行多次,坏的情况就可能使程序崩溃,因此很多时候就必须对点击行为进行必要的处理,让程序在短时间内重复点击中只执行一次点击行为。下面介绍两种方式:

    1、按钮不响应点击行为:
    当点击一次按钮之后,短时间内不让按钮响应点击行为,代码如下:

    mButton.setOnClickListener(new OnClickListener()
            {
                
                @Override
                public void onClick(View view)
                {
                    //设置Button状态暂时无效,不响应任何操作
                    mButton.setEnabled(false);
                    //延时200毫秒之后将Button恢复为有效状态,可以响应点击状态
                    new Handler().postDelayed(new Runnable()
                    {
                        
                        @Override
                        public void run()
                        {
                            mButton.setEnabled(true);
                        }
                    }, 200);
                }
            });

    2、按钮响应点击行为,不执行点击事件

    上述第一种方式适用于按钮只有一种状态情况下,如果按钮状态需要改变,但是也要防止短时间内重复点击,则可以采用如下方式:

    • 定义一个休眠类:
    public class ClickSleep {
        //默认休眠时间
        public static final long DEFAULT_SLEEP_TIME = 500;
        //线程运行标志位
        private boolean isRuning = false;
        //线程是否正在运行
        public boolean isRuning() {
            return isRuning;
        }
        //运行线程,开始休眠线程
        public void runWithTime(final long defaultSleepTime) {
            isRuning = true;
            new Thread() {
                @Override
                public void run() {
                    try {
                        sleep(defaultSleepTime, 0);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    isRuning = false;
                    super.run();
                }
            }.start();
        }
    }
    然后在Activity中new 一个ClickSleep实例:mClickSleep = new  ClickSleep();最后在点击事件中使用:
    mButton.setOnClickListener(new OnClickListener()
            {
                
                @Override
                public void onClick(View view)
                {
                        if(!mClickSleep.isRuning()) {
                        //执行点击事件
                        clickEvent(); 
                        mClickSleep.runWithTime(ClickSleep.DEFAULT_SLEEP_TIME);
                    }
                }
            });










    展开全文
  • 短时间用户多次发出某个点击事件 1,比如点击某个按钮跳转(详情页面)activity,手机性能不加。在未跳转之前用户多次触发了点击事件就会产生两个activity。可能对于四大组件的activity ,会有人说。使用activity的...

    短时间用户多次发出某个点击事件

    1,比如点击某个按钮跳转(详情页面)activity,手机性能不加。在未跳转之前用户多次触发了点击事件就会产生两个activity。可能对于四大组件的activity ,会有人说。使用activity的启动模式 在manifest 中配置activity  launchMode标签(singleTask ,singleTop,singleInstance )  然并不卵用。

    2,点击某个按钮弹出dialog,如果dialog 渲染比较慢 。用户并且在此刻多次点击按钮,会产生多个dialog。体验相当之差

     

    解决思路: 点击之后然后按钮在一段时间再次点击不生效。

    1,那个按钮需要防止重复点击,针对那个按钮进行处理

    那就上代码:

    private final static String TAG = "MainActivity";
    private Button btn;
    private long lastClickTime = 0;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = findViewById(R.id.btn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                long now = System.currentTimeMillis();
                if(now - lastClickTime >1000){
                    lastClickTime = now;
                    Log.e(TAG,"perform click!!!");
                }
            }
        });
    }

    逻辑很简单,控制点主要是在(now - lastClickTime >1000) 如果间隔不大于1s 不会执行perform click 的

     

    但是   我们岂能这点追求 ,很多情况下,项目已经是超级复杂了 ,需要对旧项目或者就模块 进行优化,防止重复点问题。

    如果一个按钮,一个按钮处理,此项工程将会边的超级繁琐,还会产生很多无关的逻辑。导致业务逻辑变得更加复杂。那我们怎么才能不修改,原有的业务逻辑就能到达控制,所有按钮的重复点击问题呢。

    既然有了需求,我们就要想办法解决。

    问题:修改一处可以达到全局修改的作用:

    解决方案:全局代理click 事件  并重新click 时间

    先说下代码层的大致思路

    1,通过全局监控activity   (方案 如下:

     a, 通过android 提供的 Application.ActivityLifecycleCallbacks  本例子选用方案 

     b,通过 android Instrumentation 这个类,监控所有的activity 生命周期)

    2, 监控 activity 上面的 view ,动态替换view 的clicklistener 

     

    上代码:

    主要实现   是在application 中实现的
    /**
     * Created by caoyanglong on 2018/8/14.
     */
    public class MyApp extends Application {
        @Override
        public void onCreate() {
            super.onCreate();
            registerActivityLifecycleCallbacks(lifecycleCallbacks);
        }
    
        private ActivityLifecycleCallbacks lifecycleCallbacks = new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle bundle) {
                fixViewMutiClickInShortTime(activity);
            }
    
            @Override
            public void onActivityStarted(Activity activity) {
    
            }
    
            @Override
            public void onActivityResumed(Activity activity) {
    
            }
    
            @Override
            public void onActivityPaused(Activity activity) {
    
            }
    
            @Override
            public void onActivityStopped(Activity activity) {
    
            }
    
            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
    
            }
    
            @Override
            public void onActivityDestroyed(Activity activity) {
    
            }
        };
    
        //防止短时间内多次点击,弹出多个activity 或者 dialog ,等操作
        private void fixViewMutiClickInShortTime(final Activity activity) {
            activity.getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    proxyOnlick(activity.getWindow().getDecorView(),5);
                }
            });
        }
    
        private void proxyOnlick(View view, int recycledContainerDeep) {
            if (view.getVisibility() == View.VISIBLE) {
                boolean forceHook = recycledContainerDeep == 1;
                if (view instanceof ViewGroup) {
                    boolean existAncestorRecycle = recycledContainerDeep > 0;
                    ViewGroup p = (ViewGroup) view;
                    if (!(p instanceof AbsListView || p instanceof ListView) || existAncestorRecycle) {
                        getClickListenerForView(view);
                        if (existAncestorRecycle) {
                            recycledContainerDeep++;
                        }
                    } else {
                        recycledContainerDeep = 1;
                    }
                    int childCount = p.getChildCount();
                    for (int i = 0; i < childCount; i++) {
                        View child = p.getChildAt(i);
                        proxyOnlick(child, recycledContainerDeep);
                    }
                } else {
                    getClickListenerForView(view);
                }
            }
        }
    
        /**
         * 通过反射  查找到view 的clicklistener 
         * @param view
         */
        public static void getClickListenerForView(View view) {
            try {
                Class viewClazz = Class.forName("android.view.View");
                //事件监听器都是这个实例保存的
                Method listenerInfoMethod = viewClazz.getDeclaredMethod("getListenerInfo");
                if (!listenerInfoMethod.isAccessible()) {
                    listenerInfoMethod.setAccessible(true);
                }
                Object listenerInfoObj = listenerInfoMethod.invoke(view);
    
                Class listenerInfoClazz = Class.forName("android.view.View$ListenerInfo");
    
                Field onClickListenerField = listenerInfoClazz.getDeclaredField("mOnClickListener");
    
                if (null != onClickListenerField) {
                    if (!onClickListenerField.isAccessible()) {
                        onClickListenerField.setAccessible(true);
                    }
                    View.OnClickListener mOnClickListener = (View.OnClickListener) onClickListenerField.get(listenerInfoObj);
                    if (!(mOnClickListener instanceof ProxyOnclickListener)) {
                        //自定义代理事件监听器
                        View.OnClickListener onClickListenerProxy = new ProxyOnclickListener(mOnClickListener);
                        //更换
                        onClickListenerField.set(listenerInfoObj, onClickListenerProxy);
                    }else{
                        Log.e("OnClickListenerProxy", "setted proxy listener ");
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }//自定义的代理事件监听器
    
    
        static class ProxyOnclickListener implements View.OnClickListener {
            private View.OnClickListener onclick;
    
            private int MIN_CLICK_DELAY_TIME = 500;
    
            private long lastClickTime = 0;
    
            public ProxyOnclickListener(View.OnClickListener onclick) {
                this.onclick = onclick;
            }
    
            @Override
            public void onClick(View v) {
                //点击时间控制
                long currentTime = System.currentTimeMillis();
                if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {
                    lastClickTime = currentTime;
                    Log.e("OnClickListenerProxy", "OnClickListenerProxy"+this);
                    if (onclick != null) onclick.onClick(v);
                }
            }
        }
    
    }

     

    注意:上面大致思路已经说得很清楚了

    1,第一监控到view  是通过

    View.getViewTreeObserver().addOnGlobalLayoutListener

     

    2,proxyOnlick(activity.getWindow().getDecorView(),5);然后对view 的进行遍历查询

    前两步通过android 提供的api 都可以搞定

    3,找到view 的 clicklistener 并且修改为代理,没有直接的api ,这个时候需要查询view 源码

    分析  咱们先看   view.setOnClickListener()

    源码如下:

    public void setOnClickListener(@Nullable OnClickListener l) {
        if (!isClickable()) {
            setClickable(true);
        }
        getListenerInfo().mOnClickListener = l;
    }

    可以看到 getListenerInfo().mOnClickListener = l;   那就继续追踪源码:getListenerInfo().mOnClickListener

     

    根据源码看到 View 中内部类的 mOnclickListener 即为我们的设置的Onclicklistener 变量 既然知道思路了,下面的反射代码就不能理解了

     

    public static void getClickListenerForView(View view) {
        try {
            Class viewClazz = Class.forName("android.view.View");
            //事件监听器都是这个实例保存的
            Method listenerInfoMethod = viewClazz.getDeclaredMethod("getListenerInfo");
            if (!listenerInfoMethod.isAccessible()) {
                listenerInfoMethod.setAccessible(true);
            }
            Object listenerInfoObj = listenerInfoMethod.invoke(view);
    
            Class listenerInfoClazz = Class.forName("android.view.View$ListenerInfo");
    
            Field onClickListenerField = listenerInfoClazz.getDeclaredField("mOnClickListener");
    
            if (null != onClickListenerField) {
                if (!onClickListenerField.isAccessible()) {
                    onClickListenerField.setAccessible(true);
                }
                View.OnClickListener mOnClickListener = (View.OnClickListener) onClickListenerField.get(listenerInfoObj);
                if (!(mOnClickListener instanceof ProxyOnclickListener)) {
                    //自定义代理事件监听器
                    View.OnClickListener onClickListenerProxy = new ProxyOnclickListener(mOnClickListener);
                    //更换
                    onClickListenerField.set(listenerInfoObj, onClickListenerProxy);
                }else{
                    Log.e("OnClickListenerProxy", "setted proxy listener ");
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

     

    ok     这样我们的优化 就做完了,是不是很简单。我们完全不需了解对应的业务,也不需要到各个页面去修改代码,便达到了我们的优化需求。  

    展开全文
  • 在开发中,我们经常会写倒计时的功能,在解决按钮避免在短时间内多次点击的时候,  1.我们可以设置UIButton的enable属性,为NO,或者YES  2.还可以利用两个方法达到同样的效果,下面为代码.  可以很好地控制,...

      在开发中,我们经常会写倒计时的功能,在解决按钮避免在短时间内多次点击的时候,

      1.我们可以设置UIButton的enable属性,为NO,或者YES

      2.还可以利用两个方法达到同样的效果,下面为代码.

         可以很好地控制,几秒钟之后按钮点击才能执行方法.

      - (void)btnClick{
          [[self classcancelPreviousPerformRequestsWithTarget:self selector:@selector(todoSomething:) object:self.btn];
          [self performSelector:@selector(todoSomething:) withObject:self.btn afterDelay:2.2f];
      
      }
      - (void)todoSomething:(UIViewController *)vc{
       
      }
    展开全文
  • 背词法的理论基础 复习的原则 (这里主要讲了艾宾浩斯的遗忘曲线) 时间间隔 20分钟 1小时 8小时 1天 2天 6天 31天 重学节省涌读时间百分数 58.2 44.2 35.8 33.7 27.8 25.4 21.1 复习的确定 人的记忆周期分为短期...
  • 然后就有了下面的代码 @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (isPreventFastClick()) { if (ev.getAction() == MotionEvent.ACTION_DOWN){ // 判断连续点击事件时间差 if ...
  • 下面举个例子: #import "ViewController.h" @interface ViewController () //创建BOOL类型变量 @property BOOL violentClick; @end @implementation ViewController - (void)viewDidLoad { [super ...
  • 2018深圳云栖大会已经圆满落幕,在飞天技术汇-弹性计算、网络和CDN专场中,阿里云CDN高级技术专家周哲为我们带来了《海量视频极速分发》的主题分享,带领我们从视频内容采集、上传、存储和分发的角度介绍整体方案...
  • 短时间内大量的短连接导致haproxy端口耗尽,通过查看cat /proc/sys/net/ipv4/ip_local_port_range 的数值可得知当前可使用的端口范围,我这里默认是32768到61000;即使将其调整到1024到65535,在大量短连接情况下...
  • 我在中国外汇交易中心工作过一段时间,当时有个专业的Loadrunner测试团队,他们的测试结果:为什么100个用户的响应时间反而比50个用户的响应时间。 分析:首先这肯定是一种不正常的现象,因为按照常理用户越多...
  • 网址选择一定要选择平台,小平台网址的解析速度、倒闭时间、是否会做出劫持现象、多平台的兼容性问题等都不是很稳定,选择需谨慎! 目前来说比较稳定的网址平台有新浪(t.cn)、腾讯(url.cn)、微信(w....
  • 是什么黑科技这些APP变得如此神通,能深深的吸引着你的目光和味蕾呢?其实,之所以你觉得它越来越聪明越来越懂你,当然少不了你跟它之间的亲密“沟通”,看似不经意的一次点击,一次停留,它都默默...
  • win10锁屏时间就关闭屏幕

    万次阅读 2019-06-17 08:18:53
    系统锁屏后1分钟左右屏幕自动关闭,怎样可以调整锁屏后关闭屏幕的时间 win键+R,运行regedit编辑注册表 修改以下注册表值:  [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\7516b95f-...
  • SJF作业优先算法
  • 阿里妹导读:基于时间碎片化、视频交互强、内容丰富、体验好等因素,视频近几年处在流量风暴的中心,各平台纷纷涉足视频领域。因此,平台对视频内容的推荐尤为重要,千人千面...
  • /home/liang/.ssh/在该目录创建config文件 vi /home/liang/.ssh/config加入下面一句:ServerAliveInterval 60保存退出,重新开启liang用户的shell,则再ssh远程服务器的时候,不会因为长时间操作断开。应该是加入这...
  • tcp长连接和连接

    千次阅读 2013-08-20 11:21:05
    刚接触TCP/IP通信设计的人根据范例可以很快编出一个通信程  序,据此一些人可能会认为TCP/IP编程很简单。其实不然,  TCP/IP编程具有较为丰富的内容。...1.一个Client方连接一个Server方,或称(pee
  • 抖音卡视频怎么制作

    万次阅读 2019-05-23 10:19:30
    最近在抖音视频上,卡视频非常火。这种视频搭配着有节奏的背景音乐,使得视频看起来非常的有节奏感。下面教教大家怎么制作卡视频。 1、利用桌面端软件制作 1、拍摄素材 首先我们要拍摄长视频或者照片作为...
  • ​​​​​​这是操作系统课程... 作业优先算法使用例题一数据或程序内置数据,要求运行结果给出调度顺序、完成时间、周转时间、带权周转时间 高响应比算法使用例题二的数据,要求运行结果给出调度顺序、完成时间...
  • 距离算法

    千次阅读 2016-08-21 20:48:06
    如果到点的路径有负值的话,Dijkstra算法就行不通了,比如下面的情况: 按照Dijkstra算法的走向是s->v->u,此时s->u的最短距离是4。而从s->q->u走法,u的距离为-6。所以在这种情况下就不合法了,...
  • Matlab中时傅里叶变换 spectrogram和stft的用法

    千次阅读 多人点赞 2020-05-25 19:22:29
      在Matlab中,做时傅里叶...了解了这下面的函数及参数就更加容易理解了。 spectrogram 参数列表   先来看spectrogram函数,在更早期的版本中,这个函数的名字是specgram,几种常用的用法如下: spectrogr
  • 通过春招,我知道了自己的一些板,于是,大概从 6 月份开始,我就开始系统着整理知识了,为了在基础知识稳妥一些,从来不做笔记的我,第一次决定做笔记。 我为什么不做笔记?一个原因是,小学到大学,基本没做过...
  • 语音时过零率计算——Python实现

    千次阅读 2018-10-23 15:15:05
    上一篇文章介绍了语音时能量,这篇介绍一下语音的时过零率。时过零率也是一个比较基础的语音时域特征,下面就来介绍一下。 时过零率就是单位时间穿过坐标系横轴的次数,计算公式如下:
  • 前段时间做支付的时候,要生成可供微信和支付宝扫描的支付二维码,二维码里存储的也就是一个链接,但是可能是因为链接比较长的缘故,总是被微信拦截。 然后就换成了微信官方的长链接转链接,好不容易弄好了,发现...
  • 站在 App 开发者的角度列了下面这份自检清单供大家参考1. 包体是否足够小App 的包体大小,对获取用户有着至关重要的作用,特别是在线下的推广活动中,包体太,下载费时费流量,很多用户会失去耐心,从而直接导致 ...
  • stm32按键 长按 按 函数 一

    万次阅读 多人点赞 2018-11-04 00:48:27
    在stm32工程中,长按和按的代码书写,调用的读取按键状态的底层函数。封装成的按键函数代码。下面是函数的头文件,和.c文件的代码。使用定时器来扫描按键。 #define KEY_ON 1 #define KEY_OFF 0 #define KEY_...
  • 此时我们需要采用设置Cookie来进行爬取,下面我们进行详细介绍。非常感谢我的学生承峰提供的思想,后浪推前浪啊!一. 网站分析与爬虫拦截当我们打开蚂蚁短租搜索贵阳市,反馈如下图所示结果。网址为:...
  • 一、问题描述我在做手机App的时候,用到了ion-datatime插件,但是该插件不能显示当前时间,只是一个空白; 申请时间 [(ngModel)]="newLeav
  • 如何优化MySQL千万级表,我写了6000字的解读

    万次阅读 多人点赞 2019-10-21 20:03:03
    千万级表如何优化,这是一个很有技术含量的问题,通常我们的直觉思维都会跳转到拆分或者数据分区,在此我想做一些补充和梳理,想和大家做一些这方面的经验总结,也欢迎大家提出建议。 从一开始脑海里开始也是...
  • 对于音频信号,按时间分辨率、按局部or全局的观念、持续时间长短,或者爱怎么讲怎么讲,特征可分为长期(long-term)、中期(mid-term)、短期(short-term),也可以叫时特征。术语翻译不统一,我也不专业。知道...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 414,794
精华内容 165,917
关键字:

如何短时间让下面大点