- 博客(39)
- 资源 (12)
- 收藏
- 关注
原创 安卓实现多行文字跑马灯效果
背景介绍因UI设计,需要实现跑马灯效果,要求在同一个位置,实现文字滚动(上下或左右).实现方案集成孙福生提供的MarqueeView开源库. 这是一个很小巧的库,代码少,效果好,github上star数量还非常高.支持文字从上到下,从下到上,从左到右,从右到左滚动;支持设置滚动周期;支持设置文字大小、字体、颜色.先上效果图集成步骤添加依赖implementation 'co...
2019-04-30 10:19:32 754
原创 如何用最快的速度熟悉安卓项目老代码
背景做开发最痛苦的事情,不是写代码,是看别人的代码,看老代码. 写个功能,刷刷就完了,要看懂别人的代码,就想骂娘.但是作为开发进入一个老项目时,又不得不熟悉老代码.那怎么样才能最快的熟悉呢? 安卓开发里要了解老项目时,一般先从UI开始,一边在手机上把app跑起来熟悉界面,一边看代码.那么怎么找到当前浏览界面对应的代码呢? 大多数情况下,可见界面是一个activity,有时主体是fragmen...
2019-04-29 19:39:59 1086
原创 如何在宿主app中debug插件代码
背景介绍当前很多团队已经在进行插件化开发了,插件化的两大好处:插件升级方便,用户不必升级apk就能完成版本升级.适合多团队协作,各自负责自己的插件,最终apk都集成到宿主app中.我们团队也使用了插件化,近期因为插件工程直接运行出现了问题,需要在宿主app中才能运行.但是通过宿主app运行,如何debug呢? 如果不能debug,开发效率立马回到原始社会.解决方案在AS中打开插件...
2019-04-29 17:14:58 550
原创 把玩Kotlin依赖注入框架Koin
简要介绍Koin是一个Kotin极轻量的依赖注入框架,据官方资料显示,它无代理,无代码生成,无反射。把玩手法添加依赖//Koin for androidimplementation 'org.koin:koin-android:2.0.0-rc-1'//Koin for scope featureimplementation "org.koin:koin-android-sco...
2019-04-19 10:39:38 1663
原创 上传镜像到docker hub和阿里云Docker Registry
上传到docker hub创建镜像:sudo docker build -t 本地镜像名 .对本地镜像打tagsudo docker tag 本地镜像名:镜像版本号 docker网站用户名/远程仓库镜像名上传sudo docker push docker网站用户名/远程仓库镜像名上传到阿里云Docker Registry先登陆阿里云,在服务中查找“容器镜像服务”,然后创建镜...
2019-04-18 16:55:06 710
原创 ktor生成可独立发布jar包(通过shadow打包)
ktor简要介绍见利用Ktor+KMongo打造全栈异步非阻塞后端架构如何打包开发出了版本,除了本地运行,再就是要打包发布.ktor也支持几种打包方式,如war、jar.本文介绍如何生成jar包.操作步骤一、build.gradle配置:repositories增加classpath 'com.github.jengelman.gradle.plugins:shadow:5.0...
2019-04-17 19:11:37 1721
原创 ktor启动报错:Module function cannot be found for the fully qualified name 'ApplicationKt.module'
背景使用Ktor开发服务端,启动时报错:Exception in thread "main" java.lang.ClassNotFoundException: Module function cannot be found for the fully qualified name 'ApplicationKt.module' at io.ktor.server.engine.Appl...
2019-04-17 17:14:43 958
原创 安卓程序报错: No package ID ff found for ID 0xffffffff.
错误描述App运行就报如下错误:No package ID ff found for ID 0xffffffff.问题原因及解决方案constraintlayout 2.0.0-alpha4版本的问题,回退到2.0.0-alpha3就可以了.PS: 这个是在一个英文网站上搜到的,刚好受用,哈哈.附录https://windows-hexerror.linestarve.com/q/...
2019-04-17 14:35:08 11473
原创 Unable to create call adapter for kotlinx.coroutines.Deferred
背景在使用Kotlin coroutines结合Retrofit获取网络数据时,出现如下报错:2019-04-16 15:24:47.210 20471-20471/com.cxyzy.note E/RepoViewModel$getRepo: java.lang.IllegalArgumentException: Unable to create call adapter for kotl...
2019-04-16 15:31:14 4264 1
原创 安卓四种activity启动模式介绍及应用场景说明(standard,singleTop,singleTask,singleInstance)
简要介绍安卓采用栈来管理activity,每启动一个新的activity,就将原先的activity压入栈中,当用户返回时,就将栈里的activity推出来. 一个app可以有多个栈. 当一个app出现多个栈时,在系统的最近任务里就会出现多个窗口,如下图:四种activity启动模式standard 每次跳转到activity,都新创建activity.singleTop 当目标ac...
2019-04-15 11:42:42 862
原创 如何打开安卓模拟器里的开发者选项
简要介绍网上一般都是介绍匹配手机打开开发者选项的(如华为等),本文介绍一下安卓模拟器里如何打开开发者选项。(How to enable developer options in android emulator?)操作步骤打开Settings->System->About emulated device不停的按“Build number”,蹂躏它,直到它告诉你,你成功了(Y...
2019-04-12 18:25:45 9155 2
原创 安卓onSaveInstanceState和onRestoreInstanceState触发时机
简要介绍很多介绍安卓生命周期的文章,都没有介绍到onSaveInstanceState和onRestoreInstanceState这两个函数,本文专门来介绍一下。onSaveInstanceStateonSaveInstanceState按照官方解释,是当activity被临时销毁时才执行的。原文:invoked when the activity may be temporarily...
2019-04-12 17:49:33 699
原创 安卓学习入门之Service基本使用方法
简要介绍Service是安卓的四大组件之一,常用来在后台执行一些耗时长的任务. Service的启动分为startService和bindService两种方式. 对于bindService方式,采用的类似服务端和客户端通信的方式,可以允许多个客户端连接到service上,允许对一个service断开连接,再次连接;activity可以不断调用service里的方法实现和service的通信(如...
2019-04-12 15:05:24 364
原创 安卓学习入门之IntentService基本使用方法
简要介绍Service是安卓的四大组件之一,常用来在后台执行一些耗时长的任务. 但是因为Service是运行在主线程的,如果要执行耗时任务则需要创建线程.而IntentService则是包含了内置线程的,用于简化任务的执行.IntentService的启动也分为startService和bindService两种方式,但是因为bindService方式跟Service无差别,所以一般不会对Int...
2019-04-12 15:05:13 385
原创 Coroutines+Retrofit实现网络请求
简要介绍Retrofit是当前应用非常广泛的网络请求框架,而Coroutines则是Kotlin中用于执行异步任务的框架,比RxJava还要方便易用,本文将展示一个采用Coroutines+Retrofit的网络请求demo. 若想了解RxJava+Retrofit,可参考《RxJava+Retrofit实现网络请求》集成步骤app工程的build.gradle中添加依赖impleme...
2019-04-10 22:08:23 1267 1
原创 RxJava+Retrofit实现网络请求
简要介绍Retrofit是当前应用非常广泛的网络请求框架,通常结合RxJava来进行网络请求,本文将展示一个采用RxJava+Retrofit的网络请求demo.集成步骤app工程的build.gradle中添加依赖//retrofit2implementation 'com.google.code.gson:gson:2.8.5'implementation 'com.squar...
2019-04-09 15:04:15 447
原创 gradle文件中引入其他gradle文件
背景:安卓项目中,gradle文件也逐渐变得臃肿起来,需要分开管理,否则一大堆在一起,就很难维护了。解决方案:采用**apply from: ‘xx.gradle’**这样的语句就可以引入其他gradle文件了。Demo(集成aspectj):1.aspectj.gradleimport org.aspectj.bridge.IMessageimport org.aspectj.br...
2019-04-09 10:16:12 3701
原创 为什么Kotlin比Java能大量减少代码
简要介绍使用Kotlin已经有好一段时间了,一直在想,到底Kotlin厉害在哪里,为什么我要从Java转到Kotlin上,特此整理一下Kotlin的一些优点. 本文专注Kotlin是如何减少代码书写的.1. 简化空对象的处理val userName = a?.b?.c?.d ?: ""详细文档,可参考:《利用Kotlin优雅的解决Java的空指针问题》2. 属性访问,代替Get/Set方...
2019-04-08 19:52:09 696
原创 使用Kotlin Android Extensions代替ButterKnife和findViewById
简要介绍安卓开发中,activity获取xml文件中控件,最开始的方法是findViewById,后来出现了ButterKnife,于是很多项目都改用ButterKnife了.但是随着Kotlin Android Extensions的推出,有更简单的玩法了.使用方法app工程顶部添加apply plugin: 'kotlin-android-extensions'如果工程本身不是Ko...
2019-04-08 16:56:26 996
原创 Kotlin构造函数(constructor)完全解析
简要介绍Kotlin的类必须有一个主构造函数,可以有多个次要构造函数.主构造函数1. 写法一(主构造函数初始化代码在init块中)class User constructor(name: String) {val name: Stringinit {this.name = name}}2. 精简写法class User constructor(name: String) {...
2019-04-08 16:06:19 11462 1
原创 为什么Kotlin属性访问方式比Java的Get/Set方式好
简要介绍一开始接触Kotlin,就发现Kotlin是采用属性访问的,和之前Java的Get/Set方法不一样.不过感觉这也没有什么牛B的,因为Java只要把字段设置为public,那也是可以通过属性访问的.类样例Java代码public class User { private String name; public String getName() { ...
2019-04-08 14:59:54 1594
原创 利用Kotlin优雅的解决Java的空指针问题
简要介绍Java编程中有一个祖传痛点,关于对象调用的对象为空指针(NullPointerException)问题.常常为了获取一个属性,需要进行这样的调用a.b.c.d. 但是因为每一层都有可能出现空指针,于是代码要这样写.if(a!=null && a.b!=null && a.b.c!=null ){...... String userName =...
2019-04-08 11:11:48 694
原创 安卓集成AOP:AspectJ
AOP是什么?AOP (Aspect Oriented Programming,面向切面编程),可以在运行时动态地将代码切入到类中指定方法、指定位置上的一种技术。说白了,就是把横切逻辑从业务逻辑 中抽离出来。哪些属于横切逻辑呢?比如,性能监控、日志、权限控制等等。AOP相关概念:JointPoint(连接点)Pointcut(切入点)Advice(增强)Adivisor(切面)Bef...
2019-04-08 10:19:12 593
原创 安卓使用room时报错:androidx.room.RoomProcessor was unable to process this class
问题描述/Users/jerry/projects/app-db/build/tmp/kapt3/stubs/debug/com/cxyzy/note/db/AppDatabase.java:7: 错误: [RoomProcessor:MiscError] androidx.room.RoomProcessor was unable to process this class because n...
2019-04-06 22:57:04 2465
原创 Kotlin编译报错:Error:Kotlin: [Internal Error] java.lang.IllegalStateException: Backend Internal error
IDE版本IntelliJ IDEA 2018.2.2解决方案升级IDE版本到 2019.1详细报错信息Error:Kotlin: [Internal Error] java.lang.IllegalStateException: Backend Internal error: Exception during code generationCause: Back-end (JVM) ...
2019-04-04 16:28:34 7268 2
原创 第一个Ktor程序
1. 为IntelliJ IDEA安装插件2. 新建工程3. 选择自动导入4. 修改Application.kt内容import io.ktor.application.*import io.ktor.response.*import io.ktor.routing.getimport io.ktor.routing.routingfun main(args: Array&...
2019-04-03 19:24:39 658
原创 利用Ktor+KMongo打造全栈异步非阻塞后端架构
简要介绍2017年Spring推出了WebFlux,填补了Java世界没有异步非阻塞架构的尴尬(nodejs正式靠着这个起家的),同时联合响应式数据库(MongoDB、Redis、Apache Cassandra、CouchDB)可以打造后端全栈异步非阻塞架构,其中采用Reactor作为异步执行基础.但是把玩了一段时候后,发现响应式的程序真是让人废啊.如果没有接触的可以看看《响应式编程(Reac...
2019-04-03 16:43:48 1738
原创 Kotlin函数默认值完全解析
简要介绍Kotlin函数定义时,支持对参数指定默认值,这样就有效减少Java之前定义重载函数的数量.简要对比如下:Java函数定义,如果sayHelloTo函数中的lastName可以使用默认值,则需要定义如下两个函数.public class Person { public void sayHelloTo(String firstName,String lastName){...
2019-04-03 13:52:40 1838
原创 非常好用的mongo数据库客户端工具Robo 3T
简要介绍Robo 3T是一个使用非常方便的mongo数据库客户端工具.下载https://robomongo.org/download创建数据库连接创建数据库创建集合插入数据插入单条插入多条(数据之间不要有逗号分隔)安卓开发技术分享: https://blog.csdn.net/yinxing2008/article/details/84555061点击关注...
2019-04-02 17:10:53 586
原创 使用Fastjson/Gson/Jackson美化json字符串格式
问题描述项目中需要对json字符串进行格式化,便于查看.原始格式:[{"id":1,"name":"Task1"},{"id":2,"name":"Task2"}]目标格式:[ { "id": 1, "name": "Task1" }, { "id": 2, "name": "Task2" }]解决方案添加依赖impleme...
2019-04-02 14:23:58 2606
原创 kotlin拷贝内容到剪贴板
import java.awt.datatransfer.StringSelectionimport java.awt.Toolkitfun copyToClipboard(info: String) { val clipboard = Toolkit.getDefaultToolkit().systemClipboard val tText = StringS...
2019-04-02 13:44:47 1427
原创 发布app到Google Play市场详细操作步骤
操作步骤申请Google Play开发者账号并且支付25美元,详细攻略参考:https://www.jianshu.com/p/7c97aa9c5fb6登陆google play网站,选择“PUBLISH AN ANDROID APP ON GOOGLE PLAY”并输入app相关信息.https://play.google.com/apps/publish/一共需要输入四部分信息,详...
2019-04-02 09:29:42 4268
原创 安卓Room存储复杂类型(类型转化)
简要介绍通常我们存储的是基础类型,如Int,String等,但是如果要存在复杂的类型时,那该如何呢?解决方案(以Date类型为例)定义类型转换器class Converters { @TypeConverter fun fromTimestamp(value: Long?): Date? { return if (value == null) null ...
2019-04-01 17:16:55 2898
原创 修改SVG(PNG)文件背景
背景从阿里iconfont上下载下来的图标背景是透明的,把图标当作悬浮按钮时,会露出后面的界面.问题图如下(加号图标后面的内容露出来了):解决方案在网上找了很久,都没有找到合适的方案,最后自己想了一个涂层叠加的笨办法.基本原理就是采用两种图合并到一起(同时要保留圆形图标外围的透明层)修改SVG文件背景从iconfont上下载我想要的加号图标,再下载一张圆形(内部有填充色的,这个要...
2019-04-01 16:26:17 1676
原创 利用Github Pages搭建个人博客
操作方法在github上完成注册后,新建仓库(New repository)命名仓库时,要命名为“github用户名”+“.github.io”.(必须这样命名)上传一个html文件到该仓库中,如index.html内容:<!DOCTYPE html><html lang="en"><head> <meta charset=...
2019-04-01 14:35:41 250
原创 在安卓中使用SVG矢量图
简要介绍SVG(Scalable Vector Graphics,可伸缩矢量图形 )是W3C推出的一种开放标准的文本式矢量图形描述语言,它是一种基于XML、专门为网络而设计的图像格式,SVG是一种采用XML来描述二维图形语言,所以它可以直接打开xml文件来修改和编辑.矢量图优点:1.使用点和线来描述图形,所有文件会比较小,同时也能提供高清晰的画面。2.缩放自由且不会失真,适配于任何分辨率的...
2019-04-01 11:41:41 996
原创 Android Studio自带图标制作利器Asset Studio制作多分辨率图标
简要介绍小团队如果没有专门的UI工程师,那图标就会成为一个问题,在此先推荐阿里巴巴的www.iconfont.cn. 在基于也有合适图标的基础上,如何快速生成app所要的所有分辨率图标呢?看看这么多图片目录,头都大了,一个个搞,不得累死?还好有贴心的Android Studio,自带Asset Studio来帮你解忧.操作步骤访问菜单New》Image Asset定制图标...
2019-04-01 11:01:05 1088
原创 安卓开发图标制作利器iconfont使用简要指导
访问www.iconfont.cn,搜索到想要的图标根据需要选择颜色(下面样例选择了白色)及尺寸最后点击下载,可选格式有“SVG,AI,PNG”安卓开发技术分享: https://blog.csdn.net/yinxing2008/article/details/84555061更多技术总结好文,请关注:「程序园中猿」...
2019-04-01 11:00:36 233
原创 安卓开发图标制作利器iconfont使用简要指导
访问www.iconfont.cn,搜索到想要的图标根据需要选择颜色(下面样例选择了白色)及尺寸最后点击下载,可选格式有“SVG,AI,PNG”安卓开发技术分享: https://blog.csdn.net/yinxing2008/article/details/84555061更多技术总结好文,请关注:「程序园中猿」...
2019-04-01 10:39:31 280
通过Apache common pool开源包实现对象池
2014-04-25
java(cglib)动态代理样例
2014-04-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人