首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android项目实战(二):安卓应用程序退出的三种方法

对话框内容 11 .setIcon(R.drawable.ic_launcher)//对话框图标 12 .setCancelable(false) //点击对话之外的部分是否取消对话...return super.onKeyDown(keyCode, event); 36 } 二、连续按两次后退键退出,一般两次按键时间间隔为2秒 (1)一般思路方法: 思路。...); 113 // } 114 115 } 三、连续按两次后退键退出,一般两次按键时间间隔为2秒(handler方法) 设置一个标记变量isExit = false; 当点击后退按钮的...时候 (1)如果isExit为true 退出程序 (2)如果isExit为false 则提示“两秒内再次后退退出程序”,并是isExit为true,同时发送一个两秒延迟消息,两秒后isExit为false...,这样当消息未发送出去前的两秒,再次后退 便可退出程序 1 @Override 2 public boolean onKeyDown(int keyCode, KeyEvent event

1K50
您找到你想要的搜索结果了吗?
是的
没有找到

打造聊天丝滑滚动体验:AI 聊天的翻转之道

我们需要开发一个类似微信聊天的交互体验:每当聊天中展示新消息,需要将聊天滚动到底部,展示最新消息。...如果在 web 什么也不做,聊天体验可能是这样的,需要用户手动滚动到最新消息:试想一下如何在 web 中实现微信的效果。每当聊天中接收到新消息,都需要调用滚动方法滚动到消息底部。...如果仍使用 scrollIntoView 来滚动到底部,就需要监听消息体的变化,每次消息更新都要通过 JavaScript 调用一次滚动方法,会造成一些问题:频繁的 JavaScript 滚动调用。...自然列表:灵感来源聊天接收到新消息滚动到最新位置,总感觉这应该是一个很自然的行为,不需要这么多 Javascript 代码去实现滚动行为。...并不需要做什么滚动,这一行就会出现在最顶部的位置。想到这里惊讶的发现,聊天实际上不就是一个倒过来的列表吗? 列表最上边新增的行会把后边的行往下挤,而聊天最下边新增消息需要把上边的消息往上挤。

90321

Android实现点击两次返回退出APP

接下来我们来实现点击两次退出APP 2、实现点击两次退出APP 网上实现的代码主要是两种方式: (1)、利用Handler (2)、利用系统秒数 这两个方法的核心其实都是利用时间差,如果在限定的时间内点击了两次返回键就退出程序...{ super.handleMessage(msg); isExit--; } }; @Override public boolean onKeyDown(int keyCode, KeyEvent event...实际上就是基于异步消息处理机制,只是Android帮我们做了很好的封装而已。...第一次点击 isExit 的值增加1,其值为1,调用 exit() ,弹出提示提醒用户再点击一次退出程序,并调用刚才创建的 handler 发送修改 isExit 为0,这里设置其延时2秒发送,如果...Android官方也并不建议我们使用这种方法,使用过的也应该知道使用这种方法直接退出的效果很差,并不像 Android 自带应用退出的动画那么流畅,所以建议不使用这个方法。

1.4K30

onbeforeunload事件_pageload事件何时触发

beforeunload事件 简介 当窗口,文档及其资源即将卸载,将触发该事件。该文档仍然可见,此时事件仍可取消。...如果为returnValueEvent属性分配了一个字符串,则会出现一个对话,要求用户确认离开该页面(参见下面的示例)。IE浏览器在对话中显示返回的字符串,但其他浏览器会显示自己的消息。...一定要与页面进行交互之后,才能在页面卸载的时候弹出确认离开的对话;没有进行页面交互,也是会触发beforeunload事件的,只是不会弹出确认离开的对话。...returnValue[1] DOMString 事件的当前返回值(显示用户的消息)。...使用form.submit() 提交表单的时候 应用场景 onbeforeunload对话用于现代Web上的两件事: 防止用户无意中丢失数据。 欺骗用户。

2.8K20

《前端实战总结》之使用postMessage实现可插拔的跨域聊天机器人

至于我们设置了cors之后在network中出现两次请求的问题,其实涉及到cors跨域的请求预检,分为简单请求和非简单请求两种,这块知识可以单独抽离出一篇文章,感兴趣的可以自己学习了解一下。...本质上说postMessage()是基于消息事件机制来实现跨域通信,它隶属于消息窗体本身,比如window以及window内嵌的frame的window,基本使用形式如下: someWindow.postMessage...console.log(event.data) } // 派发消息的页面 winB.postMessage(_({text: '休息休息'}), origin) 我们的event里有如下几个核心的属性...: data 从其他 window 中传递过来的对象 origin 调用 postMessage 消息发送方窗口的 origin ....首先我们在a页面通过发送按钮和输入消息发送给b页面,大致结构如下: <iframe src="http://127.0.0.1

