自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 资源 (4)
  • 收藏
  • 关注

原创 通俗易懂的JVM详解

1、运行流程java程序经过一次编译之后,将java代码编译为字节码也就是class文件,然后在不同的操作系统上依靠不同的java虚拟机进行解释,最后再转换为不同平台的机器码,最终得到执行2、JVM基本结构从这个结构不难看出,class文件被jvm装载以后,经过jvm的内存空间调配,最终是由执行引擎完成class文件的执行3、内存空间方法区:所有线程共享,里面存有常量池、静态变量、类信息Java堆:所有线程共享,里面存有该虚拟机的所有对象/实例,可以想象你的一个系统会产生很多实例,因此ja

2021-05-31 17:54:58 277 3

原创 通俗易懂的Glide详解

Glide.with(this).load("").into(view)1、整个流程详解1)首先,Glide.with(activity)方法得到RequestManager类,这个类的主要作用是将glide 与 整个组件的生命周期绑定在一起。(它实现了LifecycleListener接口,这是一个与Context的生命周期绑定的接口,将request与生命周期绑定,这样就可以通过context的生命周期去操作网络请求的开始,暂停等。)如何绑定的??答:在Activity上创建一个透明无界面的Re

2021-05-29 11:12:07 837

原创 通俗易懂的Rxjava详解

基本使用主要分三步:1、创建被观察者。【Observable.create()】2、创建观察者。【new Observer()】3、被观察者订阅观察者【Observable.subscribe(Observer)】

2020-10-13 16:18:53 2527

原创 通俗易懂的Retrofit详解

Retrofit主要是利用动态代理的方式,获取其执行时的方法上的注解+形参等数据,并保存于serviceMethod对象中。serviceMethod和args(形参的值)全都存入OkHttpCall中,serviceMethod.adapt最终返回的是将serviceMethod和okHttpCall绑在了一起。调用Call/Observable的enqueue()—>OkHttpCall的enqueue()—>okhttp的enqueue()。得到数据回调对应的方法中interface x

2020-10-12 17:41:58 2778

原创 通俗易懂的自定义view详解

原文:https://blog.csdn.net/guolin_blog/article/details/16330267自定义View的分类1、继承View当我们需要实现的效果是一个不规则效果的时候,那么这时就需要继承 View 来实现了,我们需要重写 onDraw 方法,在该方法里实现各种不规则的图形和效果。当我们使用这种方式的时候,需要自己去处理 warp_content 和 padding。@Override protected void onMeasure(int widthMea

2020-10-10 15:48:39 769 1

原创 通俗易懂的handler原理解析

先来说一下流程1、ActivityThread中通过Looper.prepareMainLooper() 创建looper对象1)在Looper.prepareMainLooper() 方法中,如果有Looper实例会报错,所以一个线程中只能有一个Looper实例2)在Looper.java类中直接创建sThreadLocal,ThreadLocal是一个线程内部的存储类,可以在指定线程内存储数据,数据存储以后,只有指定线程可以得到存储数据3)通过下图也可以看出ThreadLocal也是只能有一

2020-09-29 18:02:48 525

原创 android面试2021

android面试2019activityactivity生命周期activity四种启动模式activity启动流程fragmentfragment作用fragment生命周期功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不...

2019-09-17 18:07:22 1727 2

原创 完美解决低版本android系统Textview因全半角特殊符号,导致异常换行的问题

/onDraw可能会被多次调用,因此不是每次调用都需要重绘,这里做了个判断,text是否跟上一次一样,若一样,不再计算,否则重新计算赋值。调整TextView显示文本,因全半角特殊符号,导致异常换行的问题的控件。

2023-12-07 16:22:10 477

原创 Surfaceview+MediaPlayer存在黑边框问题

SurfaceView的大概原理就是在现有View的位置上创建一个新的Window,内容的显示和渲染都在新的Window中。但是呢,由于SurfaceView的内容没有显示在View中而是显示在新建的Window中, 使得SurfaceView的显示不受View的属性控制,不能进行平移,缩放等变换,也不能放在其它RecyclerView或ScrollView中,一些View中的特性也无法使用。它是将内容流直接投放到View中,并且可以和其它普通View一样进行移动,旋转,缩放,动画等变化。

