之前在公众号的留言区和大家讨论时,有朋友说:我觉得Android提供的运行时权限API很好用呀,并没有觉得哪里使用起来麻烦。 真的是这样吗?我们来看一个具体的例子。...这种写法麻烦吗?这个就仁者见仁智者见智了,有些朋友可能觉得这也没多少行代码呀,有什么麻烦的。但我个人认为还是比较麻烦的,每次需要请求运行时权限时,我都会觉得很心累,不想写这么啰嗦的代码。...那么现在这种写法,是不是就将请求运行时权限的各种场景都考虑周全了呢?其实还没有,因为Android权限系统还提供了一种非常“恶心”的机制,叫拒绝并不再询问。...但是我们可以不考虑那剩下1%的用户吗?不可以,因为你们公司的测试就是那1%的用户,他们会进行这种傻X式的操作。...然而代码写到这里真的还算是简单吗?每次申请运行时权限,都要写这么长长的一段代码,你真的受得了吗?
*[contains(@resource-id,'action_back')]", action: click }maxDepth: 遍历的最大深度maxDepth: 2有时候我们的页面层次可能很深,每次遍历测试的需求可能不同...或者它的父节点等都为 false,这样自然是无法遍历到的。...除非设置了 App 的白名单页面需要在当前页不停滑动加载测试答:遍历完当前页后用 afterpage 参数设置滑动firstList 和 lastList 可以写多个表达式吗?他们是如何执行的?...答:AppCrawler 默认每次操作时会等待 500ms;通过 triggeraction 来解决需要等待的条件,xpath 为进度条,action 为 sleep 1stagLimit 会限制同属性但不同层级的元素吗...除非设置了 App 的白名单页面需要在当前页不停滑动加载测试答:遍历完当前页后用 afterpage 参数设置滑动firstList 和 lastList 可以写多个表达式吗?他们是如何执行的?
或者它的父节点等都为 false,这样自然是无法遍历到的。...某些动作需要输入 某些动作需要特定次数的操作 这样每次出现弹框都会被处理 测试中途碰到了账号密码输入框需要输入的可以提前在triggerActions中设置 triggerActions: - xpath...除非设置了 App 的白名单 页面需要在当前页不停滑动加载测试 答:遍历完当前页后用 afterpage 参数设置滑动 firstList 和 lastList 可以写多个表达式吗?...答:AppCrawler 默认每次操作时会等待 500ms;通过 triggeraction 来解决需要等待的条件,xpath 为进度条,action 为 sleep 1s tagLimit 会限制同属性但不同层级的元素吗...除非设置了 App 的白名单 页面需要在当前页不停滑动加载测试 答:遍历完当前页后用 afterpage 参数设置滑动 firstList 和 lastList 可以写多个表达式吗?
这里就是需要我们自己去创建一个堆栈,把 A、C 按顺序都放进去,所以 C 回退到 A,A 然后可以启动 B。...系统还可以利用这些信息通过TaskStackBuilder 合成 Activity 的返回栈。...这不是在侮辱Builder模式吗?...上面的方式,不管你App启动没,它都是会重新启动的,这个让人也有点儿不爽啊,那么为什么会每次都重新启动呢?看看启动的方法就知道咯。...增加测试 Demo 和 测试链接,新增通知跳转,方便大家测试。
int bkWidth;//黑色圆边框的宽度 private int rotate_fx=0;//旋转方向 0=顺时针 1=逆时针 private float rotateSD = 0.8f;//每次旋转的角度...因为我测试的时候发现 假如我用这个image直接把Bitmap.createScaledBitmap(image,xx,xx,false);的返回值赋给image的话,即使我在这行代码前去用image.getWidth...()和Image.getHeight(),返回的值都已经变成缩放后的大小,而不是原始大小,这让我感到很奇怪。...难道BItmap的getWidth和getHeight是异步的吗?希望知道的人帮我解答。...想要转的快一点就把每次旋转的角度调大一点,但是不能太大,否则效果很不好。一卡一卡的。这样就完成了这个自定义view,非常简单,但是我却折腾了好久,主要还是测量的时候不够细心。
设置的函数条件 若满足,返回 true;否则,返回 false 具体代码 Observable.just(1,2,3,4,5,6) .all(new Predicate...} }); 测试结果 因为所有数据都满足函数内条件 (每项数据<=10) ?...3.6 SequenceEqual() 作用 判定两个Observables需要发送的数据是否相同 若相同,返回 true;否则,返回 false 具体使用 Observable.sequenceEqual...3.7 contains() 作用 判断发送的数据中是否包含指定数据 若包含,返回 true;否则,返回 false 内部实现 = exists() 具体代码 Observable.just(...3.8 isEmpty() 作用 判断发送的数据是否为空 若为空,返回 true;否则,返回 false 具体代码 Observable.just(1,2,3,4,5,6)
; // 即 只有在点击事件在Window边界外才会返回true,一般情况都返回false,分析完毕 } /** * 分析4:mWindow.shouldCloseOnTouch...onInterceptTouchEvent(ev)) { // 分析1:ViewGroup每次事件分发时,都需调用onInterceptTouchEvent()询问是否拦截事件 // 判断值...返回false:不拦截(默认) * b....false 注册Touch事件监听 且 在onTouch()返回true 分析1:注册Touch事件监听 且 在onTouch()返回false 代码示例 // 1....这里需要特别注意的是:Activity、View都无该方法,仅ViewGroup特有。
; // 即 只有在点击事件在Window边界外才会返回true,一般情况都返回false,分析完毕 } /** * 分析4:mWindow.shouldCloseOnTouch...onInterceptTouchEvent(ev)) { // 分析1:ViewGroup每次事件分发时,都需调用onInterceptTouchEvent()询问是否拦截事件 // 判断值...返回false:不拦截(默认) * b....false 注册Touch事件监听 且 在onTouch()返回true 分析1:注册Touch事件监听 且 在onTouch()返回false 代码示例 // 1\....[image.png] 这里需要特别注意的是:Activity、View都无该方法,仅ViewGroup特有。
13.你觉得自动化测试最大的缺陷是什么? 1.不稳定 2.可靠性 3.不易维护 4.成本与收益 14.Webdriver可以用来做接口测试吗?...(提示:appnium 等) 4.Android 测试与 web 测试有什么区别?...④接口返回值各种验证(符合接口文档需求) ⑤了解接口实现逻辑,实现逻辑覆盖(语句/条件/分支/判定/…) ⑥接口能并发执行吗、安全吗,性能满足要求吗? ⑦采用工具或者自写代码来验证。...用一个全局变量来处理依赖的数据,比如登录后返回token,其它接口都需要这个token,那就用全局变量来传token参数。 14.依赖于第三方数据的接口如何进行测试?...对自动化结果的分析完成所有的自动化测试框架的设计和实现后,进行接口测试,然后集成到jenkins,配置定时执行,生成htML报表,查看测试通过率,查看接口的功能 每次发版时,进行回归测试,新功能开发未提测前
前言 Rxjava,由于其基于事件流的链式调用、逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎。...设置的函数条件 若满足,返回 true;否则,返回 false 具体代码 Observable.just(1,2,3,4,5,6) .all(new Predicate...} }); 测试结果 因为所有数据都满足函数内条件 (每项数据<=10) 3.2 takeWhile() 作用 判断发送的每项数据是否满足 设置函数条件...} }); 测试结果 3.7 contains() 作用 判断发送的数据中是否包含指定数据 若包含,返回 true;否则,返回...} }); 测试结果 因为发送的数据中包含4 3.8 isEmpty() 作用 判断发送的数据是否为空 若为空,返回 true;否则,返回 false
因为Autojs只在Android平台可以用,所以意味着我的自动点赞也在Android手机用。 思路 在我知道Autojs并大概翻看了它的Api文档之后,就差不多知道这东西能实现了。...问题4:你每次滑动要滑多少? 针对这些问题来看看我的解决方案。 实现 启动微信后可能微信停留在上次使用后的页面,没有朋友圈入口,所以我们得先返回朋友圈主界面。...,如果没找到点赞按钮或者已点赞返回false,做法是否继续的判断 var isSucceed = true; // 扫描出点赞评论按钮的位置,两个点的ARGB颜色为-11048043...最重要一条,不是所有的朋友圈都能点赞的,不是所有的人都能忍受你给他每条朋友圈都点赞的。...如果对软件测试有兴趣,想了解更多的测试知识,解决测试问题,以及入门指导, 帮你解决测试中遇到的困惑,我们这里有技术高手。
在一些需要后续变动的 View,都会使用一个变量将 View 存起来,就是为了避免每次都调用 findViewById()。...如果你对其原理有所了解,应该知道它其实是使用了「懒加载」,并不是每次调用 View ID,Kotlin 都帮我们去自动 findViewById(),而是用时获取,取到后就缓存下来,方便下次再用。...<TextView android:id="@+id/tvName" android:layout_width="wrap_content" android:layout_height...Fragment 生成的 _$_findCachedViewById() 方法,使用的是 getView().findViewById(),在 onCreateView() 中获取 getView() 会返回...例如在 Fragment 的 onCreateView() 中,一定不能操作布局内的控件吗?并不是,借助 inflate 的 View 对象就可以做到。
函数 START_REDELIVER_INTENT 返回值 二、 系统 Service 机制拉活 1、 Service 代码 2、 清单配置 3、启动服务 三、 测试效果 四、 系统 Service...方法 , 返回一个整型值 ; Service 中的 mStartCompatibility 标记默认是 false , 因此 onStartCommand 函数默认返回的整型值是 Service.START_STICKY...targetSdkVersion < Build.VERSION_CODES.ECLAIR , 即手机的 API Level 版本号是否小于 5 , 现在肯定没有版本号小于 5 的手机 , 该值默认是 false...Activity 亲和性 让该界面在一个独立的任务栈中 , 不要与本应用的其它任务栈放在一起 避免解除锁屏后 , 关闭 1 像素界面 , 将整个任务栈都唤醒...Google Pixel2 Android 10 可以拉活 ; 有相当大的一部分手机不支持该 Service 机制拉活 ; ( 是否支持 , 与系统有关 , 与手机厂商有关 ) 每次杀掉 Service
测试的app是葡萄浏览器com.qwh.grapebrowser,最终效果是运行后自动切换账号来签到。...第一次编写的确是各种懵逼,为啥子不动了,日志在哪里怎么看,每次都手动复制代码到手机好麻烦。。。 开发环境vscode 有vscode插件来开发很方便。...如果没有开发调试环境,我每次都要微信发送代码的消息,toast,再上app清空粘贴运行,累死。给hyb1996好评,相当不容易。...false } console.log('查找关闭按钮'); await_callback(function(){ if(className("android.widget.ImageView...需要注意的是代码中很多时候卡住不动都需要判断控件或者按钮是否存在,否者findOne()会一致做轮询。
从上面的表格可以看出,如果上次shouldShowRequestPermissionRationale( )返回了true,而这次调用该方法返回了false,则说明用户在上次勾选了“不再询问”。...最佳实践 上面的解决方案是可行的,但是每次申请权限需要依赖于上一次调用shouldShowRequestPermissionRationale( )方法的返回值,如果SharedPreferences被修改或者被删除...( )方法,如果此时返回false则说明用户勾选了“不再询问”。...shouldShowRequestPermissionRationale( )返回false 流程图 ?...还能再优化吗? 拜读了EasyPermissions后,我做了一些微小的工作,简单的封装可以减少很多样板代码。
的都保持对整个团队透明。...* 所有人遵循相同的构建顺序,采用同一套构建脚本 * 每次构建的时候都执行同一套脚本 步骤 2:持续测试 持续测试是快速的通过自动化的手段收集软件健康状况的方法。...单元测试应该在每次提交时触发执行,其它的测试根据运行时间长短和重要程度可以每次提交触发执行或者定时周期执行。 * 将运行较快的测试优先执行。 * 让功能测试能够重复执行。否则维护成本太高,会被舍弃。...若是后台数据导致不可重复,可以将数据抽象成为数据集,在每次运行前进行重置。 * 书写测试时每一个assert只做一种判断,这样可以明确每次测试的目的,并且可以快速定位测试失败愿意。...如果说只给所有人发一封邮件说明项目状况,那必然是告诉所有人“CI所有步骤是否都返回正确?”。这样一个反馈,包含了编译正确,所有测试通过,安装包已经准备完毕等重要信息。
(issues 600多算活跃吗┑( ̄Д  ̄)┍) 集成工作还是有定的工作量的,它的DEMO肯定满足不了欲求不满的设计狮和产品汪的,这里我们不跑分,不打广告,不讲原理,只求站在巨人的肩膀上学(cao)...监听的回调接口里,大部分大家都耳目能详吧,没听过也没关系,都写上就对了,但是最主要需要关注的两个,一个是通过setOnVideoSizeChangedListener拿到视频宽和高,这是我们后续正常显示视频的依靠之一...((ノO益O)ノ彡┻━┻亲生的啊) 这里的接口主要是把当前播放的视频状态和信息到返回到逻辑播放器中。 ?...深夜码字不易,不知道为什么每次这个时候老婆的意见很大啊。...,如果已经缓存过的这里会返回一个本地文件路径。
project.png 4、遇到的问题 别看一个简单的开始,遇到的问题太多,多的我都记不清有哪些了,反正佛挡杀佛、鬼挡杀鬼,一切问题直接干就得了; 问题1:导航栏相关: 系统自带的导航栏感觉好高,...看起来怪怪的,而且在Andorid点击返回按钮时,你还下面提示个“返回”,感觉很不爽。...dio.png 第一感觉,好爽,不用自己处理转化数据了;但是按照相关参数设置后,我测试接口返回的还是字符串,还是要自己去json转化。...问题4:Tab切换页面,切回原来的页面还是重新创建: bottomNavigationBar: BottomNavigationBar 每次来回切换,网络请求都要来一次,这样真的不好。...还有说原生不香吗,Flutter什么Flutter?(这也我无语了,我是要跨平台的,你还给说谁香不香,难道我不知道谁香吗?我们就是要跨平台你说怎么整吧?)
MVP则通常用来将View业务层与Model层分离开来,两者结合起来可轻松实现业务解耦、线程控制、单元测试等等强大功能 内容大体框架: Android开发框架的选择 如何一步步搭建MVP分层框架 使用RxJava...类似的应用场景其实有非常非常多,这里我们就看到了使用接口解耦的一个好处了,不仅把业务层和展示层解耦开来,还把Android开发同其它的一切的外部数据依赖都解耦开来。...在实际用的过程中有遇到什么问题吗 是的,我们已经使用了这个架构。...每次都去判断activity状态吗? Rx不能解决内存泄漏的问题,前面2.3.7问题都提到了,通常的做法是在activity层销毁的时候进行解绑。...Q15:rxJava使用lamaba的语法格式的话貌似会将代码缩减很多,请问嘉宾有试过这种方式吗?这个对项目的性能会有什么影响吗?
我们都知道如果给一个控件注册了touch事件,每次点击它的时候都会触发一系列的ACTION_DOWN,ACTION_MOVE,ACTION_UP等事件。...这不是在自相矛盾吗?前面的例子中,明明在onTouch事件里面返回了false,ACTION_DOWN和ACTION_UP不是都得到执行了吗?...由于我们点击了按钮,就会进入到第14行这个if判断的内部,然后你会发现,不管当前的action是什么,最终都一定会走到第89行,返回一个true。 是不是有一种被欺骗的感觉?...因为ImageView和按钮不同,它是默认不可点击的,因此在onTouchEvent的第14行判断时无法进入到if的内部,直接跳到第91行返回了false,也就导致后面其它的action都无法执行了。...第二,在布局文件里面给ImageView增加一个android:clickable="true"的属性,这样ImageView变成可点击的之后,即使在onTouch里返回了false,ACTION_DOWN
领取专属 10元无门槛券
手把手带您无忧上云