- 博客(215)
- 收藏
- 关注

原创 文章综合导航
很久没写文章了,上次还是好几年前。这两天突然想起在 优快云 还有个账号,于是上来看看,发现之前,,还是写了不少文章的。但整体要找起来还是不太容易,于是决定把之前的文章做下整理。
2023-05-23 22:10:49
327
原创 《Android开发艺术探索》读书笔记-Android IPC机制 (2019-10-09)
Android IPC简介IPC(Inter-Process Communication)。即为进程间通信或者跨进程通信,指的是两个进程之间进行数据交换的过程。进程和线程的相关概念:按照操作系统的描述,线程是CPU调度的最小的最小单元,进程一般指一个执行单元,一般指一个程序应用。一个进程中可以包含多个线程。Android中的多进程模式通过给四大组件指定android:process属性,可以开启Android的多进程。开启多进程模式正常情况下,Android的多进程是指一个应用存在多个进程的情
2024-05-10 20:35:36
706
原创 今日折腾之Django部署:gunicorn+supervisor+nginx
supervisor就是用Python开发的一套通用的进程管理程序.能将一个普通的命令行(supervisorctl start appname)进程变为后台驻留程序(daemon),并监控进程状态,异常退出时能自动重启。最近有一个Django项目需要部署到服务器,这之前没搞过这个啊,历经一番查询之后,决定使用。至此,项目部署完成,部署完成,一步步走下来,多多少少会有些问题,按照提示解决就行了。项目,然后经过一番折腾,总算是顺利跑起来了,于是便有了这篇文章,全当是做个记录了。
2024-05-10 19:44:59
1066
原创 MMKV getAll 不支持的解决思路
MMKV 是按字节进行存储的,这意味着类型信息被擦除了,导致我们无法准确地识别存储的数据类型。虽然 MMKV 提供了一个 getAll() 方法来获取所有数据,但它会直接抛出异常,无法直接使用,对于怎么解决这个问题,经过一番探索,有一点点心得,在此记录一下。思路:既然获取全部时候不能获取到类型,那么在设置时候记录类型就行了,但不记录在key中,而是使用MMKV专门记录key值的类型,这样在获取时候不会产生任何的额外开销,只是在设置的时候有设置操作,直接上代码吧,no BB, show Code。
2024-04-28 00:34:11
1241
2
原创 Exoplayer 扩展 FFmpeg 支持
使用软解,支持格式较多,可通过自编译so扩展格式。基本上是可以满足绝大多数的视频正常播放的,库里面默认的支持格式并不全,要解决问题需要重新编译出so文件,替换了原本的so就好了,流程也是非常的简单。可随着业务的发展,需要播放用户的音视频,随之而来的就是出现了不支持的音视频格式,这下好玩了。的开源项目直接使用,正常来说,是没啥问题的。上去看了下,上次的更新维护时间已经是两年前了,,从而得到更多的格式支持,并且可以选择多种扩展模式,官方说明如下。的,但本着能不改就不改的原则,这里就使用默认的就好了,把。
2024-04-26 19:27:40
1969
1
原创 《Android开发艺术探索》读书笔记-Android的生命周期和启动模式
Activity的生命周期可分为两部分,一种是在正常的执行过程中的生命周期,另一种则是在执行过程中发生异常情况的生命周期,这两种情况在实际开发中都有着的极为重要的作用,因此弄清楚这里面的关系就显得十分必要
2019-10-24 19:42:24
630
原创 Python-5-字典
接触过编程的人应该都知道JSON这个数据格式,python的字典的组织形式类似于JSON,在Python中,字典是一系列键-值对 。每个键都与一个值相关联。
2019-08-05 20:57:21
909
原创 默认电话研究
默认电话研究背景Android 从6.0开始,允许用户设置默认短信和默认电话应用,使用相应的 Intent 便可以设置默认应用从一个框架说起从 API 21 开始,谷歌添加了 TelecomManager 用于提供对电话通讯状态的监听API 23 之后,又开放了 Telecom framework,这个框架允许第三方应用开发者编写应用来替换系统默认电话应用,而其中大部分接口就添加在 an...
2019-08-05 10:01:10
1349
1
原创 Python-4-流程控制
原本紧接列表后面应该时字典的内容,但在这里,先插入一个编程语言中比较常用的概念:流程控制。编程语言的流程可分为三种:顺序,条件,循环本文依次阐述其在python中的代码体现形式。
2019-08-05 03:17:41
551
原创 Python-3-列表和元组
程序是用来处理数据的,那么有两个重要的问题,数据从何而来以及如何存储,这里主要说的就是后一个问题,数据如何存储,Python提供了很好的数据存储类型,列表,元组和字典
2019-08-05 03:17:01
585
原创 Python-2-变量和简单数据类型
既然是编程语言,那么就肯定会涉及到一个重要的概念--变量,变量是编程的起点,这句话一点都没毛病,有了变量的存在,程序才有更多的可能性。Python的基本数据类型包括数字,字符串,布尔值,列表,元组,字典。
2019-08-05 03:16:29
533
原创 OkHttp从使用到源代码分析(4)-Dispatcher任务调度
前面说到了构建OkHttp的三步,那么现在再来看一下OkHttp的核心之一:Dispatcher任务调度。
2019-04-22 02:16:27
2234
原创 OkHttp从使用到源代码分析(3)-使用三步走中的源码分析
上文讲到了OkHttp的使用方法,那么在同步异步中具体代码是怎样构建出来的呢,这边文章就是问说明这个问题而来。
2019-04-22 01:37:21
1436
原创 OkHttp从使用到源代码分析(2)-请求的使用方法
之前说到OKHttp网络请求支持两种方式:同步请求和异步请求,同时又存在get和post请求,那么就是2*2,一共四种情况,接下来就分别介绍下这四种请求的使用和区别在gradle中指定Java版本compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSI...
2019-04-21 21:12:56
6534
原创 OkHttp从使用到源代码分析(1)-官方说明
An HTTP & HTTP/2 client for Android and Java applications.
2019-04-21 15:20:48
1502
原创 源码分析之Handler
Handler是Android中的消息机制实现,可以实现UI线程和子线程的消息传递,这里就来深入了解Android的消息机制,来分析Handler的源代码入手实例在Android开发中,子线程与主线程通信是再寻常不过的事情了,那么为何需要子线程和主线程通信呢,相信只要是做过Android开发都知道这是为啥,为了博客的尽可能详尽,这里还是说说原因举个简单例子,以前刚做Android开发的时候,...
2019-04-06 23:55:37
1922
原创 Android中的算法
算法是思想的体现形式,常见的算法做一些总结算法简介算法—Algorithm解题方案的准确而完整的描述,是一系列解决问题的清晰指令特征有穷性,确切性,输入项,输出项,可行性算法运算要素算术运算:加减乘除等运算逻辑运算:或、且、非等运算关系运算:大于、小于、等于、不等于等运算数据传输:输入、输出、赋值等运算算法优劣评定时间复杂度,空间复杂度,正确性,可读性,健壮性LogN二...
2019-04-06 23:49:06
5754
原创 Android中的数据结构
数据结构在Android中也有着大量的运用,这里采用数据结构与源代码分析相结合,来认识Android的数据结构线性表线性表可分为顺序存储结构和链式存储结构顺序存储结构-ArrayList通过对源代码的产看得知,ArrayList继承自AbstractList,实现了多个接口,其中List里面就实现了常用的一些操作,包括增删改查清除大小等等public class ArrayList<...
2019-04-06 23:47:28
2551
原创 高级UI-UI绘制流程
UI的绘制流程和事件分发,属于Android里面的重点内容,在做自定义UI的时候,更是应该了解UI的绘制流程是如何的,此篇文章就是说明UI的绘制流程,事件分发前面已经详细讲过了UI绘制流程探索这里分析Activity,而不是AppCompatActivity,后者做了兼容处理,前者更容易理清逻辑要知道UI的绘制流程,就需要有一个入手点,而这个入手点就是onCreate(),也就是下面这句代码...
2019-04-06 23:36:14
1829
原创 高级UI-Path和PathMeasure
Path是一个工具类,用来记录线条的轨迹路径,然后通过绘制轨迹路径,可以得到各种各样的图案,而PathMeasure是用来对Path进行测量的工具,再Path的运用中,运用最多的就是贝塞尔曲线,也是本文的重点贝塞尔曲线贝塞尔曲线就是这样的一条曲线,它是依据四个位置任意的点坐标绘制出的一条光滑曲线线性公式给定点P0、P1,线性贝兹曲线只是一条两点之间的直线。这条线由下式给出:且其等同于线...
2019-04-06 23:33:17
2754
原创 高级UI-画板Canvas
Canvas可以用来绘制直线、点、几何图形、曲线、Bitmap、圆弧等等,做出很多很棒的效果,例如QQ的消息气泡就是使用Canvas画的Canvas中常用的方法初始化参数Paint paint = new Paint();paint.setColor(Color.RED);paint.setStyle(Paint.Style.FILL);paint.setStrokeWidth(8...
2019-04-06 23:29:21
2050
原创 高级UI-滤镜和颜色通道
滤镜在图片处理里面有很多的运用,尤其是相机使用了大量的滤镜,通过对颜色通道的调和,可以呈现出各种各样的效果对图像进行一定的过滤加工处理,使用Paint设置滤镜效果很多高级UI使用时候需要关闭硬件加速,不关闭的话,有些API无法支持Alpha滤镜处理MaskFilter处理类paint.setMaskFilter(maskfilter)以下两种处理基于下面的初始化//关闭硬件加速se...
2019-04-06 23:23:39
2067
原创 高级UI-高级渲染
在使用了Panit画笔之后,可以对其进行渲染,从而达到更加人性化的方式渲染分类按常用渲染方式可以分为以下几种:BimapShader位图的图像渲染器LinearGradient线性渲染RadialGradient环形渲染:水波纹效果,充电水波纹扩散效果、调色板SweepGradient梯度渲染(扫描渲染):微信等雷达扫描效果,手机卫士垃圾扫描ComposeShader组合渲染B...
2019-04-06 23:20:49
1876
原创 高级UI-画笔Paint
在UI这一块,谈到自定义,就离不开画笔和画布的使用话题,在自定义控件的时候,为了做出炫酷的效果,我们往往会使用画笔和画布,那么这里我们就先来看看画笔的使用吧简单使用例子自定义一个Viewpublic class PaintView extends View { private Paint mPaint; public PaintView(Context context, @...
2019-04-06 23:18:42
1926
原创 高级UI-自定义控件
自定义控件在Android开发中有着大量的运用,为了做出符合项目的效果很多时候需要自定义控件,这里就使用两个自定义控件,来说明自定义控件的使用流程仿QQ侧滑之前使用DrawerLayout和NavigationView都实现了侧滑的效果,在这里使用自定义的View完成相同的效果这里考虑到的是继承HorizontalScrollView,复写里面的onMeasure方法,设置滑动菜单和主菜单的...
2019-04-06 23:16:01
1769
原创 高级UI-事件传递
事件传递在Android中有着举足轻重的作用,那么事件的传递在Android中又是怎么样实现的呢,在这里我们将进一步探讨Android的事件传递机制从一个例子入手首先是一个简单的onTouch和onClick事件的例子public class TouchAndClickActivity extends AppCompatActivity implements View.OnTouchList...
2019-04-06 23:14:31
1873
原创 高级UI-自定义动画框架
有的时候会需要做一些自定义的动画效果,在会反复用到的动画效果可以考虑做成动画框架,方便使用,做成框架的话就需要考虑很多的问题,最典型的问题就是属性和方法必须要是可配置的,这里就来聊一聊自定义动画框架的做法重难点分析在自定义动画框架里面,最难的一个问题就是怎么样获得属性,如果直接写自定义的属性,那么编译时候就会报错了,那么自然就想到了在外层包裹自定义的属性,通过处理自定义的属性来得到,这样便是a...
2019-04-06 23:11:54
1893
原创 高级UI-SVG
栅格图可以实现图片的清晰显示,但这也意味着如果要在各种设备上使用栅格图,那么在使用的时候就会产生为了适配各种尺寸的设备而增加大量不同规格的栅格图,这也直接导致了资源文件体积的增大,矢量图就不存在这个问题,这里就介绍一种矢量图–SVGSVG的简介SVG可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式。SVG是W...
2019-04-06 23:09:42
2086
原创 高级UI-MD动画
MD动画是谷歌推出的一种动画效果,其实现的效果能让用户看着很是舒服,符合MD动画的动画,有很强的用户交互体验Touch Feedback(触摸反馈)在触摸反馈这一块,用的最多的就是水波纹效果,而水波纹效果是从5.0才开始出现的,从5.0开始,便已自带水波纹效果以下是一个水波纹的按钮示例<?xml version="1.0" encoding="utf-8"?><Line...
2019-04-06 23:06:15
2123
原创 高级UI-属性动画
在3.0以前,动画效果主要为补间动画(TweenAnimation)和帧动画(FrameAnimation),从3.0开始加入了属性动画,其本质就是不断地改变控件的属性,从而达到复杂的动画效果,其效果也优于之前的动画效果,而且真正的实现了View动画补间动画(Tween Animation)渐变动画支持四种类型:平移(Translate)、旋转(Rotate)、缩放(Scale)、不透明度(...
2019-04-06 22:59:36
2754
原创 高级UI-自定义Behavior
Behavior本身是一个抽象类,可以用于两个view之间的状态监听,也可用于某个view监听CoordinateLayout里面的所有控件滑动状态,实现自定义Behavior则可以实现任意两个view之间的状态变化简单使用这里我们自定义一个Behavior,继承自CoordinatorLayout.Behavior,实现观察者随着被观察者的位置改变而变动需要重写layoutDependsO...
2019-04-06 22:53:04
2162
原创 高级UI-FloatingActionButton
FloatingActionButton为悬浮按钮,就是常见的那种悬浮在控件上,可以调出其他菜单的按钮FloatingActionButton的特有属性app:backgroundTint 按钮的背景颜色app:backgroundTintMode 按钮背景颜色的模式app:borderWidth 该属性如果不设置0dp,那么在4.x的sdk上FAB会显示为正方形,而且在5.0以后的sdk...
2019-04-06 22:51:50
2368
原创 高级UI-CardView
CardView是在Android 5.0推出的新控件,为了兼容之前的版本,将其放在了v7包里面,在现在扁平化设计潮流的驱使下,越来越多的软件使用到了CardView这一控件,那么这篇文章就来看看CardView怎么使用吧CardView的特有属性cardBackgroundColor 背景色cardCornerRadius 边缘弧度数cardElevation 高度cardMaxEle...
2019-04-06 22:50:15
1867
原创 高级UI-沉浸式设计
关于沉浸式设计,在国内指的是Toolbar和系统状态栏相统一,而谷歌官方给出的沉浸式则是指整个界面为UI所用,而这里所说的沉浸式则是指的前者,涉及4.4和5.0及以上,4.4以下的Android做不出沉浸式设计头部沉浸式在5.0及以上可以很简单的实现沉浸式,统一头部和和Toolbar的色彩,其主要是实现方式有三种使用注意事项要对系统版本做判断,分为三种情况,4.4以下,4.4,5.0及以上...
2019-04-06 22:47:52
3761
原创 高级UI-TableLayout
TableLayout选项卡,用于需要使用选项卡的场景,一般是用于切换Fragment,现在的主流做法一般是TableLayout+ViewPager+Fragment,综合实现选项卡的操作由于TableLayout位于support-design里面,故在使用前要导入依赖implementation 'com.android.support:design:25.4.0'准备测试布局ap...
2019-04-06 22:47:12
1906
原创 高级UI-Palette
Google推出的Palette是用来调色的,正如其汉语意思一样,可以用来显示颜色,在显示图片的时候,会配合图片的色调来显示,这样就显得很融合,其实Palette可以分析出图片中的很多特性,例如主色调、鲜艳度、柔和度等Palette获得的颜色其主要的获取颜色方法如下:获取主要颜色:getDominantColor()获取柔和颜色:getMutedColor()获取鲜艳颜色:getVibr...
2019-04-06 22:11:26
1834
原创 高级UI-符合MD的常用控件
在Google提供的控件中,在support-design及v4,v7包中,存在着很多符合MD标准的控件,这里罗列出一些常用的控件TextInputLayout这个控件在作为输入框的时候是极其方便及好用的,结合EditText使用<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http:...
2019-04-06 22:09:09
2039
原创 高级UI-Snackbar
在与用户的交互中,最为常用的Toast和Dialog,但二者都存在其局限,Toast无法与用户进行交互,Dialog虽然可以与用户交互,但却会阻断用户操作的连贯性,介于二者之间的平衡,Snackbar孕育而生自定义Toast首先我们来做一个自定义的Toastpublic class MainActivity extends AppCompatActivity { @Override...
2019-04-06 21:53:01
1721
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人