2022-11-18 15:20:55 552 1

原创 android关于视频压缩框架使用心得

android视频压缩框架汇总

2022-06-30 18:14:02 2986 6

原创 Android版本中蓝牙简介

android版本中蓝牙简介

2022-06-14 10:34:04 1649

原创 HashMap原理

当HashMap储存到总长度的75%,会自动扩容2倍

2022-03-10 17:01:47 267

原创 flutter web调用手机摄像头并切换前后摄像头

flutter web调用手机摄像头并切换前后摄像头

2022-02-25 17:22:18 3054

原创 flutter常用到的终端指令

flutter-web局域网内调试:flutter run -d chrome --web-hostname 192.168.20.24 --web-port 8088 --no-sound-null-safetyflutter-web打包指定渲染器:flutter build web --web-renderer html --no-sound-null-safety持续更新。。。

2022-01-04 10:24:05 1189

原创 flutter web实现微信网页授权登录

1、首先我使用了Getx来管理路由和获得用户同意登录后的codevoid main() { runApp(const MyApp());}class MyApp extends StatelessWidget { const MyApp({Key? key}) : super(key: key); @override Widget build(BuildContext context){ HttpUtil.getInstance(); return GetMat

2021-12-29 09:40:35 3489 4

原创 解决livedata的粘性事件

MyMutableLiveData 继承 MutableLiveDataclass MyMutableLiveData : MutableLiveData<Any>() { open inner class WrapperObserver(private val stick : Boolean = false, //是否是粘性观察,是的话会收到订阅之前的消息 private val observer : Observer<Any>) : Observer<An

2021-12-11 15:55:15 1993

原创 解决scrollview+刷新控件+recyclerview滑动冲突

//阻止子view获得焦点//在刷新控件里加上该属性即可android:descendantFocusability="blocksDescendants"

2021-12-08 15:35:07 145

原创 解决打开新页面EditView自动获取焦点,软件盘没有弹出

class SearchActivity : BaseActivity, ViewTreeObserver.OnGlobalLayoutListener { override fun initView() { super.initView() //布局的状态发生变化或者可见性发生变化才会调用 mBinding.etContent.viewTreeObserver.addOnGlobalLayoutListener(this) } overrid

2021-11-25 15:10:14 399

原创 android无障碍整体编写

准备:一、打开monitor.bat 我的在 D:\androidSDK\tools\monitor.bat 如果打开报错方法一:进入D:\androidSDK\tools\lib\monitor-x86_64 打开monitor.exe方法二:任务管理器(ctrl+alt+delete)结束 monitor.bat 程序,删除 monitor-x86_64 下所有文件,再重新打开二、如果想看当前页面的类名使用adb命令adb shell dumpsys window | findstr

2021-11-25 15:01:44 1926

原创 android组件化单独运行

1、在 gradle.properties 中加上 isModule=true2、在对应的 build.gradle 中加上if(isModule.toBoolean()){ //表示可单独运行 apply plugin: 'com.android.application'}else{ //表示该module是个library,不可单独运行 apply plugin: 'com.android.library'}3、在对应的 build.gradle 中的android{

2021-11-09 17:29:19 1691

原创 android定位到市

<!--定位权限--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>// 请求结果,返回一个map ,其中 key 为权限名称,value 为是否权限是否赋予registerForActivityRe

2021-11-09 17:18:47 1815

原创 python-selenium配置环境变量+使用

1、安装seleniumpip install selenium2、下载浏览器驱动Chrome/Firefox要先查看当前浏览器版本是多少:设置->帮助->关于chrome即可查看版本然后点击浏览器驱动中心https://npm.taobao.org/mirrors/chromedriver找到对应的版本驱动进行下载3、配置环境变量我的电脑属性->高级系统设置->环境变量,在系统变量中找到Path点进去进行配置驱动在哪个路径下就把对应的路径配置上,最好不要放在有中文的

2021-08-02 09:48:04 2475

原创 python简单爬虫代码

业务需求:给到一个Excel文件里面有店铺名称,在酒仙网搜索店铺,查看是否关店和商品是否下架# -*- coding: UTF-8 -*-import requestsfrom tkinter import *from tkinter import filedialog, messagebox, ttkimport xlrdimport xlwtfrom bs4 import BeautifulSoupfrom concurrent.futures import ThreadPoolEx

2021-07-27 17:04:55 2700

原创 python-tk身份证读取页面编写

业务需求:集成华视电子身份证读取sdk,通过requests库进行网络请求并解析,然后将读取到的身份证信息采用sqlite3持久化到本地直接上代码,里面有注释# -*- coding: UTF-8 -*-from tkinter import *import requests# import tkinter.messagebox as msgboximport sqlite3# 连接设备def linkRequest(): analysisJson('http://127.0.

2021-07-23 10:56:53 452

原创 注解与反射的使用

class MyAnnotation { companion object{ @JvmStatic fun main(args: Array<String>) { //main函数 checkField(UserBean("pjxx",111)) } fun checkField(bean:UserBean){ //通过反射得到Class对象 //方式一: val

2021-07-05 15:26:25 81

原创 通俗易懂的synchronized、lock、volatile

一、synchronized:内置的关键字,当一个线程获得锁时,其他的线程只能等待,这个线程释放锁,其他的线程才能获得该锁1、类锁:需要static,第二种如果包含全部方法代码就和第一种一样,如果只包含部分代码,就是代码块锁了 public static synchronized void test(){ // TODO } 或 public static void test(){ synchronized (TestSynchronized

2021-06-24 15:36:05 225

原创 通俗易懂的SharedPreferences与MMKV区别

它俩都是轻量级的数据持久化工具1、SharedPreferencesSP存储方式为xml,直接使用I/O流进行文件的读写,这就形成了一个弊端:每次写入或修改都需要替换掉原来的数据,并将所有数据 重新写入文件。可想而知,如果一个sp文件的内容过多,那么再写入的时候会造成卡顿,甚至会有 ANR的风险。1、调用write,告诉内核需要写入数据的开始地址与长度2、内核将数据拷贝到内核缓存3、由操作系统调用,将数据拷贝到磁盘,完成写入可见,将数据写入文件需要将数据拷贝两次,再写入到文件中,如果数据量过大,

2021-06-07 17:49:10 566 1

原创 android动态换肤详解

1、切换本地主题theme例如:attrs.xml文件<resources> <!-- 控制app背景色 format:颜色值、资源引用 --> <attr name="custom_attr_app_bg" format="color|reference" /> <!-- 控制app标题栏背景色 format:颜色值、资源引用 --> <attr name="custom_attr_app_title_layout

2021-06-03 17:58:20 601 2

原创 android使用第三方软件打开本地doc、pdf、ppt、text等文件

private Map<String, String> getMimeMap() { Map<String, String> mapSimple = new HashMap<>(); if (mapSimple.size() == 0) { mapSimple.put(".3gp", "video/3gpp"); mapSimple.put(".apk", "application/vnd.a

2021-05-11 10:29:51 1711

原创 uri转真实path

public class UriToPathUtils { /** * 根据Uri获取图片的绝对路径 * * @param context 上下文对象 * @param uri 图片的Uri * @return 如果Uri对应的图片存在, 那么返回该图片的绝对路径, 否则返回null */ public static String getRealPathFromUri(Context context, Uri uri) {

2021-05-08 16:10:51 1003

原创 python常用的基本内置函数

1、enumerate():自动得到下标和值seq = ['one', 'two', 'three']for i, element in enumerate(seq): print i, element0 one1 two2 three遍历删除# 带条件按下标删除用poplist_a = [1,2,3,4,2]for i,v in enumerate(list_a): if i == 2 or i == 3: list_a.pop(i)print li

2021-05-07 19:20:46 447 6

原创 读取Excel获得内容利用jsoup解析html判断并创建新的Excel写入结果

1、首先要申请权限if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) { if (ActivityCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {

2021-04-14 17:50:40 198

原创 recyclerview滑动菜单两头大中间小 + 倒影

我是自定义了layoutManager+RecyclerView,直接上代码在这里插入代码片public class MyLayoutManager extends RecyclerView.LayoutManager { private int mSumDx = 0; private int mTotalWidth = 0; private int mItemWidth, mItemHeight; private SparseArray<Rect> mIte.

2021-02-04 17:04:04 1464 7

原创 flutter-TextField/TextFromField---suffixIcon点击时不弹出键盘

FocusNode _focusNode=FocusNode(); TextFormField( controller: _pwdController, focusNode: _focusNode, decoration: InputDecoration( icon: Icon(Icons.lock), labelText: I18n.of(context).password, hintText.

2020-12-16 10:23:59 3467 2

原创 flutter-TextFormField弹出软键盘遮挡/超出(overflow)问题

1、在有textField的外面包裹一层SingleChildScrollView,但Column中的mainAxisAlignment: MainAxisAlignment.center居中属性失效了 body: SingleChildScrollView( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [...]

2020-12-05 14:39:40 930

原创 flutter使用json_annotation实现序列化和反序列化

1、在pubspec.yaml引入依赖包dependencies: json_annotation: ^3.0.0dev_dependencies: build_runner: ^1.0.0 json_serializable: ^3.2.02、创建xx 实体类import 'package:json_annotation/json_annotation.dart';part 'example.g.dart';@JsonSerializable()class Person

2020-11-28 15:00:35 4261

原创 ARouter原理解释

ARouter路由框架会在项目的编译期通过注解处理器apt扫描所有添加@Route注解的Activity类,然后将Route注解中的path地址和Activity.class文件映射关系保存到它自己生成的java文件中,只要拿到了映射关系便能拿到Activity.class。...

2020-11-05 17:38:18 114

原创 为什么三次握手和四次挥手?

http协议流程1、域名解析2、TCP三次握手3、建立连接后发起请求4、服务端响应请求,返回给浏览器数据5、浏览器解析html代码,同时请求资源(图片)6、浏览器进行渲染7、TCP四次挥手1、TCP为什么要三次握手?三次握手(一种情况正常,二种情况由于网络原因C第一次发的短信S没收到)C:“你看得到我给你发的短信吗?”S:“我看得到呀,你看得到我给你发的短信吗?”C:“我能看到,balabalabala”C:“你看得到我给你发的短信吗?”C:“你看得到我给你发的短信吗?”//重新

2020-10-15 09:54:53 151

原创 属性动画(ObjectAnimator与ValueAnimator)

自定义view继承View@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); width = w; height = h; default_two_circle_distance = (w - h) / 2; }/** * 设置圆角矩形过

2020-10-09 18:01:44 85

原创 kotlin标准/高阶函数(map、flatMap、filter、fold、reduce、with、run、let、also、apply)

在Kotlin中,高阶函数即指:将函数用作一个函数的参数或者返回值的函数。它可以让我们的方法更简单高效,能去掉冗余的样板代码,让我们关注的逻辑更清晰的展现在我们的面前//::toBeSynchronized即为对函数toBeSynchronized()的引用fun toBeSynchronized() = sharedResource.operation()val result = lock(lock, ::toBeSynchronized) 上面的写法也可以写作:val result = l

2020-09-21 18:01:41 1816

星球交友盲盒源码2.2.1完整版

星球交友盲盒源码2.2.1完整版

2023-07-25

android-registerForActivityResult工具

android-registerForActivityResult工具

2022-03-25

flutter web调用手机摄像头并切换前后摄像头

flutter web调用手机摄像头并切换前后摄像头

2022-02-25

MMKVUtil.kt

MMKV封装类

2022-01-08

flutter使用NestedScrollView实现滑动联动吸顶

flutter使用NestedScrollView实现滑动联动吸顶

2021-10-14

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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