1.1K20

记一次线上kafka一直rebalance故障

今天我司线上kafka消息代理出现错误日志,异常rebalance,而且平均间隔2到3分钟就会rebalance一次,分析日志发现比较严重。...引入该配置的用途是,限制两次poll之间的间隔,消息处理逻辑太重,每一条消息处理时间较长,但是在这次poll()到下一轮poll()时间不能超过该配置间隔,协调器会明确地让使用者离开组,并触发新一轮的再平衡...每次消息消费后,需要提交偏移量。在提交偏移量,kafka会使用拉取偏移量的值作为分区的提交偏移量发送给协调者。...下一次重新分配分区,消费者会从最新的已提交偏移量处开始消费。这里就出现了重复消费的问题。...max.poll.records = 50 3.poll到的消息,处理完一条就提交一条,当出现提交失败,马上跳出循环,这时候kafka就会进行rebalance,下一次会继续从当前offset进行消费

3.4K20

分布式事务saga开源实现_spring分布式事务解决方案

如果把上面的发邮件的例子换成:A服务在完成Ti后立即发送Event到ESB(企业服务总线,可以认为是一个消息中间件),下游服务监听到这个Event做自己的一些工作然后再发送Event到ESB,如果A服务执行补偿动作...第一点要求Ti和Ci是幂等的,举个例子,假设在执行Ti的时候超时了,此时我们是不知道执行结果的,如果采用forward recovery策略就会再次发送Ti,那么就有可能出现Ti被执行了两次,所以要求Ti...如果采用backward recovery策略就会发送Ci,而如果Ci也超时了,就会尝试再次发送Ci,那么就有可能出现Ci被执行两次,所以要求Ci幂等。...3.幂等操作 如果您使用队列进行服务之间的通信(如SQS,Kafka,RabbitMQ等),我个人建议您将您的操作设置为幂等。这些队列中的大多数可能会传递相同的消息两次。...很多人错误地使用消息系统,先使用消息系统发送一个提醒通知,然后再让消息接受者通过服务接口过来取数据,这等同于没有使用消息系统,因为同步操作会堵塞,而消息系统是非堵塞的,大数据读取同步经常会堵塞,这是无法通过事前评估数据量大小来主观以为这么小数据量不会造成堵塞的

45120

空谈分布式系统设计之幂等性

