- 博客(144)
- 收藏
- 关注
原创 git基本使用
你是一个刚刚参加工作的新人,拿到电脑后你安装了自己的开发工具和相关环境。首先用git config --global配置用户名和邮箱,然后ssh-keygen -t rsa生成密钥(mac自带ssh),其中.pub就是公钥,复制到github上即可。导师让你把项目下载下来熟悉一下,先别急着git clone,问问现在最新的代码在哪个分支上(如在release/2.0.0上),然后git c...
2018-12-06 14:46:32 374
原创 使用百度音乐盒API接口实现音乐播放器
百度音乐盒提供了一个便捷的API可以拿来访问一些音乐资源,开发者通过访问指定格式的url可以拿到返回的数据,这个数据可以是json或者xml,这里面包含了歌曲的信息。完整的API各种访问格式是非常丰富的,参见http://www.cnblogs.com/liuying1995/p/5704176.html。这里我们只实现查询关键字,得到返回的歌曲列表和百度定义的歌曲的id,然后再使用这个id访问,
2016-11-11 21:52:19 10720 2
原创 杂记
1.TabLayout监听tab点击不考虑在代码里重复选择一个tab的情况,使用addOnTabSelectedListener里的onTabReSelected可以监听到tab点击。
2020-03-07 14:23:49 349
原创 java字符串映射到unicode
java中使用UTF-16编码,每个char占16位。当我们调用String.length的时候获取到的是16位的char的数量,charAt也同理。而unicode最多可使用32位来编一个码,这时会出现一个unicode码(如emoji)占2个char的情况。详见https://blog.csdn.net/thomashtq/article/details/39081233,其中高半区UTF...
2019-10-11 16:12:47 650
原创 【Android】viewpager和recyclerview联动知识梳理
最近做一个需求,界面上方是一个可滑动切换的viewpager列表,下方是一个用recyclerview做的菜单,recyclerview的item对应viewpager的一页,要求在滑动上面或者下面的时候另一个都要跟着滑动,就好像你执行一次滑动却产生了两个事件序列。我的思路是分别对viewpager和recyclerview的滑动进行监听,比如viewpager滑动了就计算出他本次滑动到了哪个...
2019-10-05 16:23:13 2535
原创 2018下半年一些知识点记录
1.complileSDK是编译期使用的SDK,不会打进包里,不影响运行,为了使用新特性谷歌建议选择最新的版本。minSDK决定了最低什么版本的手机可以安装,同时编译期编译期会对过高的api进行报错。targetSDK是向前兼容的核心,SDK版本升级时大多api一般会保留新旧两种代码,然后根据获取这个targetSDK来进行判断使用哪套逻辑。 Gradle文件中单引号表示只是一个单纯的字符...
2019-01-28 17:09:41 316
原创 安卓性能优化视频观后笔记
1.使用工具查找渲染问题Hierarchy Viewer / 手机过度绘制显示 / TraceView查找CPU问题过度绘制常见的一个原因是背景的重叠 2.理解VSYNC更新频率:屏幕刷新的频率,与硬件有关帧率:GPU获取数据绘制的频率 GPU获取数据并绘制,硬件更新到屏幕上GPU将一帧绘制到back buffer后,也会将其复制到一个frame ...
2019-01-28 16:49:26 434
原创 Android gradle文件中使用json转换
1.知识点:对象转json字符串:JsonOutput.toJson(OBJ) json(file等)转对象:new JsonSlurper().parse(file)当前module根目录:project.projectDir将文本写入文件:new File("").withWriter('utf-8'){ writer -> writer.write text }...
2019-01-17 19:56:43 4018
原创 git未正确add新文件
新建一个文件夹并add这个文件夹即使没成功也不会有提示,add其中一个文件被ignore命中的话则会提示该文件被ignore。 查找.ignore文件中命中该文件的规则:git check-ignore -v <file>...
2019-01-10 11:44:26 1568
原创 Lambda argument should be moved out of parentheses
在使用lambda的时间把它作为一个参数,报了这样一个提示,原来lambda表达式可以直接放在括号外面.还有,以后这种问题可以直接alt+enter。。。。。
2019-01-06 13:01:13 1792
原创 glide获取bitmap(url,file,base64)
public class GlideBitmapFetcher implements IBitmapFetcher { private Context mContext; public GlideBitmapFetcher(Context context) { mContext = context; } @Override publi...
2018-12-21 15:29:10 2463
原创 CookieManager.removeAllCookies(ValueCallback) return false
判断一下CookieManager.hasCookies,如果没有的话调用remove会返回false。
2018-12-10 14:19:20 1580
原创 react native加载多个jsbundle(assets和其他目录)
在使用ReactInstanceManager.Builder构建一个ReactInstanceManager实例的时候只能传入一个bundle,setBundleAssetName和setJSBundleFile分别对应从assets和从一个文件路径加载Bundle。有时需要将业务代码和通用代码分离,也就是分成两个bundle,这时候加载第二个Bundle就要借助反射了。ReactCont...
2018-09-25 15:12:56 4258 2
原创 android.media.MediaCodec$CodecException: Error 0xfffffc0e
报错代码: final MediaFormat format = MediaFormat.createVideoFormat(MIME_TYPE, mWidth, mHeight); mMediaCodec.configure(format, null, null,MediaCodec.CONFIGURE_FLAG_ENCODE);原因:传入放入宽高...
2018-09-18 17:14:38 16729 1
原创 react native安卓调试(摇一摇和菜单键无效)
一个原生的项目要求嵌入react native界面,于是我把打包好的bundle放到assets文件夹下本地加载,运行没问题,但是没办法调试,摇一摇和长按Menu键都不行。检查代码,主配置文件中注册了 <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />实...
2018-09-14 17:04:00 3956
转载 好玩的adb
https://github.com/mzlogin/awesome-adb adb devices 查看连接的设备列表,一个标识符对应一个设备。通用:adb -s 设备标识符 command,一个设备时-s xxx可省略。 1.无线连接(无需root,前期需要用线,两端处于同一个wifi下)USB连接设备,用adb devices确认已连接 adb tcpip 555...
2018-09-06 16:31:20 443
原创 react native接入原生项目(mac pro)
首先保证安装了node,watchman,yarn。1.新建一个文件夹A,里面新建一个文件夹android,然后把项目根目录下所有内容放入这个android里。直接全选复制的话没有git,可以把整个项目移过去再改名为android。2.在A下新建package.json:{ "name": "EffectCam", "version": "0.0.1", "private...
2018-09-03 16:53:22 243
原创 Butterknife的BindView
引入: implementation 'com.jakewharton:butterknife:8.5.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'butterknife的工作原理是在编译器根据扫描的注解通过JavaPoet生成一个和target(activity,fragment)...
2018-08-27 15:45:48 988
原创 项目实训(二十五)网络基础整理
1.http是应用层协议,将数据看做一个个数据包。请求报文包括请求行(url,method,协议及版本),请求头:Accept:客户端接受的数据类型,含有一个或多个MIME类型 Cookie: http中每个请求都是独立的,所以有必要有一个字段记录一些内容。 Cache-control : 缓存控制策略。有以下几个配置项private...
2018-08-27 12:19:13 293
原创 项目实训(二十三)对RxJAVA的理解
github地址:https://github.com/ReactiveX/RxJavaRxJAVA是一个响应式的框架,基于观察者模式。主要有两个类,Observable和Subscriber。前者就是被观察者,用来向观察者发送数据流或事件。Subscriber继承自Observer,只是多了一个onStart方法。一个完整的响应式开发流程包括实现被观察者,实现观察者,完成订阅。当然,...
2018-08-24 17:26:10 182
原创 项目实训(二十二)【巨坑】recyclerview在适配器更新后布局混乱
先描述一下我遇到的问题:一个帖子列表,帖子布局中有一个显示图片的布局,一张两张三张图片的显示效果不同,所以对应着有三个不同的布局,初始都是gone。根据解析数据解析出的图片数选择显示那个布局。列表有底部加载,到达底部获取数据添加到数组中,然后调用适配器的notify...方法之后,神奇的事情发生了。底部加载更多前的帖子,都显示了同一张图片。也就是说,列表项的重新渲染出错了。 刚...
2018-08-24 17:22:52 481
原创 项目实训(二十一)intent借助parcelable接口传递对象数组
安卓里的序列化接口有两个,Serializable和Parcelable。前者使用非常简单,只需要实现该接口,后者还需要实现几个接口里的方法等。在通过intent传递一个对象的时候,我通常让该对象类实现Serialazable,然后用bundle.putSerializable就可以了。但是要传递一个对象数组的时候,我发现bundle并没有putSerializableArray或putSer...
2018-08-24 17:18:48 921
原创 项目实训(二十)Camera探究
安卓中可以操作相机的类有hardware.Camera和Camera2,后者只适用于6.0+的部分机型,所以这里只探究API1的Camera。项目里发现使用了SurfaceTexture,SurfaceTexture不同于SurfaceView和GLSurfaceView的地方在于它接受输入数据但是不在屏幕上绘制出来,因此可以作为数据源和view之间的一层,处理传来的数据然后交给view绘制。...
2018-08-24 17:15:19 330
原创 项目实训(十九)proguard学习
proguard是一个工具,常用于代码混淆,但是其作用不止是混淆,而是压缩(删除未使用的类方法字段)、优化(对字节码进行优化)、混淆(名称无意义化)、预检(确保字节码能够可执行)。在android studio中对proguard的使用主要在于两个文件:module的gradle文件以及proguard-rules.pro文件。首先来看module级的gradle中的相关代码:bui...
2018-08-23 20:25:30 305
原创 项目实训(十八)借助aspectj实现AOP编程初探
1.首先要知道一点自定义注解:用来标识注解的注解称为元注解,一共四种:Target指定注解的对象(类,方法,属性),Retention指定注解的生命周期(SOURCE,CLASS,RUNTIME)依次递增,RUNTIME表示保留到运行时。Inherited表示可以被子类继承,Documented表示注解信息添加到java文件中。更新一下Rentention的理解:SOURCE在编译成cla...
2018-08-23 10:57:16 204
原创 项目实训(十四)mac pro charles连接手机(6.0)
手机是小米安卓6.0系统1.charles help--ssl proxying--install charles root 证书 中将Charles证书设置为信任2.charles proxy--ssl proxying settings--enable +add一个host=*,post=443的location这两部配置完charles应该能抓电脑上的包了接下来点击cha...
2018-08-22 15:01:46 214
转载 项目实训(十三) 中心裁剪bitmap
参考:https://blog.csdn.net/wn1245343496/article/details/53896349 项目中有个需求,因为图片处理模型只接收256*256的图片,所以我需要对图片进行一个裁剪然后方法。也就是说,分为两步,先取中间的正方形部分(类似imageview的scaleType),然后生成一个固定大小的新图。/** * @param bitma...
2018-08-18 15:07:37 1314
原创 项目实训(十二)天坑,plugin error : cannot load plugin(AS3.1)
早起打开AS,发现test包啥的都找不到了,说是加载插件失败。打开preferences里的插件,发现一大片插件都红了。上网找答案,删除资源库/preferences/AS3.1/disabled_plugin(这个文件记录了不使用的插件列表),然后重启,没用。去除红色插件的勾选再重新勾选,没用,一点反应没有,还是红的,也没有提示restart。 终极操作:替换程序包/Conten...
2018-08-09 13:05:30 1313
原创 项目实训(十一)导入一个mudule
将一个项目的一个Mudule导入到另一个项目。1.gradle.properties: 这个文件里定义了一些gradle里可以用的量,注意将原项目级文件中的量copy过来,否则Module的gradle可能会找不到2.在settings.gradle里加入module,在app的gradle里依赖该module。2.确认gradle中路径,查看所有对外部文件的路径。3.尽量保持依赖...
2018-08-06 17:48:43 227
原创 项目实训(十)引入mudule后System.loadLibrary失败天坑
我使用Android Studio的include C++生成了一个项目,然后Import一个module,这个module也是一个含有C++代码和CmakeLists的项目。然后编译也全部通过了,我调用这个mudule里的native方法的时候System.loadLibrary加载库失败了。百思不得其解,相应的so文件都有,怎么就加载不到呢。最终发现是因为我原项目没有指定ndk的abi,所...
2018-08-05 18:32:40 740
原创 项目实训(九)手势相关
官方文档:https://developer.android.google.cn/reference/android/view/MotionEvent.html#ACTION_MASK首先要清楚事件分发机制,在一次事件序列(从按下到抬起)中会产生若干个MotionEvent,首先会调用onTouch(setOnTouchListener)进行处理,如果返回false的话说明没有消耗,交给onT...
2018-08-01 15:45:28 242
原创 项目实训(八)天坑(静态变量值不对+集成SDK第一次启动出错)
1.用了一个静态变量来存数据库获取的数据,在静态代码块里进行更新。然后退出再次启动应用发现并未更新,原来安卓为了优化启动保存了这些信息,就像Application不会再次初始化。 2.在集成一个SDK生成一个值的时候发现第一次安装无论如何无法生成,杀掉进程重启即可生成。原来是因为我在Application的onCtreate里进行了这个操作,而这时候需要的权限还都没有,所以无法生成。解决方...
2018-07-31 10:24:11 229
原创 项目实训(七)effective java 读书笔记
1.单个enum类型成为单例模式的绝佳实现,他支持序列化并绝对防止多次实例化。2.尽量使用基本类型而非装箱基本类型,避免多次创建装箱实例造成的浪费。3.在重写equals的时候要先使用instanceOf进行类型检查,所以不需要进行判空。可以在最开始时先使用开销比较低的==进行判断。不要提供非object类型的重载。4.将类设置为不可变是有必要的,线程安全,不易出错。5.所有基本类...
2018-07-26 21:09:54 245
原创 项目实训(六)greenDao存列表以及一对一关系的坑
在更改数据库结构,比如增加表修改字段什么的首先要保证数据库升级,否则会直接崩。在app的gradle里向上修改版本号即可,没有的话加上,greendao { schemaVersion 2}原数据库内容会清空。 1.我在这张表里有一个List<String>和一个自定义object。list是不能直接存的,要借助转换器; @Convert(col...
2018-07-25 15:31:51 680
原创 项目实训(五)Rxjava 2.0 学习笔记
我感觉Rxjava像是一条流水线,一块原料到来经过层层加工最后交给订阅者,当然不处理直接交给订阅者也可以。从基本设计(Rx1.0)来看,Observable有一个内部类实例OnSubscribe,当Observable调用subscribe时会调用这个OnSubscribe的call。这就是全部。一般来说会在call里调用Subscriber的方法将信息传递过去。由此基本逻辑,又延伸封装出各种...
2018-07-22 15:11:15 180
原创 项目实训(四)BuildConfig生成当前git commitId
BuildConfig中的常量实际上都是gradle生成的,而且注明了不可修改,包括是否为DEBUG模式,版本号等一些信息。现在我们想要在里面存一个当前的git commitId以供使用,首先找到app对应的gradle文件(不同module有不同对应的BuildConfig,要注意),在android模块上方定义一个函数:def getGitSha = { -> def ...
2018-07-22 10:23:41 719
原创 项目实训(三)
1.AppCompatActivity设置全屏:我想在主配置文件里设置应该比在活动代码里设置更加优雅。注意AppCompatActivity只能设置Theme.AppCompat类型的主题,在styles.xml里定义一个主题设置给aty即可,第二个item表示没有遮罩(如启动时看到的白屏): <style name="FullScreenAppCompat" parent=...
2018-07-21 14:58:41 360
原创 项目实训(二) 加载圆形图(从源码看自定义图形转换)
Glide提供了多种默认的图形变换,如centerCrop(中心剪裁,同imageview的scaletype)等,可以通过在链式语法中加入transform(BitmapTransmation)来设置图片的变换。centerCrop实际上就是调用transform(new CenterCrop)。那先来看看这个centerCrop,直接继承自BitmapTransmation,核心方法就一个:@...
2018-07-08 11:19:11 249
原创 项目实训(一) 网络图片下载进度监听
我们的项目是一个图片分享社区,所以要对图片处理的一些逻辑进行学习。学习自郭霖大神glide系列博客,自己经过思考重新整理。一。全局替换加载策略首先要知道Glide在实例化时的工作(也就是框架的初始化):设计模式是builder模式,可以分为两部分,首先builder调用Glide构造器传入所需模块(内存策略,图片解码模式等),然后Glide构造器中对各种类型的图片需求加载进行注册(如File,in...
2018-07-08 11:17:45 268
原创 WIN10按shift取消大写锁定(非Caps Lock设置和粘滞键)
发现按shift自动把大写锁定取消了,很影响打游戏。查了很多,无非说是开启了粘滞键和Caps Lock切换为shift。都不是。点击日期时间进入时间日期设置,然后切到区域和时间点中文,再点出现的选项点微软拼音,选项,进去把shift切换中英文改成ctrl。然后其他输入法进设置也改成ctrl就行了。...
2018-06-12 22:50:33 36507 5
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人