自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 就只学一遍的单例模式

单例模式的意义单例模式属于创建型模式,它提供了一种创建对象的方式,确保只有单个对象被创建。单例模式的解决的痛点就是节约资源,节省时间从两个方面看:由于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级的对象而言,是很重要的因为不需要频繁创建对象,我们的GC压力也减轻了。而在GC中会有STW(stop the world),从这一方面也节约了GC的时间,单例模式的缺点,复杂的单例模式需要考虑线程安全等并发问题,引入了部分复杂度。饿汉模式public class Singleton

2020-07-21 15:46:41 194

原创 应用市场上架注册企业级账号

1.小米开放平台https://dev.mi.com/console/开发注册流程需要准备的资料法人和管理员身份证信息企业营业执照号组织类型社会信用代码营业执照扫描件其中还涉及到对公打款,详情看上面的开放注册流程2. 华为开发者联盟https://developer.huawei.com/consumer/cn/3. oppo开放平台https://open.oppomobile.com/开发者账号注册流程应用接入流程需要准备的资料管理员身份证信息、

2021-08-31 16:37:11 1103

转载 volatile看这一篇够用了

原文链接什么是Java内存模型(JMM)通俗来说,JMM是一套多线程读写共享数据时,对数据的可见性,有序性和原子性的规则为什么会有Java内存模型JVM实现不同会造成“翻译”的效果不同,不同CPU平台的机器指令有千差万别,无法保证同一份代码并发下的效果一致。所以需要一套统一的规范来约束JVM的翻译过程,保证并发效果一致性原子性什么是原子性原子性指一系列的操作,要么全部执行成功,要么全部不执行,不会出现执行一半的情况,是不可分的。原子性怎么实现使用synchron

2021-05-17 13:57:00 219 2

原创 Android 多进程看这里就够了

开启多进程模式在Android中使用多进程只有一种方法,就是在给四大组件在AndroidManifest中指定android:process属性。(有一种非常规的方法:通过JNI在native层去fork一个新的进程) 代码如下<activity android:name=".task.TasksActivity"> <intent-filter> <action android:name="android.intent.action.MAIN"

2021-05-14 13:54:15 2415 10

原创 Android四大组件:BroadcastReceiver史上最全面解析

https://www.jianshu.com/p/ca3d87a4cdf3LocalBroadcastManager 实现原理LocalBroadcastManager采用的是Handler的消息机制来处理的广播,而注册到系统中的是通过Binder机制实现的,速度是应用内广播要快很多。不过由于Handler的消息机制是为了同一个进程的多线程间进行通信的,因而跨进程时无法使用应用内广播。初始化LocalBroadcastManager 采用的是单例模式,并且在私有的构造函数中创建了一个mHand

2021-05-13 15:55:51 244

原创 Filezilla日文字符文件看不到或显示乱码的解决办法

Filezilla确实是跨平台的好软件,但是我在Unbuntu中发现文件夹是空的。不知道为什么后来想Filezilla应该是支持字符集转换的,所以在站点管理器(site manager)->字符集选项卡(charset)中,选择“使用自定义字符集(use custom charset)”,在文本框(encoding)内填写“Shift_JIS”。断开服务器重新连接,发现看不见的中文文件和目录都出现了,问题顺利解决。...

2020-12-16 19:35:05 1303 1

原创 如何在Android 11 上获取已安装应用列表

在Android 11上,我们可以看到很多的更新都是用来保护隐私的,如果你的app 在使用PackageManger的方法来获取安装的应用列表,那么在Android11上,就需要做一点改变了。我们来看看一下获取应用列表的代码,会不会和你的很相似List<ApplicationInfo> allApps = getPackageManager().getInstalledApplications(0);for(ApplicationInfo ai : allApps) { Lo

2020-12-11 17:06:21 15483

原创 Android 保存图片以后通知相册刷新

通知相册刷新MediaStore.Images.Media.insertImage(getContentResolver(), BitmapFactory.decodeFile(file.getAbsolutePath()), file.getName(), null);Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);Uri uri = Uri.fromFile(file);intent.setData(uri);

2020-12-03 17:54:53 1534 5

原创 android:allowBackup=“true“ 引发的惨案

