- 博客(213)
- 资源 (2)
- 收藏
- 关注

原创 Android开发:异步任务AsyncTask源码解析
AsyncTask使用方式:/** * @Author: david.lvfujiang * @Date: 2019/10/15 * @Describe: */public class DownloadTask extends AsyncTask<String, Integer, Boolean> { @Override protected void o...
2019-12-17 14:57:12
317

原创 博客导航
目录:java开发:java开发:泛型的理解java开发:反射的理解Java开发:java多线程(一):synchronized 对象锁和类锁的区别java开发:java多线程(二): wait()、sleep()、 join()和yield()区别java开发:java多线程(三):lock方式实现线程同步机制java开发:java多线程(四):线程池java开发:...
2019-12-13 17:47:11
868

原创 java开发:单例模式:为什么要加双重验校?为什么要加volatile?
public class Single { //使用volatile修饰变量 private static volatile Single single = null; public static Single create() { //第一次验校 if (single == null) { //同步代码块(类锁) ...
2019-12-09 15:15:06
697

原创 android开发:android代码不规范引起的内存泄漏与及解决办法
一、什么是内存泄漏内存泄漏是指当对象已经无用,但是还被其他对象引用着,GC的时候系统无法回收该对象。换成更通俗的话讲:生命周期长的对象保存着短生命周期对象的引用。二、android有哪些地方容易发生内存泄漏1.单例对象持有activity引用/** * @Author: david.lvfujiang * @Date: 2019/12/5 * @Describe: */pub...
2019-12-05 21:07:26
292
3

原创 java开发:集合(四):hashMap源码解析
HashMap底层存储结构HashMap是一个用于存储Key-Value键值对的集合,每一个键值对其实就是HashMap内部的Entry类对象。 static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; Entry<K,V&...
2019-12-03 15:10:49
173
原创 Android开发:使用android共享元素转场动画仿微信朋友圈图片预览功能
废话不多说,先上效果图,后面提供GitHub地址:大致的效果是:1.首先用recyclerView展示小图,当我点击图片后进入到预览界面,效果是我点击哪张图片就从哪张图片开始放大。2.当我进入预览界面后左右滑动图片,退出时的效果是当前position是几,我的页面就逐渐缩小回到ecyclerView中对应的position解析:外面的页面就是一个recyclerview,预览效果就是打开新的页面使用viewPager+PhotoView ————PhotoView地址重要的.
2020-09-29 11:04:29
1108
原创 Android开发:ViewFlipper实现文字广告轮播
背景:项目中首页需要有个新闻广告的文字轮播,如下图:本来在github上随便找了几个库,但是用着都不太好,因为来回切换页面的时候会有重影,体验不是很好,正好看到android原生ViewFlipper其实可以实现滚动的,因此记录一下。1.设置文字进入和退出动画进入动画:<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/andro
2020-09-22 13:01:50
725
原创 android开发: kotlin 使用BaseRecyclerViewAdapterHelper创建多布局适配器
实体类:/** * Date : 2020/3/30 * Author : Davaid.lvfujiang * Desc : 图片 */@Datapublic class MultiItemImgBean implements MultiItemEntity { public static final int FIRST_TYPE = 1; public static final int SECOND_TYPE = 2; private int type;
2020-08-27 17:08:23
1816
原创 Flutter开发:Flutter UI之弹窗系列
import 'dart:io';import 'package:flutter/material.dart';import 'package:flutter/services.dart';import 'package:flutter_app_demo/CustomSearchDelegate.dart';void main() { runApp(MyApp());}c...
2020-07-15 20:45:40
1239
原创 Flutter开发:Drawer+BottomNavigationBar实现一个简单的首页
class TwoPage extends StatefulWidget { @override State<StatefulWidget> createState() { // TODO: implement createState return StateO(); }}class StateO extends State<TwoPage> { String text = ""; List<String> list = ...
2020-07-14 22:07:09
434
原创 Flutter开发:AppBar+AppBarView实现android原生TabLayout+viewPager效果
class MyHomePage extends StatefulWidget { MyHomePage({Key key, this.title}) : super(key: key); @override _MyHomePageState createState() => new _MyHomePageState();}class _MyHomePageState extends State<MyHomePage> with SingleTicker...
2020-07-13 12:20:55
579
原创 Flutter开发:Card使用
模拟数据:在工程目录下添加一个ListDart文件模拟存放我们的数据源,然后在Main.dart文件中引入该文件 List listData=[ { "title": 'Candy Shop', "author": 'Mohamed Chahin', "imageUrl": 'https://www.itying.com/images/flutter/1.png', "description":...
2020-07-12 15:58:56
913
原创 Flutter开发:ListView动态获取数据源
模拟数据:在工程目录下添加一个ListDart文件模拟存放我们的数据源,然后在Main.dart文件中引入该文件List listData=[ { "title": 'Candy Shop', "author": 'Mohamed Chahin', "imageUrl": 'https://www.itying.com/images/flutter/1.png', }, { ..
2020-07-12 15:15:08
1058
原创 Flutter开发:GrideView使用
模拟数据:在工程目录下添加一个ListDart文件模拟存放我们的数据源,然后在Main.dart文件中引入该文件 List listData=[ { "title": 'Candy Shop', "author": 'Mohamed Chahin', "imageUrl": 'https://www.itying.com/images/flutter/1.png', }, { ...
2020-07-12 15:03:47
950
原创 Flutter开发:ListView使用
class _ThreePage extends StatefulWidget { @override State<StatefulWidget> createState() { // TODO: implement createState return new ThreePage(); }}class ThreePage extends State<_ThreePage> { @override Widget build(Build...
2020-07-09 21:50:57
427
原创 Flutter开发:利用表单实现登录页面
class Page extends StatefulWidget { @override State<StatefulWidget> createState() { // TODO: implement createState return _PageState(); }}class _PageState extends State<Page> { final registerFormKey = GlobalKey<Form...
2020-07-09 21:43:57
1331
原创 Flutter开发:常用基础widget控件
import 'package:flutter/material.dart';void main() { runApp(MyApp());}class MyApp extends StatelessWidget { // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( title...
2020-07-07 21:50:47
360
原创 Flutter开发:开发环境搭建
1.下载SDK可以直接去官网下载,Flutter中文网或者用git下载,新建一个空文件夹,右键鼠标选择Git Base here,输入git clone -b stable https://github.com/flutter/flutter.git,等待SDK下载完毕。下载完成的目录如下图:2.配置环境变量打开系统环境变量配置,新建变量PUB_HOSTED_URL,变量值:https://pub.flutter-io.cn新建变量FLUTTER_STORAGE_BASE_URL,变量值:ht
2020-07-06 20:57:06
327
原创 Android开发:集成高德地图实现定位、检索周边地址
1.需求1.后台传给我们一个经纬度,然后需要我们在地图上显示出来2.当我们点击地图的时候进入到第二个界面,实现当前位置的定位,并且检索周边的商家地址,点击后将选中的地址回传,并显示,而我们上传给后台的是经纬度。同时当我们平移地图时我们的列表也会同步刷新(其实就是监听地图滑动,获取中心点的经纬度,再检索周边)谷歌搜索高德SDK,进入官网选择开发支持,点击Android地图SDK接着就是按着官方的接入流程集成SDK,需要认证开发者(免费的,支付宝认证就可以),申请应用获取key,注意了:申请的时候..
2020-07-03 20:26:32
5715
6
原创 使用Android Studio自带的Memory monitor工具检测内存泄漏
首先写个内存泄漏的例子:单例模式import android.content.Context;/** * @Author: david.lvfujiang * @Date: 2019/12/5 * @Describe: 单例模式 */public class JavaBean { private static JavaBean bean; private Contex...
2020-02-10 18:32:26
2404
原创 android开发:自定义View三步走(一):测量
import android.content.Context;import android.content.res.Resources;import android.graphics.Canvas;import android.graphics.Paint;import android.util.AttributeSet;import android.util.Log;import a...
2020-01-16 14:20:53
230
原创 android开发:自定义view不同设备尺寸适配技巧
1.首先抛出一个问题:自定义中getWidth()、getHeight()、canvas.drawCircle()等方法获取的值和设置的值是dp值还是px值我百度了一下得到的答案是px值2.验证:我自定义一个view,在ondraw()中绘制一个圆package com.example;import android.content.Context;import android...
2020-01-16 11:22:30
1673
1
原创 android开发:自定义view绘制圆形进度条
效果:实现这个效果需要掌握的小东西还是有蛮多的:1.学会使用属性动画ObjectAnimator,给我们自定义的属性设置动画2.自定义view基本的画圆、画圆弧、画文字,熟悉Paint等3.学会使用SweepGradient,android有一系列Gradient可以设置画笔渐变上面知识还不会的同学可以看一下这个系列的博客,看完收益很大:HenCoder Android 开发进阶:...
2020-01-15 14:32:49
361
原创 Android开发:使用Lambda表达式高效开发
简介:JDK1.8后java开始支持Lambda表达式,使用Lambda表达式我们就可以在Android中替换匿名类的写法。本来一个Button点击事件监听要写6行代码,我们1行就可以搞定。1.引入依赖implementation 'me.tatarka:gradle-retrolambda:3.6.0'2.修改我们JDK成1.8在Android studio中打开File>...
2020-01-14 11:54:29
525
1
原创 java开发:静态代码块、构造代码块执行时期与顺序
今天突发奇想,静态代码块、构造代码块和构造函数执行时期和顺序是怎样的呢?于是我写了的demo测试了一下/** * @Author: david.lvfujiang * @Date: 2020/1/12 * @Describe: */public class User { static { Log.e("tag","静态代码块"); } {...
2020-01-12 18:23:25
442
原创 java开发:Java虚拟机笔记(2):垃圾标记算法
简介:我们知道堆内存中几乎存放着程序所有的对象实例,垃圾收集器在对堆回收之前,第一件事情就是要确定这些对象哪些还“存活”着,哪些对象已经“死去”(即不可能再被任何途径使用的对象)。1.引用计数算法这种算法的思想是给对象添加一个引用计数器:一个对象被引用一次时计算器加1,当引用被回收时失效时计数器减1,当引用计算器等于0时则判定该对象是死亡对象,即可以进行回收。但是引用计数算法很难解决j...
2020-01-12 16:48:50
122
原创 java开发:Java虚拟机笔记(1):内存区域
1.程序计数器(Program Counter Register)程序计数器是内存中较小的一块区域,属于线程私有的。可以把它看成当前线程执行的字节码行号指示器,通过它来确定执行的下一行代码,循环、跳转、线程恢复等等都需要依赖它来完成。我们知道java多线程是通过轮流切换CPU时间片来完成的,在线程切换过程中恢复线程到原来执行的位置则是靠程序计数器完成的。2.Java虚拟机栈(Java Vi...
2020-01-12 16:02:12
127
原创 android开发:RecycleView和checkBox组合使用引起数据错乱解决方案
今天在使用RecycleView和checkBox做列表时发现一个很有趣的问题,当我选中某一个checkBox后,RecycleView向下滑动时发现其他的checkBox也被选中了,bug图如下:发生这个问题的原因在于RecycleView的复用机制,当我们向下滑动时RecycleView会复用离开屏幕的Holder从而来提高效率,而Holder会保存checkBox的选中状态,所以出...
2020-01-10 17:54:21
759
1
原创 android开发:自定义view:圆形头像
package com.example.flycotablayoutapplication.widget;import android.content.Context;import android.graphics.Bitmap;import android.graphics.BitmapShader;import android.graphics.Canvas;import andr...
2019-12-31 15:52:05
191
1
原创 android开发:app性能优化
性能是衡量一个app好坏的标志,我们来说说性能优化有哪几方面:1.布局优化尽量减少布局的嵌套,使用include、merge等标签,使用listView、recyclerView要学会复用。2.绘制优化在ondraw()方法中不要执行耗时操作、使用局部变量。因为view重绘会频繁调用ondraw()方法。可以减少一些不必要的背景3.启动优化app启动的时候会出现将近一秒的白...
2019-12-30 17:16:26
296
原创 java开发:java多线程(九):死锁
简介:死锁是指多线程在相互竞争资源时陷入僵局,导致线程无法往下执行。例如线程1持有A资源,运行过程中去请求B资源,同时线程2持有B资源,此时也正在请求A资源,俩个线程互相持有对方需要的资源,并且自身又不肯释放自己占有的资源,从而导致死锁。生产死锁的四个条件:1.互斥条件资源在某一段时间内只能被一个线程占用2.不可剥夺条件一旦资源被线程占用后,其他线程将获取不到,除非占用的线程...
2019-12-30 14:43:09
152
原创 java开发:java多线程:CyclicBarrier和CountDownLatch使用详解
CountDownLatch:CountDownLatch是一个非常实用的多线程控制工具类,称之为“倒计时器”,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。public class Main6Activity extends AppCompatActivity { @Override protected void onCreate(Bundle sa...
2019-12-30 11:44:05
213
原创 java开发:JAVA多线程(八):读写锁ReadWriteLock
java开发中实现线程同步我们一般使用synchronize来修饰方法或者代码块,synchronize是一种互斥锁,只有一个线程能拿到锁。在实际开发中我们会有这么一种情况:多个线程同时读写,读线程的数量远远大于写线程。而我们知道读并不会导致数据出问题,只有写的时候才会需要同步。如果说我们使用synchronize来修饰则效率会很低,即使俩个线程同时读取数据必须要有一个线程进行等待。若我们只对写...
2019-12-28 17:03:35
271
原创 java开发:java多线程:原子类AtomicInteger和AtomicStampedReference使用详解
在上一节java开发:乐观锁CAS机制中我们说过CAS机制的原理,与及使用CAS会发生的ABA问题解决办法。java中提供一些列的基本数据类型原子操作类用来实现操作基本数据类型时保证线程安全,其底层就是使用CAS机制实现的。AtomicInteger则是用来操作int类型的数据,保证线程安全。什么是ABA问题呢?举个例子:比如说我的卡里有100大洋,此时有俩个线程同时去操作这100大洋,它...
2019-12-27 21:51:45
785
3
原创 java开发:集合(六):Collections.synchronizedMap()
我们知道hashMap是非线程安全的,为了实现线程安全,无非就是以下三种方式:Hashtable 、ConcurrentHashMap 、SynchronizedMap这篇文章主要讲解SynchronizedMap是怎么实现线程安全的SynchronizedMap用法: HashMap hashMap = new HashMap<String, String>(); ...
2019-12-27 14:51:43
1439
原创 java开发:java集合(七):迭代器的fail-fast(快速失败)机制
Inteator 是顶层的迭代器接口,定义了迭代器共同的方法。hasNext()判断集合是否含有下一个元素,next()获取下一个元素。每个具体的集合类中都有一个迭代器内部类实现于Inteator接口,用来历遍集合。为了方便获取迭代器对象,java还提供了Iterable接口,使用iterator()方法来获取集合的迭代器。Collection 继承于Iterable接口,而所有具体的集合...
2019-12-27 14:17:05
355
原创 android开发:设计模式(一):代理模式
在说什么是代理模式之前我们先来看一个例子:public interface Subject { public void handleData();}public class MySubject implements Subject{ @Override public void handleData(){ System.out.println...
2019-12-26 15:58:23
210
原创 android开发:无序广播和有序广播区别
1.无序广播就是我们普通的广播,接收者接收无序广播没有优先级之分,并且无序广播不可以被拦截,内容不可以被修改。2.有序广播接收者接收有序广播有优先级之分,有序广播可以被接收者拦截、修改。例如广播接收者A和B,A的优先级高于B,则广播会先发送到A,A可以拦截广播停止传播,一旦拦截后面的接收者将不会收到广播,而且A可以修改广播的数据内容,再发送到接收者B。1.我们定义俩个广播接收者类,...
2019-12-25 18:02:12
3826
原创 android开发:BroadcastReceiver注意事项
开始之前咱们先来理解这句话:一个包含活跃组件的进程会被保护起来不被杀死。但是一个仅仅包含非活跃组件的进程,在系统内存不足时可能随时被系统杀死。android组件就包含了四大组件,组件还在执行它的生命周期时我们可以认为它是活跃的,当生命周期结束后可以认为它不是活跃的,需要注意的是生命周期结束后不代表对象会立马被销毁,只是说在生命周期结束后的随机某一时刻对象可能被销毁。就拿BroadcastRec...
2019-12-25 16:51:42
452
原创 android开发:android studio配置获取当前程序显示的Activity
有时候我们接手新的项目时经常会遇到看不懂项目的结构,业务逻辑复杂,并且包含各种activity之间跳转,而我们入手的方式一般都是先理清项目Activity的执行流程,比如说当我们页面跳转时我要知道跳到了哪个Activity。从而我们在再细研究跳转的Activity的具体代码。如果你连跳到哪个Activity都不懂,还谈什么研究?android studio可以配置打印出当前屏幕显示的Acti...
2019-12-25 11:00:22
1857
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人