Step 3:转入方实现有个listener一直监听这个event,当监听到这个event,执行如下逻辑: begin transaction记账单(包括:转账请求uuid+转账状态success...但是,上面的设计可能有多个地方会出现event消息重发的情况,比如:background job发送event成功,但是修改账单状态失败;或者,转入方逻辑commit到数据库成功,但是发送ack给Kafka...对于上面的设计,要保证幂等性,可以在账单表中存一个request uuid,利用这个uuid达到去重的效果,具体是:转入方在收到重复转账event消息,根据request uuid先去数据库里面检查有没有这个...消息顺序变化 消息顺序产生变化,可能的情况有: - retry queue,两次连续更新同一条数据的event,第一个event处理失败放进retry queue,而第二个event处理成功。...- 流量切到新的数据库上,Kafka里面还有更新数据的event,此时已经有更新数据的请求进来。 对于这种情况,如何保证幂等性呢? 关键点是老的event需要被忽略掉。

86532

Spring事件机制之ApplicationListener与ApplicationEvent

每一种控件有自己可以识别的事件,如窗体的加载、单击、双击等事件, 编辑(文本)的文本改变事,等等。事件有系统事件和用户事件。系统事件由系统激发,如时间每隔24小,银行储户的存款日期增加一天。...下面我们使用spring的事件机制完成特定情况的功能,假设有如下使用场景: 应用场景:很多时候我们想要在某个类加载完毕干某件事情,但是使用了spring管理对象,我们这个类引用了其他类(可能是更复杂的关联...),所以当我们 去使用这个类做事情发现包空指针错误,这是因为我们这个类有可能已经初始化完成,但是引用的其他类不一定初始化完成,所以发生了空指针错误,解决方案如 下: 1、写一个类继承spring...MVC之后的webApplicationontext会两次调用上面的方法,如何区分这个两种容器呢?...这种情况下,就会造成onApplicationEvent方法被执行两次

17710

关于 Promise 的 9 个面试题

请选择正确的答案: x打印一次消息 √打印两次消息 xUnhandledPromiseRejectionWarning x程序退出 解析: 我们使用构造函数方法创建一个 Promise,并通过 reject...请选择正确的答案: x打印一次消息 x打印两次消息 √UnhandledPromiseRejectionWarning x程序退出 解析: ?...使用 Promise 构造函数,必须调用 resolve() 或 reject() 回调。...请选择正确的答案: √打印一次错误消息 x打印两次错误消息 xUnhandledPromiseRejectionWarning x程序退出 解析 当链接 .catch ,每个仅处理先前的 .then...请选择正确的答案: x打印一次消息 x打印两次消息 xUnhandledPromiseRejectionWarning √不打印任何内容 解析 提示: .catch可以简单地通过返回一个常规值来忽略(或覆盖

70620

Android EditText监听回车键并处理两次回调问题

前言 我们都知道,在登面,搜索等等有EditText控件的界面上,当用户输入完内容后,点击回车键执行逻辑会有非常好的用户体验,所以今天我们来学习如何监听EditText监听回车键并处理监听发生了两次回调问题...layout_width="match_parent" android:layout_height="wrap_content" / </LinearLayout 要想监听到软键盘按下什么键,就需要使用...两次回调解答并解决 我们都知道,当我们按某个键的时候,键盘有按下和抬起两个操作,所以这里两次回调就是回车按下,回调一次,回车键抬起,回调一次。...) { if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) { Log.e...Go, actionSearch : 一个放大镜 actionSend : Send actionNext : Next actionDone : Done,隐藏软键盘,即使不是最后一个文本输入

1.5K31

浅谈JavaScript的事件(事件类型)

DOM3级的事件类型主要包括:UI事件,用户与页面上的元素交互触发;焦点事件,元素获得或失去焦点触发;鼠标事件,用户通过鼠标在页面上执行操作触发;滚轮事件,使用鼠标滚轮触发;文本事件,当在文档中输入文本触发...,当用户选择文本的内容触发;resize事件,当浏览器窗口大小改变触发;scroll事件,当用户滚动带滚动条的元素触发。...使用load事件能够确保事件是在页面元素加载完成后触发,不活出现错误。如果我们在页面元素位加载完成,就去获取页面上的元素,则会产生错误。...只有触发两次click事件,才会触发dbclick事件。...其中keydown和keypress是在文本发生变化之前触发,keyup是在文本变化之后触发。如果按下的是非字符集,则会触发keydown和keyup事件。

1.8K50

JSB 原理与实践

敏锐同学到这一步其实就已经知道我们在日常使用 JSB 客户端是如何调用前端 JS 代码了,我们在刚刚的静态 html 文件中添加几行 JS 代码: function evaluateByNative(...messagingIframe); }, 200) } 拦截式在双端都具有非常好的向下兼容性,曾经是最主流的 JSB 实现方案,但目前在高版本的系统中已经逐渐被淘汰,理由是它有如下几个劣势: 连续发送可能会造成消息丢失...(可以使用消息队列解决该问题) URL 字符串长度有限制 性能一般,URL request 创建请求有一定的耗时(Android 端 200-400ms) 实践案例 同样用一个简单的 Demo2 来看一下如何使用拦截式实现...串联双端通信的过程 现在我们已经知道如何实现两端互相发送消息以及执行回调了,但看起来并不好用:首先调用 JSB 需要在方法名后拼接参数和对应的回调函数,其次回调函数还需要一个一个地挂载在全局对象上。...我们期望的使用方式其实是这样: // Web web.call('event1', {param1}, (res) => {...}) // 触发 native event1 执行 web.on('event2