前言大家不要慌,先听我讲一个故事(吐血不止)Coding中,新增了一个需求,表中需要多加一个字段,三下五除二,代码搞定,编译成功,安装好apk。报错了???检查发现库表中并没有我添加的字段。仔细查看代码,没有问题,一脸懵逼。难道是安装有问题,或者之前卸载没有成功。又是一通操作,还是有问题。给我的感觉就是我的代码根本没有执行,即使修改了数据的名称,同样如此!我确定,卸载应用以后,历史数据库确实也同步卸载了。但是安装上应用以后,依然是以前的数据库。有人备份了我的数据库吗?总感觉有人默默的备份了

2020-12-03 17:42:24 1321 2

原创 父View支持移动,子View可以点击

根据事件的分发机制,如果子View消耗了down事件,那么就会继续处理up,和move事件。那么这个时候父view是没有办法move的。我们想完成这样的需求,就需要去拦截事件@Override public boolean onTouchEvent(MotionEvent event) { int x = (int) event.getRawX(); int y = (int) event.getRawY(); switch (ev

2020-11-26 20:11:00 2516

原创 Android 签名配置,查看签名信息

gradle 自动签名打包配置build.gradleapply plugin: 'com.android.application'android { compileSdkVersion 30 buildToolsVersion "30.0.2" defaultConfig { applicationId "com.blowing.signer" minSdkVersion 15 targetSdkVersion 30

2020-11-24 18:49:46 3652 2

转载 什么情况下Java程序会产生死锁?如何定位、修复?

典型的回答:死锁是一种特定的程序状态,在实体之间,由于循环依赖导致彼此一致处于等待之中,没有任何同样个体可以继续前进。死锁不仅仅是在线程之间会发生,存在资源独占的进程之间同样也可能出现死锁。通常来说,我们大多是聚焦在多线程场景中的死锁,指两个或多个线程之间,由于互相持有对方需要的锁,而永久处于阻塞的状态。你可以利用下面的示例图理解基本的死锁问题:定位死锁最常见的方式就是利用jstack等工具获取线程栈,然后定位互相之间的依赖关系,进而找到死锁。如果是比较明显的死锁,往往jstack等就能直接定位,类

2020-07-28 11:27:24 1119 3

原创 只学一遍的策略模式

策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的对立的类中,从而使得她们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下策略模式的结构:环境(Context)角色:持有一个Strategy的引用。抽象策略(Strategy) 角色: 这是一个抽象角色,通常由一个接口或者抽象类实现。词角色给出所有具体策略类所需的接口具体策略(ConcreteStrategy)角色: 包装了相关的算法和行为。源代码:环境角色类:public class Context

2020-07-27 15:30:39 130

转载 按顺序执行的多线程-看了这一篇面试再也不慌了

一.前言使用线程的join方法使用主线程的join方法使用线程的wait方法使用线程的wait方法使用线程的Condition(条件变量)方法使用线程的CountDownLatch(倒计数)方法使用线程的CyclicBarrier(回环栅栏)方法使用线程的Semaphore(信号量)方法二、实现我们下面需要完成这样一个应用场景:1.早上;2.测试人员、产品经理、开发人员陆续的来公司上班;3.产品经理规划新需求;4.开发人员开发新需求功能;5.测试人员测试新功能。规划需求,开发

2020-07-27 15:27:50 199

转载 重学Android之 ThreadLocal源码理解

1、ThreadLocal是什么?ThreadLocal 是一个线程内部存储类,通过他可以在指定的线程中存储数据。存储后,只能在指定的线程中获取到存储的数据,对其他线程来说无法获取到数据2、 ThreadLocal的使用场景日常使用场景不多,当某些数据是以线程为作用域并且不同线程具有不同的数据副本的时候,可以考虑使用ThreadLocal.Android源码的Lopper,ActivityThread以及AMS中都用到了ThreadLocal3、ThreadLocal的使用示例public cl

2020-07-21 11:07:04 132 1

原创 重学Android之UI优化

诊断过渡绘制点击设置中的开发者选项点击调试GPU过渡绘制弹出框中选择显示过渡绘制区域优化方法:尽量使用ConstraintLayout在布局层级相同的情况下,使用LinearLayout代替RelativeLayout根据源码我们发现RelativeLayout会对子View做两次measure。这是为什么呢?首先RelativeLayout中子View的排列方式是基于彼此的依赖关系,而这个依赖关系可能和布局中View的顺序并不相同,在确定每个子View的位置的时候,就需要先给所

2020-07-20 18:30:22 231

原创 重学Android之OOM优化

分析工具OOM发生以后,使用Android Studio 自带的Android Monitor dump出HPROF文件,然后使用SDK中的hprof-conv(位于sdk_root/platform-tools)工具转换为标准的Java堆转储文件格式,这样就可以使用MAT继续分析Android OOM类型:使用static修饰Context变量,Context被Hold住了导致Activity无法销毁Bitmap没有及时回收,调用recycle()函数并不能立即释放Bitmap,读取Bitm

2020-07-20 17:10:59 266

原创 重学Android之启动模式

1、Standard 模式首先这是一个默认的启动模式,举例: 我们想启动一个ActivityB,无论任务栈中是否存在ActivityB的实例,都会创建一个崭新的ActivityB位于栈顶。2、SingleTask模式举例启动Activity C任务栈已经存在C的实例并且未位于栈顶当启动Activity C 时,会将Activity C 上方所有的实例全部出栈让其位于栈顶,并且回调Activity C 中的onNewIntent()方法。任务栈不存在C的实例当启动Activit

2020-07-20 12:23:34 161

转载 Android Apk 瘦身 优化50%

Apk结构分析我们可以通过Android Studio 直接分析Apklib/: 包含特定于处理器软件层的编译代码,包含(armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, 和mips)。大多数情况我们只用一种armeabi-v7aassets/: 包含应用可以使用AssetMananger对象检索的应用资源res/: 包含未编译到的资源 resources.arsc,主要有图片资源文件META-INF/: 包含CERT.SF和CERT.RSA签名文件,以

2020-07-15 14:39:22 260

原创 最全Android行为变更(6 -11)

Android 6.0 变更运行时权限低电耗模式和应用待机模式取消支持Apache Http客户端BoringSSL硬件标识符访问权通知音频管理器变更文本选择浏览器书签变更Android 密钥库变更WLAN 和网络连接变更相机服务变更运行时APK验证USB连接Android for Work变更https://developer.android.com/about/versions/marshmallow/android-6.0-changes?hl=zh-cn#be

2020-07-14 14:49:58 343

转载 Activity的重建机制

什么是重建?引发重建的场景有哪些?通常是“系统资源的回收”或者’配置发生变化’导致的重建系统资源回收是指:当App处于背景模式的时候,可能因为系统内存不足而被回收配置发生变化是指:当系统配置发生变化时,比如屏幕方向、语言的改变重建的好处?对于资源回收的情况,保存状态并等到使用时再恢复,要比后台存留进程所占的资源要小的多对于配置变化的情况,当屏幕方向发生变化,只有重建,才有机会加载不同的视图,当横竖屏的布局不同的话状态保存和恢复的具体过程?首先,"状态"是指支撑UI界面内容展示的

2020-07-03 14:56:51 505

原创 Activity生命周期前传-Android 中的进程模式

何谓进程模式?Android 平台的App,通常情况下都是单进程。由于Android平台资源有限,需要为不同进程设置优先级,以便系统资源紧张的情况下,将优先级较低的进程杀死,以释放资源。因而,进程模式的存在就是为了标记和区分进程的优先级存在哪几种进程模式?按优先级从高到低,进程模式主要包括:前景进程、可见进程、服务进程、背景进程、空白进程这5大类别通常,App 进程的级别,由其活跃的或处于栈顶的组件的活动状况(比如所处生命周期)决定。1、前台进程是用于目前操作所需的进程。在不同的情况下,进程

2020-07-03 12:21:46 218

原创 微信读书分享群+无限卡攻略

希望能为书友搭建一个思考与交流的平台。作为群主,通过这个读书群,我希望能够增长知识,结交好友,了解自身。当然也可以无限卡组队(白嫖)该群目前116人,暂时大部分为程序猿,期待更多的人加入,思想碰撞。本群不带有任何盈利目的。有意加入请联系微信号:15208478350。这个微信号是我的私人号,请广告勿扰。无限卡攻略-白嫖秘籍一、常规活动翻一翻,送书、送书币、送无限卡(每周二活动,每期送5...

2019-10-15 10:27:00 6955 6

原创 java.lang.AbstractMethodError: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierIm

1、背景前天在github上check 别人Android代码的时候,发现无法编译。错误如下:Cause: org.jetbrains.plugins.gradle.tooling.util.ModuleComponentIdentifierImpl.getModuleIdentifier()特地记录一下。2、解决方法2.1 降低gradle版本看这错误信息,应该是gradle的...

2019-08-30 11:17:43 1456

原创 java 泛型全解 - 绝对最详细

背景对于java的泛型我一直属于一知半解的,平常真心用的不多。直到阅读《Effect Java》,看到很多平常不了解的用法,才下定决心,需要系统的学习,并且记录下来。1、泛型的概述:1.1 泛型的由来根据《Java编程思想》中的描述,泛型出现的动机:有很多原因促成了泛型的出现,而最引人注意的一个原因,就是为了创建容器类。泛型的思想很早就存在,如C++中的模板(Templates)。...

2019-08-27 18:30:00 7097

原创 数组,链表,栈,队列,散列表

重温了数据结构 ,温故而知新。数组数组是由有限个相同类型的变量所组成的有序集合,它的物理存储方式是顺序存储,访问方式是随机访问,利用下标查找数组元素的时间复杂度O[1],中间插入,删除数组元素的时间复杂度是O[n]。链表链表是一种链式数据结构,由若干节点组成,每个节点包含指向下一个节点的指针。链表的物理存储方式是随机存储,访问方式是顺序访问。查找链表节点的时间复杂度是O[n],中间插入、删...

2019-08-25 15:03:05 685

原创 想看微信读书终生无限卡,瞅这儿

有图为证:图片的来龙去脉:昨日微信读书分享群里,热闹非凡。原来是有人在翻一翻的活动中,抽到了终生无限卡。本人当时羡慕的口水流下来,当然也有群友留下了羡慕的泪水。这里就不点名了。哈哈哈哈哈鉴于实践是检验真理的唯一标准,我特地在网上一顿狂搜,居然没有一张微信读书终生无限卡的图片。想到给各位书友饱饱眼福,沾沾喜气,这不赶紧麻溜的上传上来。不过后来,群友反馈微信读书出bug了。无限卡没了,变...

2019-08-21 12:37:21 4030 3

原创 玩转Java接口(effect java 学习笔记 20、21、22)

一、前文摘要:好看的皮囊千篇一律,有趣的灵魂万里挑一。我再来炒一份接口的冷饭,客官香吗?本篇博客的主要内容简介如下:接口与抽象类的区别二者的优缺点,还有组合-抽象骨架类为后代设计接口-包含JDK 1.8的新特性,如default 方法接口仅用来定义类型(java常量安置:常量接口模式,枚举类,不可变实例类)二、主要内容1、谈谈接口和抽象类有什么区别?接口和抽象类是Java...

2019-08-20 14:38:08 412

原创 java优雅的关闭资源 : try-with-resources (effect java 学习笔记 9)

客官,往这瞅背景    在我们日常的开发过程中,会调用需要手动close的资源。比如InputStream, OutputStream ,java.sql.Connection,socket等。别想着java有了GC,GC大大说,不是我家的,谁爱用谁管。得嘞,我们自己管。没有对比就没有伤害,我们来伤害吧!对比伤害一、try-finally    从以往来看,try-finally语...

2019-08-16 17:55:38 467

原创 Java 解决构造方法参数过多-builder模式(effect java 学习笔记2)

一、前景:一般情况我们不会遇到这样的情况,使用静态工厂方法,或者构造方法就足够。但是它们也有一个限制就是,它们不能很好的扩展到很多可选参数的场景。随着我们业务的深入,某些java bean中的参数将会越来越多,我们添加的构造方法也相应的增加。想想一个10个参数的构造方法,我胃痛。既然想要用builder模式,我们首先需要知道传统方法的不足。二、可伸缩构造方法 VS builder模式我...

2019-08-16 15:21:47 1058

原创 6、避免创建不必要的对象 (Effect java 学习笔记 )

虽然构建和销毁一个对象的开销不大,但是也架不住量大呀。在每次需要时重用一个对象而不是创建一个新的对象通常是恰当的。重用可以更快更流行。如果对象是不可变的,它总是可以重用。(这是官方的)新三年,旧三年,缝缝补补又三年,节约为本,虽然java有GC,家里有矿,我们也不能随便挥霍是吧下面总结几个方法:1、 通过使用静态工厂方法(不清楚可以去看考虑使用静态工厂方法替代构造方法 )2、 当一些对...

2019-08-15 17:58:04 185

原创 1、考虑使用静态工厂方法替代构造方法 (Effective- java 学习笔记)

对于一个类,要获取它的一个实例,通常的做法是提供一个公用的构造函数,然而还有另一种方法,我们称之为静态工厂方法,实质上也就是一个简单的静态方法,它返回一个类的实例。其实,静态工厂方法获取对象实例,我们并不陌生,我们来看看API中的一个实例:首先注意 ,静态工厂方法与设计模式中的工厂方法模式是不同的。下面是一个Boolean的中的实例public final class Boolean imp...

2019-08-15 17:09:49 413 1

原创 干货|神器 谷歌Chrome插件大全

这个是一个微信好友晒出的插件截图,觉得很有用,特地分享给大家。希望不要介意就只是一张图片,请自行放大观看。

2019-03-21 20:30:01 405

原创 时间不够-90%是你走入了误区

本文来自微信公众号“圈外孙圈圈”(ID:iquanwai),作者:在线商学院品牌「圈外同学」创始人兼CEO孙圈圈,豆瓣8.6分畅销书《请停止无效努力》作者。今天早上温习了这篇文章,联系了自身经历,觉得很有必要记录下来,与君共享。首先谈谈其中的三个误区误区1: 高估效率的重要性,低估思维的重要性摘抄部分经典语录如果你是脑力劳动者,你的工作不是重复劳动,那么你的大部分时间都是浪费掉的。因为...

2019-02-01 08:06:31 203

原创 泛微人工智能助手分析

今天看了看泛微的人工智能助手,虽然只是视频演示,但是还是画了一个思维导图,希望帮助有想要了解的人

2019-01-24 21:27:54 410

原创 android 动画的思维导图

通过编写了思维导图,将android 的动画知识连贯起来,并且在脑海中形成具象。参考知识:启舰大神的专栏

2019-01-22 17:00:41 542 1

原创 Kotlin 中的集合(List中没有了addAll())

为什么讲这个呢,集合还需要再老生常谈吗?,作为一个从java转向kotlin的人来说,集合还不是手到擒来。这里主要讲讲二者之间使用的区别,避免采坑。下面我们从实际案例入手:想必大多数Android 开发者都有遇到过分页加载列表的需求吧,比如我们会写一个添加数据的代码private List&amp;lt;MessageItem&amp;gt; list = null;public MessageAdapt...

2019-01-16 14:04:25 10220

原创 The label does not denote a loop in forEach

这个是在kotlin中遍历集合时,使用标签的过程中,可能会遇到的小错误。提示的字面上的信息,就是在forEach中这个标签不能表示为loop(也就是循环),错误事例如下:list.forEach loop@{ if (it == "外面还很黑") { continue @loop } }这里使用continue,和break都会报错。使...

2019-01-12 08:39:52 946 1

原创 AAPT2 error: check logs for details

自从升级到android studio3.0以后,这个问题我也是遇到好几次,起初也是在网上查资料,都是改什么配置之类的,并没有什么效果。这个报错就是告诉我们去查看日志详情,有时候运气好,可以看到代码报错的地方,问题就好解决了。很大情况是我们看不懂这个错误日志。怎么办呢?我总结了一下,肯定使我们代码编写的问题,一种是布局中写错了,这个自己可以检查一下新写的布局。还有一种我遇到的build.gra...

2019-01-11 22:33:31 201 1

原创 Kotlin 中的循环全解

1、普通for循环for (i in 0..9) { println(i) }for (i in 0 until 9) { println(i) }注意:0…9 指的是[0,9]这个集合,左右都是闭合的,0和9均包含0 until 9 指的是[0,9),左闭右开,包含0不包含92、集合的遍历(这里就用list举例)for循环遍历val lis...

2019-01-11 12:23:54 3194 5

Android 动画 思维导图

这是一个详细的分析android 动画的思维导图,从视图动画到属性动画,都包含有,并且有详细的备注,帮助大家完善动画体系

2019-01-22

没事扫一扫

这是一款智能识别图像的应用,方便人们在出行的过程中,遇到不认识的植物或者动物,只需要拍照就能识别,极大的丰富了大家的知识,还可以识别菜品,大江南北,各色菜系,无所不知。对于车辆的爱好者来说,也是一个福音。各色汽车,尽入彀中

2018-11-08

华为桌面图标开发文档

华为推送桌面角标的文档

2018-11-01

eclipse 65536 解决 demo

这是一个在eclipse上解决65536的项目代码,这样方便维护老代码,方便快捷

2018-04-23

空空如也

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

TA关注的人

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