csmijo's notes

路漫漫其修远兮,吾将上下而求索


  • 首页

  • 归档

  • 标签

  • 分类

Markdown插入图片的便捷方式

发表于 2017-03-23 | 分类于 小工具 | 阅读次数

1. 前言

最近一直在使用 Markdown 写文档,但是其中贴图真是太麻烦了,于是就想着能不能有什么好的方法来解决,Google,发现了网上已经有一些前辈写好的教程了,我主要参考了这两篇博客的内容:

  • 【干货】Markdown最强最快贴图方法
  • 使用Python在Markdown插入图片并自动获取链接

但是在直接使用时并不是那么一帆风顺,遇到了各种不成功的情況,然后我就自己调试,摸索了一下,终于成功了。现在将大概的过程记录一下,希望能提供一下参考价值,不至于他人遇到同样的坑。

阅读全文 »

View事件分发

发表于 2017-03-23 | 分类于 Android , Android自定义view | 阅读次数

1. 基础知识

(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()对事件进行消费。
阅读全文 »

Android性能优化之巧用软引用与弱引用优化内存使用

发表于 2017-03-23 | 分类于 Android , Android性能优化 | 阅读次数

1. StrongReference(强引用)

强引用是我们最最常见的一种,一般我们在代码中直接通过new出来的对象等,都是强引用,强引用只要存在没有被销毁,内存就不会被系统回收。我们以生成Bitmap为例如下:

1
Bitmap imageBitmap = readBitmapFromResource(getResources(), R.mipmap.bg_post_activity_5);

生成 Bitmap 代码:

1
2
3
4
public Bitmap readBitmapFromResource(Resources resources, int resourcesId) {
BitmapFactory.Options options = new BitmapFactory.Options();
return BitmapFactory.decodeResource(resources, resourcesId, options);
}

阅读全文 »

Android性能优化之UncaughtExceptionHandler定制自己的错误日志系统

发表于 2017-03-23 | 分类于 Android , Android性能优化 | 阅读次数

前言:

每当我们app测试的时候,测试人员总是对我们说这里崩溃了,那里挂掉了!我们只能默默接受,然后尝试着重现bug,更可悲的是有时候bug很难复现,为了解决这种现状所以我们要尝试这建立一个自己的bug日志系统。

实现原理:

Java为我们提供了一个机制,用来捕获并处理在一个线程对象中抛出的未检测异常,以避免程序终止。我们可以通过UncaughtExceptionHandler来实现这种机制。

阅读全文 »

在onTouchEvent中处理任意时间的长按事件

发表于 2017-03-22 | 分类于 Android , Android自定义view | 阅读次数

A. 方法一 (不是最优)

1. 欲实现的效果

  Android提供了GestureDetector类来处理一些常用的手势操作,比如说 onLongPress,onFling 等。但这里不使用GestureDetector,而是直接在自定义View重写的onTouchEvent中进行处理。

  欲实现的效果是:当手机按住屏幕时,如果在指定的时间内没有移动(如500毫秒),那么进入长按模式,此时手指在屏幕上移动都算作长按模式。如果手机按住屏幕就立马移动,那么就算作移动模式。

2. 使用的方法

  MotionEvent 类提供了记录当前坐标的函数(getX(),getY())和当前事件产生的时间的函数(getEventTime())以及按下时间(getDowntime())。MotionEvent同时也提供了当前的操作类型,按下(ACTION_DOWN)、 移动 (ACTION_MOVE)、弹起 (ACTION_UP)。有了这些参数,我们便可以轻易的实现想要的效果了。

阅读全文 »

Android内存泄露

发表于 2017-03-22 | 分类于 Android , Android性能优化 | 阅读次数

  最近在开发学习项目中使用LeakCanary进行内存泄露的检测,发现了一些之前没有注意到的地方。为了寻找解决方法,在网上查了不少资料,现总结一下。常见的内存泄露包括一下几种情况。

1. 监听器

  当使用系统服务如SensorManager,LocationManager的时候,一般通过cotext.getSystemService获取,它们负责执行某些后台任务,或者为硬件访问提供接口。如果context 对象想要在服务内部的事件发生时被通知,那就需要把自己注册到服务的监听器中。然而,这会让服务持有activity的引用,如果在activity销毁的时候忘记了取消注册,那就会导致activity 内存泄露了。

【解决方法】:

  在activity的 onDestroy() 方法中取消注册。

【示例】:

修改前:

1
2
3
4
5
6
7
8
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor sensor = sensorManager.getDefaultSensor(Sensor.TYPE_ALL);
sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST);
}