1.2K30

JSB 原理与实践

document.querySelector('#test').innerHTML = 'I am from native'; 敏锐同学到这一步其实就已经知道我们在日常使用 JSB 客户端是如何调用前端...messagingIframe); }, 200) } 拦截式在双端都具有非常好的向下兼容性,曾经是最主流的 JSB 实现方案,但目前在高版本的系统中已经逐渐被淘汰,理由是它有如下几个劣势: 连续发送可能会造成消息丢失...(可以使用消息队列解决该问题) URL 字符串长度有限制 性能一般,URL request 创建请求有一定的耗时(Android 端 200-400ms) 实践案例 同样用一个简单的 Demo2 来看一下如何使用拦截式实现...串联双端通信的过程 现在我们已经知道如何实现两端互相发送消息以及执行回调了,但看起来并不好用:首先调用 JSB 需要在方法名后拼接参数和对应的回调函数,其次回调函数还需要一个一个地挂载在全局对象上。...我们期望的使用方式其实是这样: // Web web.call('event1', {param1}, (res) => {...}) // 触发 native event1 执行 web.on('event2

1.3K10

JSB 原理与实践

document.querySelector('#test').innerHTML = 'I am from native'; 敏锐同学到这一步其实就已经知道我们在日常使用 JSB 客户端是如何调用前端...messagingIframe); }, 200) } 拦截式在双端都具有非常好的向下兼容性,曾经是最主流的 JSB 实现方案,但目前在高版本的系统中已经逐渐被淘汰,理由是它有如下几个劣势: 连续发送可能会造成消息丢失...(可以使用消息队列解决该问题) URL 字符串长度有限制 性能一般,URL request 创建请求有一定的耗时(Android 端 200-400ms) 实践案例 同样用一个简单的 Demo2 来看一下如何使用拦截式实现...串联双端通信的过程 现在我们已经知道如何实现两端互相发送消息以及执行回调了,但看起来并不好用:首先调用 JSB 需要在方法名后拼接参数和对应的回调函数,其次回调函数还需要一个一个地挂载在全局对象上。...我们期望的使用方式其实是这样: // Web web.call('event1', {param1}, (res) => {...}) // 触发 native event1 执行 web.on('event2

3.1K40

Angular 自定义属性指令

如果使用其它的名称,比如 event 的话,我们就不能正确获取事件对象。...('style.border') border: string; 在设置完属性绑定后,我们来更新一下 onKeyDown() 方法中的代码,当发现输入非数值,为当前的输入设置一个红色的边框: this.border...该指令实现的功能是,当鼠标移入到指定的元素(页面中的 ? 元素),显示我们自定义的提示消息。而当鼠标移出指定元素,要隐藏我们自定义的提示消息。...要实现该功能的一种实现方案是,为应用 TooltipDirective 指令的宿主元素动态添加一个子元素,然后让它作为提示消息的容器,当鼠标移入到指定的元素,显示前面动态添加的元素。...元素,显示提示消息,而鼠标移出 (?) 元素,隐藏提示消息

2K30
领券