- 博客(36)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 仿开眼app—Kotlin+MVVM+DataBinding
1、前言仿开眼app的练习项目,主要为了练习MVVM + DataBinding + LiveData + 组件化 + kotlin等的使用2、截图3、功能首页、社区、通知内容展示视频详情页、视频播放、评论展示视频播放封装+全屏图片详情页网页加载内容搜索其他…4、实现MVVM + DataBinding + LiveDatakotlin作为主要开发语言组件化开发,新建launch模块单独调试各个module,防止切换app/mo
2020-08-29 17:43:29
601
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 web和android端交互简单封装:JsBridge
背景公司项目是通过webView.addJavascriptInterface(Object obj, String interfaceName)进行web和原生的交互的,android端通常会定义类似以下的多个方法,这样做的好处是便于阅读,一看便知方法是干什么的,需要什么参数;坏处是不便于扩展,一旦web端传错参数,或者调了一个android端没有的方法时,会导致各种问题,每当需要扩展时,we...
2019-10-29 00:12:03
1137
原创 Android换肤引擎原理分析
1、LayoutInflater解析xml布局1.1、解析流程解析xml的源码流程大概如下://LayoutInflater.java(android-29)public View inflate(XmlPullParser parser, @Nullable ViewGroup root, boolean attachToRoot) { synchronized (mConstructorArgs) { ... // Temp is the ro
2020-12-17 21:02:46
241
原创 gson自定义TypeAdapter
1、背景后台接口返回的json数据同一个key的value分多种类型比如//类型一{ "cover":"http://xxxx/xxx/xx"}//类型二{ "cover":{ "blurred":"http://xxx/xxx", "detail":"http://xxx/xxx", "feed":"http://xxx/xxx", "homepage":"http://xxx/xxx" }}2、实现/** * Description: Gson Adap
2020-11-30 23:02:57
502
1
原创 RxJava执行流程及线程切换
背景看完记录下来踏实点用法代码示例Observable.create(new ObservableOnSubscribe<Integer>() { @Override public void subscribe(ObservableEmitter<Integer> e) throws Exception { Log.d(TAG, "create:
2020-10-24 12:56:44
892
原创 用ViewPager2实现个简单的Banner效果
1、背景因为要实现的功能比较简单,所以不想用开源库,参考了下开源库,实现一个简单的2、效果注:测试用到的图片来源于开眼官方3、实现主要依赖ViewPage2,因为ViewPager2已经把大部分功能都写好了,这里只需要把以下两点处理以下就行显示多个Item(左右留空)滑动冲突代码也比较简单(注:水平方向滑动冲突未测试)/** * Description: 一个简单的Banner,只实现左右滑动 * Author : pxq * Date : 2020/9/26 3:47 P
2020-09-26 18:16:20
1704
原创 Android方法耗时监控工具
Android方法耗时计算监控工具1、背景为了监控一些方法耗时2、需求要实现以下功能:Application onCreate()方法耗时Activity生命周期方法耗时Fragment生命周期方法耗时(TODO)自定义方法耗时…3、实现3.1、技术方案利用Transform + ASM字节码修改技术动态插入代码3.2、Application onCreate()方法耗时考虑到App多重继承的情况,即App继承BaseApp,BaseApp继承Application;或者
2020-08-17 14:38:56
2183
原创 Kotlin in Android入门实践
1、前言虽然有了解kotlin,但是一直没在项目中使用,最近为了学习Jetpack+组件化,新开了个练习项目,顺便学一下kotlin,记录下学习路线。2、学习路线2.1、语言学习主要学一下基本语法:官方中文文档:https://www.kotlincn.net/docs/reference/2.2、Android中的学习kotlin在android中的使用:google官方文档:https://developer.android.google.cn/kotlin/add-kotlin看
2020-08-03 16:55:10
350
原创 Docker+Jenkins搭建Android持续集成环境(二)
前言gradle、git、jdk环境配置比较简单,主要说下Android SDK配置。Jenkins搭建完后还不能构建Android项目,因为没有Android开发环境,因此还需要配置Android开发环境。如果没配ANDROID_HOME环境的话,构建时会找不到响应的task,如 Task ‘assembleRelease’ not found in project ‘:app’.1、下载Android SDK下载SDK的方式有两种,一种是在宿主中下载然后拷贝到镜像中;一种是直接在镜像中下载。两
2020-07-01 22:43:15
1081
原创 Docker+Jenkins搭建Android持续集成环境(一)
前言为什么用docker?因为镜像已经基本配置好环境了,只要下载就可以复用了,同时方便管理,通过docker命令就可以简单地管理各个镜像。当然,也有坏处,就是镜像内可能缺乏一些软件需要自己下载。1、安装Docker操作系统:CentOS 8.0 64位1.1 安装依赖sudo yum install -y yum-utils device-mapper-persistent-data lvm21.2 安装 Docker CE使用国内下载源:sudo yum-config-manag
2020-07-01 22:17:20
946
翻译 [译]Finding Views by ID的演进
作者:Wajahat Karim时间:2020/4/1原文: Evolution of Finding Views by ID in AndroidfindViewById() vs Butterknife vs Kotlin Synthetics vs DataBinding vs ViewBindings十多年来,Android开发人员一直在努力解决一个简单但烦人的问题。将XML布局中View的引用以完全独立的语言(Java或Kotlin)从其布局视图类(例如Activity或Fragmen
2020-06-18 23:38:07
184
原创 如何打开未注册的Activity
1、背景复习的时候看到这样一个问题,这是插件化的一个知识点,实现一下加深印象2、Activity启动流程简介ActivityInstrumentationActivityThreaedAMSstartActivity()startActivityForResult()execStartActivity()startActivity()一系列调用启动app(忽略)scheduleLaunchActivity()sendMessage(LAUNCH_ACTIVITY)handleLaunchActiv
2020-05-14 22:41:29
1068
原创 Handler源码分析
1、背景老生常谈2、参与对象Handler 消息发送和接收者Message 消息实体MessageQueue 消息队列,存储消息,内部实现是链表Looper 从MessageQueue取消息,交给handler处理3、流程HandlerMQLooper发送Message:sendMessage()读取Message:next()消费Message:dispa...
2020-04-27 23:19:09
324
2
原创 记一次MAT内存分析
1、背景记录一次内存分析的简单实践,目的是找出占用内存较大的对象和无效的内存分配2、工具2.1、 DDMS或者Android StudioDDMS:抓取内存快照Android Studio的Profiler:抓取内存快照并分析(支持android 5.0以上)2.2、 MAT(Memory Analyzer)内存快照文件分析工具3、步骤3.1、 抓取内存快照DDMS支持5....
2020-04-04 15:08:48
2001
1
原创 maven gradle插件如何上传多渠道library
1、背景对接的第三方SDK分联调版(测试环境)跟正式版(生产环境),调试时用联调版,上线用正式版。两个环境对应不同的代码、资源文件,考虑到复用问题,因此新建一个library集成这个SDK,并上传到公共库,之后在项目中直接依赖即可。2、需求及实现2.1、需求因为分两个版本,且版本的代码、资源各不相同,因此这个library应该要实现以下需求一个library module包含多个渠...
2020-03-26 21:04:03
1530
7
原创 如何修改已经push了的commit注释
1、背景提交github的时候发现注释里@居然跟微信的@功能一样,能直接导航到某个人,但我本意是表示一个注解,故记录一下如何修改。2、修改1、使用rebase进入历史提交记录的编辑界面,找到要修改的提交并把pick改成edit,退出git rebase -i HEAD~n //n表示最近提交记录个数,比如3次把pick改成edit、reword等,这里使用reword2、进...
2020-03-17 23:16:48
2312
原创 okhttp拦截器之CacheInterceptor
1、背景最近看了点http缓存相关点东西,之前看了下okhttp源码,但是看得一知半解,现在结合http缓存再看一次。2、http缓存相关2.1、http缓存的实现方式http是通过header来控制缓存的,缓存方式分两种:1、强制缓存缓存是否过期不需要经过服务器确认,直接使用缓存。实现方式: 响应包含Expires或者Cache-Control:max-age来指定响应过期...
2020-03-11 22:29:36
360
原创 Socket简单实现Get和Post请求
1、背景最近看了OkHttp源码,用的责任链模式,通过一些列拦截器(如重定向、缓存、网络链接等)实现网络请求,服务器连接部分是通过是Socket而不是封装HttpURLConnection,因此手动实现一下,加深记忆。2、HTTP请求格式贴一张图,来自HTTP请求格式这个图就是实现的核心,通过Socket的输出流,把上述格式的字符串数据传给服务器,再通过输入流读取服务器的响应即可。...
2019-12-29 23:01:16
3852
3
原创 Tinker分析之Dex加载
使用Tinker时一般会用@DefaultLifeCycle注解,由注解处理器作生成一个App类如import com.tencent.tinker.loader.app.TinkerApplication;/** * * Generated application for tinker life cycle * */public class TestApp extends Tink...
2019-11-30 18:38:19
399
原创 MultiDex.install()源码分析
Android 应用 (APK) 文件包含 Dalvik Executable (DEX) 文件形式的可执行字节码文件,这些文件包含用来运行应用已编译代码。Dalvik Executable 规范将可在单个 DEX 文件内引用的方法总数限制为 65,536,其中包括 Android 框架方法、库方法以及自己的代码中的方法,即“64K 引用限制”。为什么引用MultiDex由于Android...
2019-10-23 21:19:18
3806
原创 Transform+Javassist实现一个方法耗时打印
背景某天晚上睡不着在思考一个问题:组件化app module的Application的生命周期如何让lib module感知到,即lib module在应用启动时在自己的Application里做初始化操作而不用写到app module的Application里,实现完全解耦。 查阅资料后发现好像可以用Transform+class代码注入(Javassist)的方式实现,因为以前没接触过,方法...
2019-09-25 22:52:53
1199
2
原创 Android自定义Gradle插件
打包插件的三种方式Build script通过构建脚本生成插件,如在build.gradle中编写apply plugin: 'com.android.application'apply plugin: MyPluginclass MyPlugin implements Plugin<Project> { void apply(Project project) ...
2019-09-19 00:20:01
411
原创 自定义文本闪烁效果
效果思路使用LinearGradient生成文本的高亮部分LinearGradient.setLocalMatrix(mMatrix)设置Matrix,并不断通过修改Matrix的位置来修改高亮部分的位置实现package com.pxq.myapplication.widget;import android.animation.ValueAnimator;import an...
2019-08-26 00:22:53
432
原创 圆形倒计时
效果实现package com.pxq.myapplication.widget;import android.animation.AnimatorSet;import android.animation.ValueAnimator;import android.content.Context;import android.graphics.Canvas;import andro...
2019-07-20 13:34:36
963
原创 shrinkResources true引发的问题及解决
背景今天偶然发现release版本的包上出现图片无法显示的问题,之前在debug版一直没有出现,因为用的SDK需要把图片资源放到drawable下,分析了下apk包,发现相应的图片资源没有被打包进来,起初认为是混淆的原因,但是混淆只是针对代码,后发现了这个配置shrinkResources true介绍“resource shrinking”: the automatic removal ...
2019-06-05 00:24:09
2860
2
原创 自定义SeekBar
实现效果实现功能基本跟原生SeekBar一致可以自定义Thumb大小添加顶部文本显示实现方法TextView + SeekBar组合大概就是更新SeekBar的时候计算当前进度百分比 * 宽度得到偏移量,设置TextView距离左边的偏移量。可以实现(话说一开始就是这样做的),就是要调来调去代码总有自己的想法,而且效果不是那么令人满意。自定义View这不是废话吗~实...
2019-05-15 00:01:53
683
原创 UDP传输中文乱码解决
发送public void send(String msg){ ByteArrayOutputStream ostream = new ByteArrayOutputStream(); DataOutputStream dataStream = new DataOutputStream(ostream); dataStream.writeUTF(msg); ...
2018-07-26 19:08:35
5484
转载 Android.mk编译脚本 & AndroidManifest.xml编写及注释
Android.mk文件详解转自【https://blog.csdn.net/qq_25804863/article/details/48669003】
2018-04-12 11:50:18
486
转载 SpannableString用法记录
SpannableString用法记录转自 用SpannableString打造绚丽多彩的文本显示效果setSpan参数说明flags参数 参数值 说明 Spannable.SPAN_INCLUSIVE_EXCLUSIVE 从起始下标到终了下标,包括起始下标 Spannable.SPAN_INCLUSIVE_INCLUSIVE 从起始下标到终了...
2018-03-29 17:00:29
180
转载 Android4.4 GridView抢焦点
转自http://blog.csdn.net/u010072711/article/details/49780683问题描述:调用setAdapter方法之后焦点会自动跳转到第一个item 解决办法:重写GridView isInTouchMode方法/** * 屏蔽android4.4 setAdapter时View抢焦点的BUG */ @Override public
2018-01-11 11:08:38
353
原创 Cannot load library library "xxxx.so" not found
问题Log: Cannot load library: soinfo_link_image(linker.cpp:1642): could not load library “xxxx.so” needed by “xxxx.so”; caused by load_library(linker.cpp:752): library “xxxx.so” not found解决方法
2018-01-10 20:05:18
4438
转载 ListView保存并还原焦点
原文:http://blog.csdn.net/cgq1030699125/article/details/54343693 盗个图 public class MemListView extends ListView { public MemListView(Context context) { super(context); }
2017-08-09 17:51:05
253
转载 GridView重复调用getView()方法处理方法
转自 在GridView中加载图片时导致OOM,原因是GridView中多次调用了getView()方法,处理如下://初始化convertView...if (position == 0) { mCount++;} else { mCount = 0;}if (mCount > 1) { //避免多次处理position = 0的情况 return conve
2017-08-04 17:25:08
414
原创 屏蔽输入法、显示光标
/** * 屏蔽输入法、显示光标 */ public void disableShowSoftInput() { if (android.os.Build.VERSION.SDK_INT <= 10) { editText.setInputType(InputType.TYPE_NULL); } else
2017-07-06 16:50:21
427
原创 对话框消除黑色背景、边框,设置对话框大小和位置
对话框消除黑色背景、边框使用Dialog自定义主题:<style name="Theme" parent="@android:Theme.DeviceDefault.Light.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowIsFloating">tru
2017-07-06 11:32:44
495
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人