在Android中,有些场景需要使用代码来模拟人的操作,比如微信自动抢红包、UI测试等都需要模拟实现点击事件(Click)、触摸事件(Touch)、键盘事件(KeyBoard)等。那么,有没有现成的方案可以实现呢?答案当然是肯定的啦,往下看。
经过调研发现,给系统模拟注入输入事件有如下几种方式:
一、使用shell命令
使用android自带的adb shell,里面自带一个input工具,使用方法如下:
1 | adb shell #进入系统 |
select * from table_name where id in ()的时候,MySQL会自动按主键自增排序,要是按IN中给定的顺序来取,如何实现呢?
比如下面这个查询结果,mysql会默认使用主键id的ASC自增排序结果集:
先给大家看一下这个主题的颜值:
使用Picasso加载SD卡图片的时候,Picasso也会对该图片进行缓存。所以如果该图片即使已经变了,Picasso在加载时会仍然使用缓存,而不更新图片。
我们都知道图片缓存使用的是Map键值对存储的,这里的Key就是加载的图片的Url,所以如果我们使用相同的ImageUrl去加载图片的话,如果使用了缓存,Picasso会直接读取缓存的内容,而不是从SD卡、或者网络Http中重新加载。
试了很多网上推荐的方法均不见起效,最后使用了下面这种策略,也就是加载图片时直接跳过缓存
1 | Picasso.with(getContext()).load(imageUrl).memoryPolicy(MemoryPolicy.NO_CACHE).into(image); |
注意其中的.memoryPolicy(MemoryPolicy.NO_CACHE)即是关键代码,其中
ps:此处的方法并不是真正的清理缓存,而是跳过缓存直接从源头获取。
网上有几种错误的方法如下,经验证均不起效:
1、Picasso.with(getActivity()).invalidate(file);
2、Picasso.with(getActivity()).load(url).skipMemoryCache().into(image);
最后还是在StackOverFlow的Clear Cache memory of Picasso查到了如上的解决办法。
我们都知道,每个Activity都有taskAffinity属性,这个属性指出了它希望进入的Task。
如果一个Activity没有显式的指明该 Activity的taskAffinity,那么它的这个属性就等于Application指明的taskAffinity,如果 Application也没有指明,那么该taskAffinity的值就等于包名。而Task也有自己的affinity属性,它的值等于它的根 Activity的taskAffinity的值。
一、查看task栈情况
在cmd命令行里或者Android Studio中的Terminal里敲入如下命令:1
adb shell dumpsys activity
然后会出现很长一段详细信息,滚到中间的地方,会看到Task栈的状态如下:
这次我们来了解一下面向对象的三大基石封装,继承、多态,然后大致对比一下继承和多态的区别。
封装是实现面向对象程序设计的第一步,封装就是将数据或函数等集合在一个个的单元中(我们称之为类)。被封装的对象通常被称为抽象数据类型。
封装的意义:
封装的意义在于保护或者防止代码(数据)被我们无意中破坏。在面向对象程序设计中数据被看作是一个中心的元素并且和使用它的函数结合的很密切,从而保护它不被其它的函数意外的修改。封装提供了一个有效的途径来保护数据不被意外的破坏。相比我们将数据(用域来实现)在程序中定义为公用的(public)我们将它们(fields)定义为私有的(privat)在很多方面会更好。
Java有四种访问权限,其中三种有访问权限修饰符,分别为private,public和protected,还有一种不带任何修饰符: