- 博客(50)
- 资源 (3)
- 收藏
- 关注
原创 iOS 后台运行保活
前言iOS有两种后台运行保活方式,第一种叫无声音乐保活(即在后台开启音频播放,只不过不需要播放出音量且不能影响其他音乐播发软件),第二种叫Background Task,但是这种方法在iOS 13以后只能申请短短的30秒钟时间,但是在iOS7-iOS13以前是可以申请到3分钟的保活时间的,当然我们也可以经过处理来申请到更多的保活时间。无声音乐保活(1)打开应用的Target页面Sign...
2019-10-18 15:50:47
7256
1
原创 iOS Mac Url Scheme唤起App
Url SchemeUrl Schemeios Url Scheme配置1.选中项目,点击Info,打开URL Types。2.添加一条Url Scheme3.捕获第三方唤起请求4.通过网页唤起app5.通过openUrl开启系统app6.Url Scheme白名单Url SchemeUrl Scheme(url 协议),顾名思义就是用于提供一个对外协议,用于第三方app或者网页唤起该应用...
2019-08-13 19:56:02
2708
原创 Okhttp超时时间设置和相关问题解决
okhttp超时设置okhttp超时相关问题超时时间设置日志拦截器java.net.UnknownHostException异常DNS解析异常拦截okhttp超时相关问题设置了超时时间,但是超时时间还是很长,因为在DNS异常处理时花费了大量时间,我们需要给DNS解析设置超时时间UnknownHostException异常处理日志拦截器打印请求和回传消息超时时间设置//okhtt...
2019-07-29 19:31:52
7240
原创 Android P非SDK接口限制
写在前头Android Pie(API 28)开始对非SDK接口的使用开始做了限制.只要应用引用非 SDK 接口或尝试使用反射或 JNI 来获取其句柄,就会被限制。这些限制旨在帮助提升用户体验和开发者体验,为用户降低应用发生崩溃的风险,同时为开发者降低紧急发布的风险.官网针对非SDK接口限制的解释SDK接口和非SDK接口SDK接口是指Android 框架软件包索引中记录的那些接口,...
2019-05-26 20:05:57
2479
5
原创 java.lang.UnsatisfiedLinkError解决办法
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader首先找到bulid.gradle(Moudle)文件添加以下两个配置(1)在defaultConfig 中添加 defaultConfig { multiDexEnabled true ndk { abiFilt...
2019-05-23 18:45:56
7649
原创 Glide加载部分图片不显示问题
图片不显示原因没有添加INTERNET网络权限图片Url无法连接图片返回数据不全没有添加INTERNET网络权限解决办法:在Manifest中添加网络权限<uses-permission android:name="android.permission.INTERNET"/>图片Url无法连接例如:http://img1.imgtn.bdimg.com/it/u=...
2019-04-28 16:12:58
11323
原创 oc 单例模式(ARC和MRC)封装宏
ARC环境下实现单例模式@interface Test:NSObject&amp;amp;amp;amp;amp;amp;lt;NSCopying,NSMutableCopying&amp;amp;amp;amp;amp;amp;gt;+(instancetype)default;@end;@implementation Teststatic Test *instance;//1.重写allocWithZone+(instancetype)
2019-02-16 16:13:13
535
原创 iOS 事件分类及事件分发机制
什么是事件分发机制,当用户触碰屏幕后,其事件的传递过程被称作事件的分发,IOS的事件分发机制大致原理与Android及其相似。该事件传递过程往往都是由父控件一步一步向其子控件进行分发的。事件分类在Ios中事件被分为了3类:触摸事件:手指触碰屏幕时触发的事件。加速事件:当手机加速度改变时触发的时间(列如摇一摇)。远程控制事件:当用户使用远程遥控设备时触发的事件。哪些View可以响...
2018-11-24 22:12:23
914
原创 Android intent-filter意图过滤器
intent-filter意图过滤器 意图过滤器在Android中应用比较广泛,但是我们使用得最多的还是给启动页面设置意图过滤器,这样我们才能在打开一个应用时知道第一个启动的Activity是哪一个.当然Intent-filter不止拥有这一个功能.还可以实现页面和原生的跳转,实现隐式意图的响应等.category(类别):category中一般会配置一条默认的参数,“android....
2018-11-08 16:01:41
1352
原创 iOS 图片拉伸的多种方式
ios图片拉伸 在开发过程中我们经常会遇到一些图片像素不够,需要拉伸放大来作显示,列如聊天背景框需要跟随内容而拉伸适应,但是如果直接改变图片宽高会使得图片变得模糊。所以我们就要来想办法保护一部分图片不做拉伸,只对局部进行拉伸以确保图片不被拉伸变形。这里提供了三种拉伸方式,其原理都是设置保护区域,只对中间一个像素点进行拉伸。效果展示左边是直接拉伸宽高 右边是拉伸一个像素点resiz...
2018-11-06 19:14:21
1888
原创 Android MVP架构封装
目录什么是MVP架构mvp三层含义mvp模型图mvp和mvc的不同在mvp中使用LifeCycle绑定生命周期P层封装通过LifeCycle实现P层接口IPresenterP层具体实现M层封装M层具体实现V层封装V层接口基础Activity基础Fragment源码地址什么是MVP架构mvp是目前使用最为广泛的架构,其本质上是对mvc的改进,可以是代码结构更为清晰,解耦合,分离了视图逻辑和业务逻...
2018-10-07 17:16:49
3045
1
原创 Java 四种常见线程池解析
目录四种常见线程池ThreadPoolExecutorFixedThreadPoolChachedThreadPoolSingleThreadExecutorScheduledThreadPool四种常见线程池线程池用于管理线程的创建与销毁,避免无用线程造成资源浪费,当需要创建多个线程时,我们往往需要一个管理者来管理这些线程,这也就引入了线程池的概念.Android中有四种较为常见的线程池也...
2018-10-05 15:56:55
1633
原创 Android 官方体系架构Lifecycle
前言Java中通过ThreadPoolExecutor来创建线程池,传入参数不同,就可以创建出不同的线程池,常用线程池有FixedThreadPool,ChachedThreadPool,SingleThreadExecutor,scheduledThreadPool.ThreadPoolExecutor参数详解corePoolSize:核心线程数,必须传入,否则线程池为空,如果当前...
2018-09-18 13:47:52
1211
原创 Android 性能优化(内存优化和布局优化)
布局优化 我们可以通过手机开发者选项中的调试GPU过度来查看布局绘制的复杂情况。避免overdraw,使用RelativeLayout来替换掉多层LineraLayout嵌套减少View树的层数,Google Api文档中建议View树的高度不大于10使用&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;include&amp;amp;amp;amp;amp;amp;amp;amp;amp;a
2018-09-02 16:56:15
6356
3
原创 ActivityManager解析及使用
前言Activity可以获取运行中的应用信息,可以获取到servcie,process,app,memory信息等。 获取信息ActivityManager.MemoryInfo MemoryInfo中重要的字段:availMem(系统可用内存),totalMem(总内存),threshold(低内存阈值,即低内存的临界线),lowMemory(是否为低内存状态)Debug.M...
2018-08-27 18:54:12
21994
2
原创 Android 指纹识别(Touch ID)实例
指纹识别 指纹识别的支持是Android6.0以后才开始的,Google也为指纹识别提供了一些列接口,指纹识别将要用到的核心API为FingerprintManager,其中还有三个核心内部类:FingerprintManager.AuthenticationResult 指纹识别后结果的回调,FingerprintManager.AuthenticationCallback指纹识别成功失败...
2018-08-19 17:11:07
5814
3
原创 Flutter 闪屏页(开屏页)
Flutter 闪屏页(开屏页) 先来说一下我们需要实现的效果,我们需要实现一个三秒钟后自动跳转到主页面的一个开屏页面,且该页面如果用户点击了屏幕后我们需要立即跳过开屏页面。到了主页面后用户点击返回时直接退出程序而不是跳转回开屏页面。新建images文件夹用于存放图片(把images文件夹建在根目录下即可)为图片配置路径编写main.dart让其开启第一个页面为开屏页面编写开屏页...
2018-08-16 21:16:22
10245
2
原创 Spring基础详解
文章内容 什么是Spring Spring中Bean的配置 ApplicationContext Spring支持四种依赖注入的方式 Spring中Bean的相互引用 Null值和级联属性 集合属性赋值 Bean自动装配 Bean的作用域 Bean之间的关系 Bean的使用外部属性文件 ...
2018-07-28 16:31:19
793
原创 Java 虚拟机
运行时数据区域 方法区:方法区是线程共享的,用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。虚拟机栈:虚拟机栈是线程私有的,其生命周期与线程相同即每个线程下都有一个虚拟机栈,每个方法在执行前都会创建一个栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等。每一个方法从调用到完成就对应着一个栈帧入栈到出栈的过程。本地方法栈:作用类似于虚拟机栈,虚拟机栈...
2018-07-28 11:27:14
692
原创 Android Fragment使用详解
Fragment生命周期onAttach(Activity):当Fragment和Activity发生关联时使用onCreateView(LayoutInflater, ViewGroup, Bundle):创建该Fragment的视onActivityCreate(Bundle):当Activity的onCreate方法返回时调用onDestoryView():与onCreateView相对应,...
2018-07-01 10:41:32
987
原创 Android 约束布局ConstraintLayout解析
前言 ConstraintLayout是一个Support库,它支持向前兼容,最低可支持到API 9(android 2.3)目前app兼容性都是做到4.0以上所以ConstraintLayout的兼容性问题完全不用考虑,其本身更像是对RelativeLayout的升级,效率更高且更实用。 相对定位 layout_constraintLeft_toLeftOf vi...
2018-06-26 15:05:45
16428
1
原创 Django搭建Web应用
前言 Django是一款开源Web框架,由Python编写,用了MTV的框架模式,即模型M(model),模板T(templates)和视图V(view)。其自带了sqlite3数据库也可以使用mysql数据库。如果你只希望简单实现web后端或者api接口可以使用Flask,Flask更为轻量且方便,但是如果你需要完整实现web后端及管理系统则Django是更好的选择。安装Django(通过...
2018-06-22 15:21:42
1016
原创 Rxjava2+Retrofit2网络请求
前言 Rxjava2这种通过观察者模式来处理异步问题,使得网络请求变得更容易,目前Rxjava2越来越火,也成为了不少框架用于异步处理的首选开源库。所以熟练掌握其基本用法也就成为了每个程序员应该具备的本领。 Gradle中添加依赖 //Rxjava compile 'io.reactivex.rxjava2:rxandroid:2.0.2' co...
2018-06-18 19:53:46
1431
3
原创 Java 多线程间通信及线程安全
多线程间通信的意义 java中使用多线程操作同一数据时,需要考虑到线程间的通讯,否则会出现数据错误,程序死锁卡死的情况。所以多线程在操作同一数据时必须考虑其先后顺序以保证数据准确,且不会出现死锁的情况。多线程间的通信往往是通过等待机制来实现的,等待某一线程执行完毕或者放弃内存后,再启动另一线程。常使用的两种方法:synchronized和线程锁Lock。 synchr...
2018-05-16 16:57:27
2120
1
原创 Android 四大组件之BroadcastReceiver广播接收器(使用详解)
BroadcastReceiver 用于接收系统广播或者一些广播消息,我们可以通过广播实现通知组件信息变更,跨应用通信和跨进程通信。由于广播在android中的到了广泛应用,列如开机启动服务,电量变化,音量变化都是广播,所以BroadcastReceiver广播接收器也被作为了android四大组件之一。广播分为三类:普通广播(无序广播),有序广播,粘性广播。Broa...
2018-05-09 16:51:25
2606
原创 Java反射机制
什么是反射 java的反射机制可以说也是java比较核心的部分,及通过字节码文件来创建对象,访问其成员变量和调用其成员方法。且这种访问无论该对象是否私有都能被访问到,也被称作暴力访问。这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。当类被编译后,JVM将对其生成.class文件,也就是字节码文件,该文件包含了所对应类的信息,当然是以二进制的方法进行存储的...
2018-04-27 23:14:54
1027
原创 Android 插件式换肤实现
写在前头 Android的换肤机制有不少,通过加载不同资源文件进行换肤,通过不同的Style文件进行换肤,但是最主流的还是插件式换肤,将资源文件打成一个包,通过AssetManager去加载这个包中的资源文件来换肤。 换肤代码public class SkinManager { private SkinManager(){ } private st...
2018-04-15 14:15:56
912
原创 Android WakeLock休眠锁
WakeLock(休眠锁) WakeLock用于保持设备的唤醒状态,有些情况下,即时用户不操作App,我们也需要保持屏幕处于唤醒状态,以保证用户体验,比如视频类APP和计步类APP,视频类APP需要屏幕一直保持常量,计步类APP要求熄屏后程序依然保持运行状态。 WakeLock的多种类型: PARTIAL_WAKE_LOCK:保持CPU正常运转,但屏幕和键盘灯都可能是...
2018-04-05 14:29:24
4684
原创 Android 跨进程通信Messenger和AIDL
进程间通信IPC IPC是 Inter-Proscess Communication的缩写,含义为进程间的通讯或者跨进程通讯,是指两个进程之间进行数据交换的过程。按操作系统的中的描述,线程是CPU调度最小的单元,同时线程是一种有限的系统资源,而进程是指一个执行单元,在PC和移动设备上指一个程序或者一个应用。一个进程可以包含多个线程,因此进程和线程是包含于被包含的关系。为什么要使...
2018-03-31 15:49:45
1079
原创 Android 数据序列化实现方法
数据序列化的作用 可实现进程间通信,本地数据存储,网络数据传输等都需要实现序列化,但是由于应用场景不同,序列化的方式也不同,因为要考虑效率和使用难易的问题。序列化的目的其实简单来说就是想实现数据的传输。序列化与反序列化 序列化:将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序...
2018-03-22 17:28:47
1244
原创 Android 让app更加动人(美化)
一、高斯模糊 高斯模糊就是类似于图片模糊的效果,高斯模糊(英语:Gaussian Blur),也叫高斯平滑,是在Adobe Photoshop、GIMP以及Paint.NET等图像处理软件中广泛使用的处理效果,通常用它来减少图像噪声以及降低细节层次。 效果图(图片来源于网易云音乐,其音乐播放背景就是中间图片的高斯模糊) (1)高斯模糊算法部分@Requir...
2018-03-20 08:57:01
10323
原创 Python网络爬虫之模拟登陆
为什么要模拟登陆 Python网络爬虫应用十分广泛,但是有些网页需要用户登陆后才能获取到信息,所以我们的爬虫需要模拟用户的登陆行为,在登陆以后保存登陆信息,以便浏览该页面下的其他页面。 保存用户信息 模拟登陆后有两种方法可以保存用户信息,通过Session来保存登陆信息或者通过Cookie来保存登陆信息一、Session的用法# 导入requests模块...
2018-03-16 10:44:49
24534
5
原创 Rtrofit2+Okhttp让网络请求更简单
Rtrofit与Okhttp简介 提到Rtrofit和Okhttp就不得不说到square团队,这是一个非常优秀的团队,其团队奉献了不少优秀的开源库。目前Rtrofit和Okhttp可以说是android网络框架中的明星,其使用简便和配合解耦度高使得它们成为了android程序员们的最爱,目前使用的Rtrofit为2.0以后的版本。Retrofit官网Square团队的github地址Rtr...
2018-03-12 20:21:49
1410
原创 玩转ButterKnife注解(黄油刀)
写在前头 身为一个Android程序员,最麻烦的事情应该就是绑定View吧,一个类有的有十多个View需要绑定更有甚者甚至超过个一百个。一个不会偷懒的程序员一定不是一个好程序员。为了偷懒ButterKnife就应运而生了,ButterKnife可以说是一款很成功的开源库。它不仅可以帮我们绑定View,还可以用来绑定资源文件。 ButterKnife的优点:(1)代码简洁,易懂...
2018-03-02 19:34:00
924
原创 Android 贝塞尔曲线-消息拖拽消失
写在前头 写消息拖拽效果的文章不少,但是大部分都把自定义View写死了,我们要实现的是传入一个View,每个View都可以实现拖拽消失爆炸的效果,当然我也是站在巨人的肩膀上来学习的。但个人觉得程序员本就应该敢于学习和借鉴。源码地址:源码Github地址 效果图 分析(用到的知识点): (1)ValueAnimator (数值生成器) 用于生成数值,可以设置...
2018-02-07 20:23:30
1660
原创 Python 装饰器理解与使用
Python装饰器(英文decorator) 本质是函数 为其他函数添加附加功能。装饰器本身也是Python的一个重点,所以无论如何你必须弄懂它。装饰器的存在其实就是为了在需要添加新功能时不影响之前版本的使用的同时来增加新功能,其实也是一种“偷懒”的办法。它的使用场景较多,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同...
2018-02-04 21:34:16
2649
原创 Python 魔法方法详解
什么是Python魔法方法 魔法方法就如同它的名字一样神奇,总能在你需要的时候为你提供某种方法来让你的想法实现。魔法方法是指Python内部已经包含的,被双下划线所包围的方法,这些方法在进行特定的操作时会自动被调用,它们是Python面向对象下智慧的结晶。初学者掌握Python的魔法方法也就变得尤为重要了。 为什么要使用Python魔法方法 使用Python的魔法...
2018-02-02 20:50:50
13461
3
原创 EventBus事件处理总线
写在前头 EventBus 是一个事件处理总线,可以代替Android传统的Intent,Handler,Broadcast或接口函数,在Fragment,Activity,Service线程之间传递数据,执行方法。它比广播的使用更为简便,且广播的效率并不高。 EventBus的优势简化了组件间的通讯 分离了事件的发送者和接受者 在Activity、Fragment和...
2018-01-30 18:16:24
1492
原创 Python 网络爬虫入门详解
什么是网络爬虫 网络爬虫又称网络蜘蛛,是指按照某种规则在网络上爬取所需内容的脚本程序。众所周知,每个网页通常包含其他网页的入口,网络爬虫则通过一个网址依次进入其他网址获取所需内容。优先申明:我们使用的python编译环境为PyCharm 一、首先一个网络爬虫的组成结构:爬虫调度程序(程序的入口,用于启动整个程序) url管理器(用于管理未爬取得url及已经爬...
2018-01-28 21:01:42
110439
30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人