1. 前言
最近一直在使用 Markdown 写文档,但是其中贴图真是太麻烦了,于是就想着能不能有什么好的方法来解决,Google,发现了网上已经有一些前辈写好的教程了,我主要参考了这两篇博客的内容:
但是在直接使用时并不是那么一帆风顺,遇到了各种不成功的情況,然后我就自己调试,摸索了一下,终于成功了。现在将大概的过程记录一下,希望能提供一下参考价值,不至于他人遇到同样的坑。
路漫漫其修远兮,吾将上下而求索
最近一直在使用 Markdown 写文档,但是其中贴图真是太麻烦了,于是就想着能不能有什么好的方法来解决,Google,发现了网上已经有一些前辈写好的教程了,我主要参考了这两篇博客的内容:
但是在直接使用时并不是那么一帆风顺,遇到了各种不成功的情況,然后我就自己调试,摸索了一下,终于成功了。现在将大概的过程记录一下,希望能提供一下参考价值,不至于他人遇到同样的坑。
(1) 所有 Touch
事件都被封装成 MotionEvent
对象,包括 Touch的位置、时间、历史记录以及第几个手指(多指触摸)等。
(2) 事件类型分为: ACTION_DOWN
,ACTION_UP
,ACTION_MOVE
,ACTION_POINTER_DOWN
,ACTION_POINTER_UP
,ACTION_CANCEL
,每个事件都是以ACTION_DOWN
开始,ACTION_UP
结束的。
(3) 对事件的处理包括三类:
dispatchTouchEvent()
onInterceptTouchEvent()
onTouchEvent()
和onTouchListener()
,onTouchListener()
优先于 onTouchEvent()
对事件进行消费。强引用是我们最最常见的一种,一般我们在代码中直接通过new出来的对象等,都是强引用,强引用只要存在没有被销毁,内存就不会被系统回收。我们以生成Bitmap为例如下:
|
|
生成 Bitmap 代码:
每当我们app测试的时候,测试人员总是对我们说这里崩溃了,那里挂掉了!我们只能默默接受,然后尝试着重现bug,更可悲的是有时候bug很难复现,为了解决这种现状所以我们要尝试这建立一个自己的bug日志系统。
Java为我们提供了一个机制,用来捕获并处理在一个线程对象中抛出的未检测异常,以避免程序终止。我们可以通过UncaughtExceptionHandler
来实现这种机制。
Android提供了GestureDetector类来处理一些常用的手势操作,比如说 onLongPress,onFling 等。但这里不使用GestureDetector,而是直接在自定义View重写的onTouchEvent中进行处理。
欲实现的效果是:当手机按住屏幕时,如果在指定的时间内没有移动(如500毫秒),那么进入长按模式,此时手指在屏幕上移动都算作长按模式。如果手机按住屏幕就立马移动,那么就算作移动模式。
MotionEvent 类提供了记录当前坐标的函数(getX(),getY())和当前事件产生的时间的函数(getEventTime())以及按下时间(getDowntime())。MotionEvent同时也提供了当前的操作类型,按下(ACTION_DOWN)、 移动 (ACTION_MOVE)、弹起 (ACTION_UP)。有了这些参数,我们便可以轻易的实现想要的效果了。
最近在开发学习项目中使用LeakCanary进行内存泄露的检测,发现了一些之前没有注意到的地方。为了寻找解决方法,在网上查了不少资料,现总结一下。常见的内存泄露包括一下几种情况。
当使用系统服务如SensorManager,LocationManager的时候,一般通过cotext.getSystemService
获取,它们负责执行某些后台任务,或者为硬件访问提供接口。如果context 对象想要在服务内部的事件发生时被通知,那就需要把自己注册到服务的监听器中。然而,这会让服务持有activity的引用,如果在activity销毁的时候忘记了取消注册,那就会导致activity 内存泄露了。
【解决方法】:
在activity的 onDestroy() 方法中取消注册。
【示例】:
修改前:
该方法是通过View的方式获取当前activity的屏幕截图,并不是frameBuffer的方式,所以有一定的局限性。但是这种方法相对简单,容易理解。
|
|
使用dex2jar.bat,jd-gui.exe
zip
并解压,得到其中的classes.dex
,classes.dex文件就是java文件编译通过dx工具打包而成的;classes.dex
文件复制
到dex2jar.bat所在的目录命令行
下定位到dex2jar.bat所在的目录,运行dex2jar.bat classes.dex
classes_dex2jar.jar
文件jd-gui.exe
,然后打开上面生成的jar包classes_dex2jar.jar
,即可看到源代码Gradle的一些基本依赖配置方式如下:
compile fileTree(dir:'xxx',include:['*.jar','*.xxx'])
: 将某个目录下所有符合扩展名的文件作为依赖compile 'com.xx.xx:ProjectName:Version'
:配置Maven库为依赖compile project(':otherModule')
:配置另一个module作为本Module的依赖,被依赖的Module必须被导入到当前工程中compile file('xxx.jar')
: 配置某个jar包作为依赖假如我们希望提供一个带有资源文件的第三方库给别人使用,总不能直接把源代码给别人,但是我们知道eclipse打包的时候不能包含res的资源文件,于是Android在发布Android studio的时候就发布了一种独有的格式AAR,专门用于打包UI组件库。与jar相比其多了一些UI组件用到的属性、图片等一系列文件,它的好处在于你不需要再多创建一个Library Module,只需引用这个AAR文件即可,Android Sudio会自动把AAR包里的文件跟你的项目融合。
要输出aar文件,必须将Module配置为library,在gradle文件中如下:
apply plugin:'com.android.library'
apply plugin:'com.android.application'
当使用真机进行Android app debug时,需要使用USB数据线将手机连接到电脑上,这些数据线会造成很多的不方便。下面将介绍一种通过Wifi进行debug的方式,它将解放我们的数据线。
使用该方法需要一些必要的前提: