移动开发

Retrofit的原理解析

前言 上篇文章我们分析了OkHttp的原理,不难看出它更多的还是和TCP/IP打交道,做了请求和响应的处理,今天我们来介绍另外一位主人公,那就是我们的Retrofit,它更多的是对OkHttp做了一层封装,方便了我们调用接口,并且对数据进行了转化,对业务侧更加友好。 首先我们来看看它的初始化,慢慢剖析它的源码吧。 Retrofit retrofit = new Retrofit.B

Android中加载Gif动画

Gif动画,我使用了三种方式 1.自定义控件加载gif动画 ①.首先自定义一个GifView,用于显示Gif图片,具体代码如下: public class GifView extends View { private Resources resources; private Movie mMovie; private long mMovieStart; priv

iOS之MD5加密、加盐

MD5加密:HASH算法一种、 是生成32位的数字字母混合码。 特点: 1、任意数据得出的MD5值长度都是32 2、对原数据进行任何改动,所得到的MD5值都有很大区别 应用: 主要运用在数字签名、口令加密等方面 MD5改进(加盐等): 现在的MD5已不再是绝对安全,对此,可以对MD5稍作改进,以增加解密的难度 加盐(Salt):在明文的固定位置插入随机串,然后再进行MD5 写一个NSString分

XCode14 & iOS16 适配问题汇总

1、不升级电脑系统与 Xcode,调试iOS 16 1、下载iOS16 Support文件 2、放置到Xcode DeviceSupport目录重启Xcode即可/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport 2、iOS16手机开启开发者模式 iOS16手机未打开开发者

iOS 开发随笔 (Xcode 13 + iOS 15兼容)

URL Scheme     通过 Xcode13 运行的APP,在 iOS15 系统上会限制 info.plist 的 scheme 白名单个数为 50 个 UITableView sectionHeaderTopPadding     使用 UITableViewStylePlain 初始化 UITableView 的时候,会发现 section header 多出了一截,默认顶部边距为22p

AIDL通信DeadObjectException来源和解决方法

使用过AIDL进行跨进程通信的同学,肯定遇到过DeadObjectException这个崩溃,那么这个崩溃是怎么来的,我们又该如何解决它呢?今天这篇文章就来聊一聊。 崩溃来源 首先,这个崩溃的意思是,多进程在进行跨进程Binder通信的时候,发现通信的Binder对端已经死亡了。 抛出异常的Java堆栈最后一行是BinderProxy.transactNative,所以我们从这个方法入手,看看崩溃

Windows 刷新按钮是如何工作的?

今天我们来聊聊 Windows 刷新按钮是如何工作的? 在当前,遵循相同的过程,但照片现在保存在数字压缩文件中,该文件具有 MP4 或 MKV 等扩展名。 它使视频便携,我们可以在我们的电脑上打开它。 因此,将您的操作系统生成的帧视为图像。 帧一个接一个地显示在屏幕上,让您感觉一切都是连续的。 每个框架都包含不同的 UI(用户界面)组件,例如背景、图标及其名称。 构建每个框架时,所有组件都放置在其

Xcode14.3打包的APP在iOS13.x上启动崩溃闪退

Xcode14.3 ,iOS13.6.1, iOS13.6, iOS13.3, iOS13.x 今天用Xcode 14.3打包安装在iOS 13.x的手机启动崩溃,但是连着Xcode调试时没有问题,不连着Xcode14.3时启动APP就闪退。 从苹果官网看到也有不少人遇到,但是没有具体的解决方案。 目前从以下几点处理这个问题: 1.降级Xcode到14.2打包可解决该问题 2.app 最低目标版

Android 开机自启动Service

1、修改AndroidManifest.xml文件 // 添加接收开机广播的权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> // 注册接收开机广播的receiver <receiver android:name=".BootBroadcastReceiver">

ViewModel源码阅读笔记

MVVM模式实现了数据和页面的分离。ViewModel的生命周期需要跟随引用他的activity或者fragment。接下来我们就来看看,ViewModel是如何实现生命周期的伴随的。 先从ViewModel的创建开始看 XXXViewModel viewModel = new ViewModelProvider(fragment).get(XXXViewModel.class) kotlin