自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 仿开眼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

原创 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

原创 Android APK加载外部资源文件

1、背景学了点东西,实践点东西2、资源加载流程

2020-02-10 23:33:50 1674

原创 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关注的人

提示
确定要删除当前文章?
取消 删除