![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
一步一个问题
tian2342
这个作者很懒,什么都没留下…
展开
-
TextView设置Marqueue宽度足够时也发生滚动的原因
需求在自定义ViewGroup时,其中包含一个TextView,设置Marqueue,当文本长度最大宽度时,开始滚动显示。问题最开始使用固定宽度为最大宽度,然后文字居中,无问题。后来由于需求变更,加入了drawable,所以宽度调整为自适应,文字居左。这时候问题出现了。文字一直会滚动,哪怕文字很短,已经展示完全的时候分析首先确认问题原因是居左、drawable及drawable padding、自适应宽度导致的,因为就修改了这几个地方。依次回调居左、drawable及drawable pad原创 2022-02-25 15:21:29 · 789 阅读 · 0 评论 -
Volatile关键字对于double、long的影响
缘由今天被问到一个问题,太久没看了,记混了,特此记录一下。线程安全三大特性总所众知,多线程安全主要变现为三个特性:可见性、原子性、有序性。Volatile而说到可见性,就不得吧提到Volatile这个关键词。对于大部分基础数据类型,单独的读写操作都是具有原子性的,Volatile保证了其可见性。但是double、long这两种类型的读写则有所不同。double、long本身有64位宽,对于Java虚拟机,目前是将32位的读写作为原子操作,所以double和long的读写需要分为两次,每次读写原创 2022-01-24 14:45:38 · 1268 阅读 · 0 评论 -
float的精度和取值范围
float的精度和取值范围转载 2021-12-10 17:51:37 · 257 阅读 · 0 评论 -
commitNowAllowingStateLoss导致的FragmentManager is already executing transactions
commitNowAllowingStateLoss导致的FragmentManager is already executing transactionsfragment版本1.3.6异常日志Fatal Exception: java.lang.IllegalStateExceptionFragmentManager is already executing transactionsandroidx.fragment.app.FragmentManager.ensureExecReady (F原创 2021-12-01 14:16:38 · 1730 阅读 · 0 评论 -
雷电模拟器4.0无法设置代理的问题
https://www.jianshu.com/p/6798163aac4a4.0在系统设置中设置代理没用添加:adb shell settings put global http_proxy ip:端口移除:adb shell settings delete global http_proxy&adb shell settings delete global global_http_proxy_host&adb shell settings delete global globa转载 2021-06-26 12:19:00 · 7713 阅读 · 0 评论 -
xlwings出现‘无效类字符串’问题
原因:不在代码上,而在于打开excel文件的软件上。默认打开excel操作excel文件,我就是没安装Excel出现的这个问题。我的电脑是Windows,其他系统可以尝试同样的方案。方案方案1:安装Office Excel后解决。方案2:如果安装了wps,修改打开excel的软件。解决:修改_xlwindows.py文件(可以用everything进行搜索)python安装目录下找到以上提示中的_xlwindows.py,备份为_xlwindows.py.bak,修然修改_xlwindo原创 2021-05-23 14:58:41 · 2527 阅读 · 0 评论 -
MotionLayout回调中设置visible无效的问题
setTransitionListener中设置原本gone的view为visible,view仍旧不可见。必须post中设置。具体原因暂未可知。clRoot.setTransitionListener(new TransitionAdapter() { @Override public void onTransitionChange(MotionLayout motionLayout, int startId, int endId, float progress) {原创 2021-03-24 14:11:39 · 707 阅读 · 0 评论 -
关于TextView设置Marquee不滚动问题
1、固定高度导致的已设置 android:singleLine="true" android:ellipsize="marquee" android:marqueeRepeatLimit="marquee_forever"但是不生效。。。 private void startMarquee() { // Do not ellipsize EditText if (getKeyListener() != null) return原创 2021-02-24 15:47:55 · 1626 阅读 · 0 评论 -
关于focusableInTouchMode不生效的问题
focusableInTouchMode 对于一个拥有触摸屏功能的设备而言, 一旦用户用手点击屏幕, 设备会立刻进入touch mode。这时候被点击的控件只有isFocusableInTouchMode()为true的时候才会获得focus,比如EditText控件。 其他可以触摸的控件比如Button(其isFocusableInTouchMode默认为false), 当被点击的时候不会获取焦点,它们只是简单地执行onClick事件而已。Android touch mode和focu原创 2021-02-04 17:29:12 · 1228 阅读 · 0 评论 -
关于AndroidStudio自带模拟器无法联网
之前手机版模拟器都没问题,但是不知道为什么,最近新建的Tv版模拟器似乎不能联网,尝试多次发现了以下解决方案:1.命令行打开你的 sdk 目录中的 emulator 文件夹 按住 shift 键同时右击空白处 选择在此处打开命令窗口然后输入 emulator @你模拟器的名字 -dns-server 8.8.8.8,114.114.114.1142.修改“网络和共享中心“--》指定网络--》属性--》internet版本协议4--》修改DNS地址为114.114.114.114 和8.8.8.8原创 2021-02-03 10:08:26 · 1153 阅读 · 0 评论 -
不改变view绘制顺序的情况下改变事件分发的顺序
Q:同一个层级的View 绘制顺序出现变化后, 是不是事件接收的顺序也出现变化了?能不能做到同一个层级下的A和B B在A上面, 但是A先接收事件?A: override fun getChildDrawingOrder(childCount: Int, drawingPosition: Int): Int { return childCount-1-drawingPosition; // return super.getChildDrawingOrder原创 2020-11-13 17:01:39 · 104 阅读 · 0 评论 -
关于Windows端口没被占用提示An attempt was made to access a socket in a way forbidden by its access permissions
问题某软件启动日志一直提示:An attempt was made to access a socket in a way forbidden by its access permissions。我百度发现全是“netstat -aon|findstr “49157””这种,但是我试了发现没有进程占用。原因后来好不容易找到了TCP动态端口起始端口,发现很多人说改这个可以解决问题。然后查到Windows Vista 和 Windows Server 2008 中,TCP/IP 默认动态端口范围已更改原创 2020-10-06 00:20:33 · 25962 阅读 · 7 评论 -
关于Android Studio中Kotlin顶级函数查看源码出现“compiled code”的解决方法
问题近日在查看Kotlin Flow相关源码的时候,发现很多操作符的源码点进去都会点到Class文件,对应的方法实现都是“compiled code”,看不到具体源码。点击右上角的几个选项一点用都没。。。。出现这种现象的函数一般是Kotlin的顶级扩展函数,但是有些顶级扩展函数又可以直接点击方法名导航到源码的地方去,不知道是什么差异导致的这两种不同的跳转。如果有人知道,希望能留言告知。解决方案查找调用的地方(源码中的调用,或者注释中的调用[方法名],不要选你代码中的调用,不然又回到了问题的起原创 2020-08-28 15:57:27 · 3923 阅读 · 2 评论 -
Java内部类是如何获取外部类的private属性
细话Java:"失效"的private修饰符原创 2020-08-26 15:51:41 · 472 阅读 · 0 评论 -
关于Kotlin中“协程一种轻量级线程”的解释
文章目录前言问题在哪协程是什么Kt协程和线程协程与线程结论前言相信很多人都听过或者看到过这样一种说法“协程是一种轻量级的线程”。以下文档中都有类似的描述:Kotlin中文网-协程-基础-第一个协程程序本质上,协程是轻量级的线程。Kotlin英文官网对应位置Essentially, coroutines are light-weight threads.显然,翻译很准确问题在哪相信很多人了解过Kt协程都看过上线官方的这个描述。因而很多人觉得协程比线程牛逼,因为是”轻量级原创 2020-08-17 17:03:13 · 1126 阅读 · 0 评论 -
关于Gson导致默认值丢失的问题分析
起因:一开始我以为gson是通过调用对应参数的构造,没有对应到默认值是因为kt的data class默认没有生成重载方法,后来自己试了一下发现加不加注解都无法取到默认值。断点看了看源码才发现原因:因为gson是直接调用默认构造,然后通过反射设置属性值的。而kotlin的默认值并不是直接设置在属性上的,而是在差异个数的构造方法上所以导致了默认值无效。解决方法:如图1中所示,使用Moshi是没问题的,我只测试了注解的方法是没问题的,原因是因为注解会生成对应的adapter,内部使用的是原创 2020-08-13 16:05:58 · 1635 阅读 · 1 评论 -
同步异步与阻塞非阻塞的区别
问题源于知乎 怎样理解阻塞非阻塞与同步异步的区别?以下乃个人见解,如有不对之处,欢迎指出讨论。概念同步异步是形容结果的通知形式。通知形式!主动/被动。阻塞和非阻塞是形容客户端在接受到结果之前的自身状态。一个是状态,一个是形式。组合毫无疑问可以进行组合。2*2=4种结果。我们最常用的两种组合:同步阻塞:网络请求的同步形式。主动获取结果,并且获取到结果前其他同线程操作不会执行。异步非阻塞:网络请求的异步形式。结果靠通知,并且发出请求后就执行其他操作去了。比较不长见的两种形式:1.同步非阻原创 2020-05-27 19:40:18 · 225 阅读 · 0 评论 -
小米手机第一次使用SSR提示“创建一个XXX链接”,无法点击确定
原因:有软件在屏幕上层挡住了(为啥就tm挡住了确定按钮?取消按钮可以点)在之前是因为"个性主题"。后来我更新到了MIUI12没有这个软件了,一直没找到是啥软件影响的。只能重启后马上点击,趁其他软件还在启动,马上点击确定,可以解决这个问题。...原创 2020-05-08 16:11:31 · 5000 阅读 · 0 评论 -
instagram、FaceBook分享
/** * 动态 * https://developers.facebook.com/docs/instagram/sharing-to-feed * 快拍 * https://developers.facebook.com/docs/instagram/sharing-to-stories */fun Activity.shareIns( path: String) {...原创 2020-02-27 09:37:00 · 1133 阅读 · 0 评论 -
Facebook打开,跳转个人首页、动态方式
1. 启动facebook,如果已经启动,就切换到前台fun startFacebook(context: Context) { val pkgName = "com.facebook.katana" var intent=context.packageManager.getLaunchIntentForPackage(pkgName); if (intent==nu...原创 2020-02-27 09:34:19 · 8832 阅读 · 0 评论 -
通过代理解决github项目Clone过慢的问题
host或者码云啥的都各有自己的缺点:host:目标ip变了需要多次更改,不能一次设置一直生效码云:码云本身克隆github也很慢本文主要记录通过代理的方式进行配置,如果不懂或不具备这个前提请自觉点击x退出。方案一:下载:代理方式选择全局,然后直接down方案二:clone:设置代理:git config --global http.proxy 'socks5://127...原创 2019-12-19 17:43:26 · 647 阅读 · 3 评论 -
google应用内支付接入说明
介绍google应用内支付主要用于海外应用的内购。主要分为一次性产品、订阅和奖励产品,本文主要介绍订阅和一次性产品,其他内容可以参考google开发文档。订阅类比国内各种产品的会员,每隔一定周期向用户收费。我负责开发的应用也主要采用这种收费模式,分为按月和按年两种付费模式。一次性购买类比游戏买皮肤这种一次性买断商品。最开始我们也使用了这种方式,后来被舍弃了,改为了按年订阅。试用期这两...原创 2019-11-15 23:15:31 · 2768 阅读 · 0 评论 -
关于使用aspectjx出现 java.util.zip.ZipException: zip file is empty
首先在demo中是没有问题的,然后集成到正式项目中就报了这个错,反复对比了好几次配置都一样的(有种情况是集成了但是不使用也会报错没找到类xxx)。先Googlegoogle发现该项目的issues里面也有很多人遇到这个问题。https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx/issues/101h...原创 2019-10-23 11:52:51 · 3482 阅读 · 1 评论 -
记HashMap中的tableSizeFor(寻找最小二次幂算法)
/** * Returns a power of two size for the given target capacity. */ static final int tableSizeFor(int cap) { int n = cap - 1; n |= n >>> 1; n |= n &...原创 2019-09-20 21:45:18 · 382 阅读 · 3 评论 -
View的绘制流程
View的事件分发机制在上一篇文章中我简单的梳理了一下View的触摸事件分发,有兴趣的可以看看,帮老弟我看看有啥不足之处,留言我改,共同进步。即使不看那篇文章相信大家也都知道View主要包含View和ViewGroup(当然,其实ViewGroup也是View的一种)。在日常开发中很多时候我们仅仅依靠系统自带的控件是无法达到设计师的要求的,这个时候我们通常都需要用到自定义控件。自定义控件一般有...原创 2019-01-30 23:40:18 · 127 阅读 · 0 评论 -
关于ThreadLocal的探究
起因ThreadLocal,第一次看到这个还以为是Thread的一个子类,经常在各种面试题中看到它的身影,就去仔细看了一下,整理成文档写下来,方便以后复习,同时也方便有需要的人查阅,如有错误之处,请指出,TKS。用途synchronized,这个单词相信大家都不会感到陌生,因为这是Java的重量级同步锁,用来解决多线程变量同步问题,但是效率并不高,因为会有阻塞等待,是典型的时间换空间算...原创 2018-07-19 14:10:00 · 161 阅读 · 0 评论 -
使用ffmpeg拼接两端音频第二段自动跳过无法播放的问题解决方案
搞了几天,编译调试乱七八糟的问题,终于解决了两种拼接方式 ffmpeg -i concat:123.mp3|124.mp3 -acodec copy output.mp3 ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp3//推荐mylist.txt:file '123.mp3'file '234.mp3'...原创 2019-08-12 15:22:57 · 1480 阅读 · 0 评论 -
约瑟夫环问题-基础版(数学归纳法)
问题:n个人围成一圈,从1开始报数,报到m的人死,然后后面的人接着报数。。。直到最后剩下一个人,求最后这个人的初始编号是多少可以根据游戏进程进行正向模拟,但是我觉得这种方式是最自然的思考模式,肯定不是最优算法。实际上:确实不是最优。更优的算法是根据结果进行倒推:首先为所有人编号:初始号:0 1 2 3 4 5 ...原创 2019-08-19 22:43:12 · 594 阅读 · 0 评论 -
Android消息机制
学习的起因的是因为看面经,学习的结果是快乐~消息机制,听着感觉很高端,实际上就是Handler、Looper、MessageQueue三人组(别问我Message去哪了)。第一步Looper.prepare()主线程在ActivityThread中调用Looper.prepareMainLooper() private static void prepare(boolean...原创 2018-08-24 18:01:42 · 107 阅读 · 0 评论 -
Thread和Runnable探究
说到Thread,我们通常会想到常用的实现方式,继承Thread和实现Runnable然后扔给Thread(后面发现可以实现Callable扔给Executors,补上),那么Thread和Runnable有什么关系呢?我就这么一想,然后就去看了下源码,实际上也没啥用,只是遇到不懂的我就想去看看能不能找到答案,多懂一点总是好的。Runnable是个接口,就一个run方法。Thread实...原创 2018-08-17 10:44:05 · 157 阅读 · 0 评论 -
HashSet是如何去重的
忘了是在哪看到这个问题的了,用过Set的人都知道Set是没有重复的集合,那么是如何保证没有重复的呢?知其然知其所以然。其实看看源码很简单 public boolean add(E e) { return map.put(e, PRESENT)==null; }map是一个HashMap的实例,Set偷偷的用了HashMap的put方法,然而HashMa...原创 2018-08-07 13:11:08 · 3503 阅读 · 0 评论 -
布隆过滤器
昨天做算法题看到的,以前听都没听过,布隆?扛着门板的那个?哈哈。布隆过滤器常用来做大数据量的筛选工作,就是从很大的数据集合中判断一条数据是否属于该集合。如果该集合数据量够小我们一般采用数据结构把这些数据都存起来,然后来一条数据我们就去集合中查询是否有这条数据;但是当数据量达到一定程度时,比如几个G的数据量你再这样存怕是要把内存撑爆哟,这个时候就可以采用布隆过滤器,前提是这种过滤允许少量误差。...原创 2018-08-09 14:05:05 · 199 阅读 · 0 评论 -
CAS和ABA问题
之前准备学习AQS,但是看了好几遍别人的讲解还是一知半解,所以暂时看点其他的。CASCAS,之前也有看到过,不过没有深入的了解,后面阅读CAS的源码的时候注意到了这个东西。CAS:就是比较(C)然后(A)设值(S)。看到很多地方都说的交换,但我感觉就是单方面设值(可能是我没理解到,希望知道的人留言解惑,谢谢)。该方法通常有三个参数:第一个参数是偏移值还是内存值来着,反正就是确定原值地址...原创 2018-07-26 12:46:25 · 516 阅读 · 0 评论 -
hashCode和equals方法
equals方法用来比较两个对象是否相等。hashCode和equals方法存在着以下联系:equals的返回值能推导出hashCode的值是否相等,反之无法进行推导。另外关于"equals返回true,则hashCode必须相等"这一说法是一个规定,是保证Hash相关数据结构和方法正常运行的前提,这就是为什么“重写equals方法必须重写hashCode方法”的原因,当然你也可以不重...原创 2018-07-18 13:46:10 · 178 阅读 · 0 评论 -
关于Integer比较相等的问题
作为一个菜鸡,记下来免得忘了。1.通过new出来的两个Integer对象比较时,==是比较的对象地址,等同于一般对象比较的==,equals则会比较其内部的int值是否相等。因为内部重写了equals方法:public boolean equals(Object obj) { if (obj instanceof Integer) { return value == ((I...原创 2018-07-04 15:33:08 · 7794 阅读 · 3 评论 -
记:海康Unable to load library '../lib/HCNetSDK'
我是win7 641.sdk32位 jdk就得32位2.../../lib\\PlayCtrl 路径要\\原创 2017-09-18 10:30:55 · 11839 阅读 · 1 评论 -
关于java堆和栈
栈:存取速度快速,效率高,存取的对象是基本数据类型和引用对象的指针变量必须有明确的生命周期和大小,在作用域之外自动释放堆:存取速度慢,效率不高,存取的对象是new创建的对象和数组(数组不是也是引用对象的对象吗)动态分配内存,不需要明确的生命周期和大小,不被任何对象引用之后被标记为可回收,在之后的不确定时间内被垃圾回收器回收Java堆.栈和常量池 笔记原创 2016-11-22 14:28:17 · 252 阅读 · 0 评论 -
关于float计算结果不精确问题
参考文章:Java Float类型 减法运算时精度丢失问题今天参加面试,面试官问到一个问题,两个float相除怎么证明是否整除,我提出了几个方法,他提示我精度有可能会丢失,然后我就懵逼了,回来搜索了一下发现float和double都是用来科学计算的float和double的底层实现是二进制的。十进制中的一个有限位数小数,转换成二进制就不一定是有限位数了,一旦位数超过的float和doubl原创 2016-09-21 23:00:44 · 1792 阅读 · 0 评论 -
关于HandlerThread和IntentService
HandlerThread和IntentService放在一起一方面是因为这两个东西都只有一丢丢东西,另一方面两个还有点关系。HandlerThread其实就是个Thread,然后内部给你创建了Looper和MessageQueue,然后暴露一个接口给外部,让外部能拿到内部的looper,然后创建Handler往线程里面发消息。我的感觉就是简化版的主线程,但是同样的也不适合做长时间任务...原创 2018-09-05 13:46:16 · 179 阅读 · 0 评论 -
dialog中hide、dismiss、cancel方法的区别
主要我之前用的时候不知道dismiss和cancel有啥区别。。。然后今天想起来了就去查了一下,顺便记下来备忘。dismiss:大概就是删除视图,调用Onstop回调,并把mShowing置为false。 void dismissDialog() { if (mDecor == null || !mShowing) { return; ...原创 2018-09-07 17:31:33 · 6051 阅读 · 0 评论