阅读全文 »

Android 获取当前Activity的屏幕截图

发表于 2017-03-22 | 分类于 Android , 杂类 | 阅读次数

1. 概述

  该方法是通过View的方式获取当前activity的屏幕截图,并不是frameBuffer的方式,所以有一定的局限性。但是这种方法相对简单,容易理解。

2. 使用方法

  1. 对activity进行截图
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    /**
    * Activity screenCap
    *
    * @param activity
    * @return
    */
    public static Bitmap activityShot(Activity activity) {
    /*获取windows中最顶层的view*/
    View view = activity.getWindow().getDecorView();
    //允许当前窗口保存缓存信息
    view.setDrawingCacheEnabled(true);
    view.buildDrawingCache();
    //获取状态栏高度
    Rect rect = new Rect();
    view.getWindowVisibleDisplayFrame(rect);
    int statusBarHeight = rect.top;
    WindowManager windowManager = activity.getWindowManager();
    //获取屏幕宽和高
    DisplayMetrics outMetrics = new DisplayMetrics();
    windowManager.getDefaultDisplay().getMetrics(outMetrics);
    int width = outMetrics.widthPixels;
    int height = outMetrics.heightPixels;
    //去掉状态栏
    Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache(), 0, statusBarHeight, width,
    height-statusBarHeight);
    //销毁缓存信息
    view.destroyDrawingCache();
    view.setDrawingCacheEnabled(false);
    return bitmap;
    }
阅读全文 »

反编译详解

发表于 2017-03-22 | 分类于 Android , 杂类 | 阅读次数

1. Apk反编译得到Java源代码

使用dex2jar.bat,jd-gui.exe

具体步骤:

  1. 将Apk文件的后缀改为zip并解压,得到其中的classes.dex,classes.dex文件就是java文件编译通过dx工具打包而成的;
  2. 将classes.dex文件复制到dex2jar.bat所在的目录
  3. 在命令行下定位到dex2jar.bat所在的目录,运行dex2jar.bat classes.dex
  4. 生成classes_dex2jar.jar文件
  5. 双击jd-gui.exe,然后打开上面生成的jar包classes_dex2jar.jar,即可看到源代码
阅读全文 »

Android studio打包及引用aar

发表于 2017-03-22 | 分类于 Android , 杂类 | 阅读次数

1. 简述

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包作为依赖

2. AAR文件简介

  假如我们希望提供一个带有资源文件的第三方库给别人使用,总不能直接把源代码给别人,但是我们知道eclipse打包的时候不能包含res的资源文件,于是Android在发布Android studio的时候就发布了一种独有的格式AAR,专门用于打包UI组件库。与jar相比其多了一些UI组件用到的属性、图片等一系列文件,它的好处在于你不需要再多创建一个Library Module,只需引用这个AAR文件即可,Android Sudio会自动把AAR包里的文件跟你的项目融合。

要输出aar文件,必须将Module配置为library,在gradle文件中如下:

  • 要输出 aar:apply plugin:'com.android.library'
  • 要输出 apk:apply plugin:'com.android.application'
阅读全文 »

如何通过WiFi调试你的Android应用程序(不需要root)

发表于 2017-03-21 | 分类于 测试 | 阅读次数

当使用真机进行Android app debug时,需要使用USB数据线将手机连接到电脑上,这些数据线会造成很多的不方便。下面将介绍一种通过Wifi进行debug的方式,它将解放我们的数据线。

1. 使用的必备条件

使用该方法需要一些必要的前提:

  • 首先还是需要有一根USB 数据线,这个将会在初始检查时使用到
  • 保证pc端的网络和手机端的网络在同一个网络环境
阅读全文 »
123
csmijo

csmijo

测试开发 | Android

22 日志
9 分类
28 标签
GitHub 简书
© 2016 - 2017 csmijo
由 Hexo 强力驱动
主题 - NexT.Pisces