Android ANR日志分析

ANR介绍和类型 当Android应用程序的UI线程被阻塞太久时,会触发一个“应用程序没有响应”(ANR)错误。如果app在前台,系统会向用户显示一个对话框,如图1所示。ANR对话框为用户提供了强制退出应用程序的机会。 https://developer.android.com/topic/performance/vitals/anr 出现ANR的一般有以下几种类型:搜索ANR in 可以查看抛出ANR日志线程 1: KeyDispatchTimeout input事件在5S内没有处理完成发生了ANR。 logcat日志关键字:Reason: Input dispatching timed out (Waiting because the focused window has not finished processing the input events that were previously delivered to it.) 2:

阅读全文...

this view is not available until indices are built 解决方案

在jetbrains插件开发过程中经常遇到下面这个问题,启动IDE后项目需要同步,插件需要等待项目同步完成才能显示,明明插件和项目同步没有关系的。 this view is not available until indices are built 怎么去解决这个问题呢。在jetbrains论坛找到了解决方案。实现ToolWindowFactory接口的同时还需要实现DumbAware接口,这样就不需要等项目同步完成了。 public class DevToolFactory implements ToolWindowFactory, DumbAware { @Override public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindow toolWindow) { MainComponent.getInstance(project).initView(toolWindow); } } 参考文档 Keeping tool window enabled while IDEA in "dumb" mode

阅读全文...

scrapy入门教程

安装和入门案例 腾讯云主机Python3环境安装Scrapy爬虫框架过程及常见错误 scrapy 爬虫框架入门案例详解 常见问题 No module named _util pip install Twisted==16.4.1 参考文档 Scrapy连接到各类数据库(SQLite,Mysql,Mongodb,Redis)

阅读全文...

Java代理模式-动态代理

描述 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。简单的说就是,我们在访问实际对象时,是通过代理对象来访问的,代理模式就是在访问实际对象时引入一定程度的间接性,因为这种间接性,可以附加多种用途。 Example // Person.java public interface Person { void eat(String food); } // Main.java public class Man implements Person { private String name; public Man(String name) { this.name = name; } @Override public void eat(String

阅读全文...

Git删除单个文件所有记录

Github上经常出现传输了错误文件的问题,如密码手机等隐私内容,需要彻底删除所有提交记录,用下面这段代码就可以了。 git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch 删除文件的相对路径' --prune-empty --tag-name-filter cat -- --all git push origin master --force rm -rf .git/refs/original/ git reflog expire --expire=now --all git gc --prune=now git gc --aggressive --prune=now 不记得这段代码从哪复制了,感谢原作者的无私奉献,(*/ω\*)~

阅读全文...

[转]Java volatile总结

内存模型的相关概念 计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里面就有了高速缓存。也就是,当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进行计算时就可以直接从它的高速缓存读取数据和向其中写入数据,当运算结束之后,再将高速缓存中的数据刷新到主存当中。 举个简单的例子,比如下面的这段代码:i = i + 1;当线程执行这个语句时,会先从主存当中读取i的值,然后复制一份到高速缓存当中,然后CPU执行指令对i进行加1操作,然后将数据写入高速缓存,最后将高速缓存中i最新的值刷新到主存当中。 这个代码在单线程中运行是没有任何问题的,但是在多线程中运行就会有问题了。在多核CPU中,每条线程可能运行于不同的CPU中,因此每个线程运行时有自己的高速缓存(对单核CPU来说,其实也会出现这种问题,只不过是以线程调度的形式来分别执行的)。本文我们以多核CPU为例。比如同时有2个线程执行这段代码,假如初始时i的值为0,那么我们希望两个线程执行完之后i的值变为2。但是事实会是这样吗? 可能存在下面一种情况:初始时,两个线程分别读取i的值存入各自所在的CPU的高速缓存当中,然后线程1进行加1操作,然后把i的最新值1写入到内存。此时线程2的高速缓存当中i的值还是0,

阅读全文...

Mac Intellij IDEA 卡顿解决方案

编辑 idea.vmoptions 文件目录在 应用程序 -> IDEA显示包内容找到 -> Contents -> bin -> idea.vmoptions 替换为如下内容: -Xms1024m -Xmx2048m -XX:ReservedCodeCacheSize=1024m -XX:+UseCompressedOops -Dfile.encoding=UTF-8 -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Xverify:none -XX:

阅读全文...

android VectorDrawable 转png图片

Android上使用svg图片可以利用VectorDrawable,不仅体积小而且是矢量图,目前已经成为了开发app的不二之选。下面是一个VectorDrawable例子: <?xml version="1.0" encoding="utf-8"?> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="26dp" android:width="26dp" android:viewportWidth="26" android:viewportHeight="26"> <path android:fillColor="#ee4f4f" android:pathData="M15.746,21.714C15.036,22.541

阅读全文...

centos关闭root登录

每次用ssh登录服务器都有如下的提示: There were xx failed login attempts since the last successful login. 有人在用错误的密码在尝试登录服务器,想想就有点方。网上的解决方案是用ssh密钥登录,关闭root的方式登录。下面记录下操作方式 配置密钥登录 腾讯云管理后台可以选择加载密钥,不过得先关机。创建密钥后就会下载得到一个密钥文件(后续需要这个登录) 创建新用户 adduser user1 passwd user1 配置服务器关闭ROOT登录 vim /etc/ssh/sshd_config 查找“#PermitRootLogin yes”,将前面的“#”去掉,短尾“yes”改为“no”,并保存文件。 # PermitRootLogin no,千万不要修改成No,linux是严格区分大小写的 # 重启服务 service sshd

阅读全文...

小程序语音MP3转WAV

前言 小程序录制的语音格式是aar和mp3, 如果想语音文本识别,像百度语音等SDK要求的都是无损原声pcm格式(wav仅仅是pcm的封装),下面提供两种将mp3转换为wav的方法 0x1通过第三方接口 <?php $url = 'http://server.com/sound.mp3'; $data = json_decode(file_get_contents('http://api.rest7.com/v1/sound_convert.php?url=' . $url . '&format=wav')); if (@$data->success !== 1) { die('Failed'); } $wave = file_get_contents($data->file)

阅读全文...