EventBus

Android实例 每日一句(英语)

北城以北 提交于 2020-04-08 17:48:12
前言 :添加了学习模块,所以做了一个每日一句的功能,主要是在 天行数据 申请了一个 每日一句 的api,之后用okgo,调取,并解析成对象。获取文字、图片、音频等。在线显示、播放。同时做了一个底部弹出日历选择。 效果图: /**网络请求封装**/ implementation 'com.lzy.net:okgo:3.0.4' /**日历选择器**/ implementation 'com.prolificinteractive:material-calendarview:1.4.3' Json 格式: { "code": 200, "msg": "success", "newslist": [ { "id": 3725, "content": "Passion is a key ingredient to the study and practice of law and of life.", "note": "激情是学习和实践法律不可或缺的要素,同时也是生命中不可或缺的要素。", "tts": "https://edu-wps.ks3-cn-beijing.ksyun.com/audio/17c662155203497977f9536ac2bac6e1.mp3", "imgurl": "https://edu-wps.ks3-cn-beijing.ksyun.com/image

K8s系列-Kubeedge实现原理

大城市里の小女人 提交于 2020-04-08 08:55:00
感谢分享原文- http://bjbsair.com/2020-04-03/tech-info/29914.html Kubeedge除了在kubernetes的方面做了各种异步通信通道,保障offline后的业务连续性之外;还定义了一系列的设备抽象,用来管理边缘设备。而且,其v1.0版本正朝着边缘端服务网格,以及函数式计算等方向发展。 官方文档: https://docs.kubeedge.io/en/latest/ 架构 整体架构图比较明了,在不考虑edgesite的情况下,其架构分为了云端和边缘端。其实可以理解为kubernetes的管理侧和kubelet节点侧(对应edge端)。但是请注意,这里的场景是边缘计算,意味着edge端的网络环境难以保障。 云边通信 于是就衍生出了cloud端的cloud Hub与edge端的Edge Hub。这两个模块之间通过websocket或者quic通信,相当于建立了一条底层通信隧道,供k8s和其他应用通信。当然,使用什么协议通信不是重点,重点是如何保障当着之间的链路都无法保障的时候,业务不受到影响,这就是MetaManager的要解决的问题了。 CloudHub 前面提到cloud端的cloudHub就是一个隧道的server端,用于大量的edge端基于websocket或者quic协议连接上来;没错,这货才是正儿八经的二传手

android 代码混淆及问题大集锦

醉酒当歌 提交于 2020-04-07 01:45:33
  最近在需要对所开发的项目进行了代码混淆,在android studio中开启代码混淆其实还是挺方便的,不过因为代码混淆产生的问题非常多,特别是对于一些涉及到反射的第三方库经常因为名称的变化导致无法使用。   下面介绍android studio中对android项目进行代码混淆的详细步骤:   (1)代码混淆开启   想要开启代码混淆功能,只需要在相应的项目中将 build.gradle 的相应设置开启即可。 android{ buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } }    minifyEnable 即为开启的开关,而proguard-rules.pro是设置代码混淆时的相关设置,可以过滤不代码混淆的对象。   (2)代码混淆规则设置    程序中每个module下面都有对应的 proguard-rules.pro 文件,设置其规则可以过滤掉一些类、方法、注解和属性名的混淆,下面是ProGuard的手册页面,详细的规则可以在其中了解。https://stuff.mit.edu/afs/sipb/project/android/sdk/android-sdk

我是如何在5 天内,完成 60 个类的核心模块的重构

谁都会走 提交于 2020-03-24 00:24:25
3 月,跳不动了?>>> 代码是如何越写越烂的? 你是否经常听同事自嘲,“开始还想好好写,不知怎滴,后面越写越烂”? 代码越写越烂,果真是个没有端倪、无法干预的魔咒玄学吗? 让我们来快速浏览一下 重构前 项目里的代码是怎么写的。 protected void initView() { PagerAdapter pagerAdapter = new PagerAdapter(); viewPagerFix.setOffscreenPageLimit(4); viewPagerFix.setAdapter(pagerAdapter); mFragmentBinding.tabLayout.setTabData(pagerAdapter.titles); mFragmentBinding.tabLayout.setOnTabSelectListener(new OnTabSelectListener() { @Override public void onTabSelect(int position) { viewPagerFix.setCurrentItem(position); } @Override public void onTabReselect(int position) { } }); viewPagerFix.addOnPageChangeListener(new

Flutter实现登录/退出登录

半城伤御伤魂 提交于 2020-03-17 12:18:35
话不多说,直接上代码(表单页面代码就不贴了,自己怎么喜欢怎么来,直接贴实现方法代码) class LoginPage extends StatefulWidget { final arguments; LoginPage({Key key, this.arguments}) : super(key: key); _LoginPageState createState() => _LoginPageState(this.arguments); } class _LoginPageState extends State<LoginPage> { final arguments; _LoginPageState(this.arguments); @override void initState() { super.initState(); } //监听登录页面销毁事件 @override dispose () { super.dispose(); //事件广播,当登录后返回上一页时,上一页不会执行initState方法,需要用到这个个方法 eventBus.fire(new UserEvent("登录成功")); } //定义用户名和密码两个变量接收输入的值 String username = ""; //电话号 String password = ""; //密码 //登录方法

Android EventBus源码解析

你离开我真会死。 提交于 2020-03-10 09:31:47
前言 上一篇文章自己对EventBus的用法进行了简单的叙述,然后自己又去研究了一下EventBus3.0源码也参考了网上的一些大佬的博客进行进一步的理解,写这一篇文章让自己对EventBus有个好的总结回顾,如有不正确的地方欢迎留言。 一、EventBus简介 在EventBus没出现之前,那时候的开发者一般是使用Android四大组件中的广播进行组件间的消息传递,那么我们为什么要使用事件总线机制来替代广播呢?主要是因为: 广播:耗时、容易被捕获(不安全)。 事件总线:更节省资源、更高效,能将信息传递给原生以外的各种对象。 关于事件其实是一个泛泛的统称,指的是一个概念上的东西(不一定非得用什么Event命),通过查阅官方文档,事件的命名格式并没有任何要求,你可以定义一个对象作为事件,也可以发送基本数据类型如int,String等作为一个事件。后续的源码也可以进步证明(方法的命名并没有任何要求,只是加上@Subscribe注解即可!同时事件的命名也没有任何要求)。 EventBus作为一个消息总线主要有三个组成部分: 事件(Event): 可以是任意类型的对象。通过事件的发布者将事件进行传递。 事件订阅者(Subscriber): 接收特定的事件。 事件发布者(Publisher): 用于通知 Subscriber 有事件发生。可以在任意线程任 意位置发送事件。

Vue组件通信中eventBus的使用

大兔子大兔子 提交于 2020-03-07 17:00:16
vuex加入后,对组件之间的通信有了更加清晰的操作,对于中大型的项目来说,一开始就把vuex的使用计划在内是明智的选择。 然而在一些小型的项目,eventBus的作用就体现出来了。 主要是现实途径是在要相互通信的兄弟组件之中,都引入一个新的vue实例,然后通过分别调用这个实例的事件触发和监听来实现通信和参数传递。 这里来看一个简单的例子: 比如,我们这里有三个组件,main.vue、click.vue、show.vue。click和show是父组件main下的兄弟组件,而且click是通过v-for在父组件中遍历在了多个列表项中。这里要实现,click组件中触发点击事件后,由show组件将点击的是哪个dom元素console出来。 首先,我们给click组件添加点击事件 < div class= "click" @click .stop .prevent = "doClick($event)" ></div> 想要在doClick()方法中,实现对show组件的通信,我们需要新建一个js文件,来创建出我们的eventBus,我们把它命名为bus.js import Vue from 'vue' ; export default new Vue(); 这样我们就创建了一个新的vue实例。接下来我们在click组件和show组件中import它。 import Bus from

EventBus-订阅总线

橙三吉。 提交于 2020-03-06 02:57:14
EventBus-订阅总线 介绍EventBus 案例:通过EventBus给Fragment设置EditText传来的值 介绍EventBus EventBus是一种用于Android的事件发布-订阅总线,它简化了应用程序内各个组件之间进行通信的复杂度,尤其是碎片之间进行通信的问题,可以避免由于使用广播通信而带来的诸多不便。 在EventBus中有三个重点 1、发送者 用来在任意线程中,发送数据,参数是Objcet类型. 2、接收者 用来接收数据.但是接收之前需要在当前的页面注册和注销, @Override public void onStart ( ) { super . onStart ( ) ; //订阅事件 EventBus . getDefault ( ) . register ( this ) ; } @verride public void onStop ( ) { super . onStop ( ) ; //退订事件 EventBus . getDefault ( ) . unregister ( this ) ; } 3、事件 需要发送的内容,这里也可以封装成一个对象 @Subscribe ( threadMode = ThreadMode . MAIN ) public void getMsg ( EvenBus e ) { tvShow . setText

EventBus 及一些思考

回眸只為那壹抹淺笑 提交于 2020-03-02 08:59:31
摘自: https://www.cnblogs.com/jamesvoid/p/12387602.html EventBus 及一些思考 EventBus 是 Android 开发的一种常用框架,其解耦的思维令人赞叹 从特性上来讲,其与 Android SDK中的BroadcastReceiver很像,二者都是注册,发送事件,反注册,都可以定义事件的优先级,且都支持粘性(sticky)事件,只是EventBus 使用起来简单得多,而且不能跨进程 Android SDK其实也有一个不能跨进程的BroadcastReceiver机制——LocalBroadcastManager,其发送和接受的广播只能在本进程,相比传统的 registerBroadcastReceiver,其有着更高的安全性,与EventBus的相似度也更高 关于 EventBus 基础,请参考: EventBus 使用教程 高级用法 源码解析 这里结合源码,记录几个在 EventBus 学习和使用中值得思考和注意的地方: 注册 哪些方法会被注册 ? 多次注册同一对象会如何? 注册对象没有被 Subscribe 注解的方法会如何 ? 注册对象时父类中被 Subscribe 注解的方法会被注册吗? 如果 子类B 重写了 父类A 的方法 fun,注册子类B 的对象会发生什么?调用时会调用哪个类的方法? 上述问题

Flutter使用Dio拦截器实现token验证过期的功能

▼魔方 西西 提交于 2020-02-29 21:57:04
前言: 之前分享过在Android中使用Retrofit实现token失效刷新的处理方案,现在Flutter项目也有“token验证过期”的需求。刚开始我使用的是EventBus来通知弹出登录页面,但是发现在refresh token过期后并没有去登录,原因是EventBus需要在有生命周期的State状态中才能发送消息,在这里我构造了全局的上下文,以便弹出登录页面。所以接下来我简单总结一下在Flutter项目中如何实现自动刷新token并重发请求的拦截器功能,希望对大家有所帮助。 需求: 1.有两个token, 分别为access_token和refresh_Token, access_token的有效期为1小时,refresh_Token的有效期为7天; 2.如果access_token1个小时后过期了,服务器会返回401,此时客户端要根据刷新access_token的retrofit接口去重新请求新的access_token; 3.如果refresh_Token7天后也过期了,则要求跳到登录页面。 思路: 1.Dio实现网络请求 2.自定义token拦截器,实现token自动刷新并重发请求 3.RefreshToken过期,弹出登录页面。 实现的步骤: 1.配置Android目录的gradle依赖 dependencies { ... implementation 'de