利用weex-android
全局监听globalEvent
做的一个双击退出的小功能globalEvent
用于监听持久性事件,例如定位信息,陀螺仪等的变化。全局事件是需要额外APIs
处理的次要 API
。你能通过 addEventListener
注册事件监听,当你不再需要的时候,也可以通过 removeEventListener
取消事件监听官方文档
在WXPageActivity.java
文件中增加点击方法
public void onBackPressed(){
Map<String,Object> params=new HashMap<>();
params.put("click","back");
mInstance.fireGlobalEventCallback("androidback",params);
exitByDoubleClick();
}
private void exitByDoubleClick() {
Timer tExit=null;
if(!isExit){
isExit=true;
Toast.makeText(this,"再按一次退出程序",Toast.LENGTH_SHORT).show();
tExit=new Timer();
tExit.schedule(new TimerTask() {
@Override
public void run() {
isExit=false;//取消退出
}
},2000);// 如果2秒钟内没有按下返回键,则启动定时器取消掉刚才执行的任务
}else{
finish();
System.exit(0);
}
}
这里需要注意mInstance
对象。开始的时候,我是自己新创建了一个WxInstance
但是发现在vue
视图中不能有效的监听到,发现视图使用的instance
跟我这新创建的
不是同一个对象。所以追了下代码,发现WXPageActivity
继承了一个AbsWeexActivity
,而在AbsWeexActivity
中有个mInstance
对象,我们使用的就是这个对象。
然后在vue
视图中注册全局监听事件
<script>
const globalEvent = weex.requireModule('globalEvent')
const eventModule = weex.requireModule('event')
export default {
name: 'App',
created: function () {
var objThis = this
globalEvent.addEventListener('androidback', function (e) {
if(objThis.$route.path=='/index'||objThis.$route.path=='/login')
{
eventModule.closeApp()
}
else
{
objThis.$router.go(-1)
}
})
},
}
</script>
eventModule.closeApp()
是在eventModule
中新增的module方法.module
的使用前面我们说过了 WEEX-android播放背景音乐 (使用module)
@JSMethod(uiThread = false)
public void closeApp() {
System.exit(0);
}