自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 使用wait()与notifyAll()实现生产者与消费者模式

使用wait()与notifyAll()实现生产者与消费者模式所涉及到的基础知识wait()一、wait是java同步机制中重要的组成部分。结合与synchronized关键字使用,否则运行时会收到一个异常:IllegalMonitorStateException。二、wait属于Object类。三、调用任意对象的 wait() 方法导致该线程阻塞,并且会释放锁。notify()、notifyAll()一、notify、notifyAll是java同步机制中重要的组成部分。结合与synchro

2020-10-16 23:51:40 231

原创 synchronized同步代码块还有同步方法本质上锁住的是谁?

synchronized同步代码块还有同步方法本质上锁住的是谁?以下代码中obj为监视器对象synchronized (obj){ }新建一个类Student类与MySynchronized 类public class MySynchronized { private Student student; public MySynchronized(S...

2020-04-09 11:26:08 783

原创 ktx写gradle插件,实现自动打包发布到应用市场

这个任务使用 Google Play Publisher 插件和 Google Play Developer API 来上传应用程序包到 Google Play 商店。这将创建一个新的 Gradle 项目,其中包含一个示例 Java 类和一个 build.gradle 文件。这将添加 Google Play Publisher 插件,并配置您的应用程序的服务帐户凭据和发布的轨道。这个类包含应用程序的 Google Play 配置,例如应用程序的服务帐户凭证和发布的轨道。

2023-04-28 14:34:25 197

原创 kotlin从入门到放弃,让你领会kotlin的人性化与比java更强大之处

kotlin从入门到放弃

2022-10-13 20:59:35 715

原创 一张图了解Activity的创建到最终View的显示过程

从Acitvity的onResume到View的measure、layout、draw

2022-06-27 21:11:06 259

原创 学习LeakCanery,了解原理

google提供的内存泄漏检测工具LeakCanery

2022-06-22 21:09:18 484

原创 Jvm与DVM与ART

JVM虚拟机JVM 的执行的指令是基于栈结构,需要去栈中读写数据,指令会变多,导致速度变慢。执行编译后的.class文件,执行顺序为:.java 文件 → .class 文件 → .jar 文件。1、JVM内存模型jvm分为五部分:堆、栈、方法区(一种规范定义,非实现)、本地方法栈、程序计数器1.1、堆jvm所管理的内存中最大的一部分、线程共享的内存区域,主要存放对象的实例和数组。堆根据对象的存活周期不同把堆分为:新生代、老年代(jdk1.8以后)和元空间即原永久代,新生代与老年代比例约1:2,分

2022-03-27 23:01:10 3617

原创 自定义ViewGroup布局实现每行都全部显示(取子childView列最大宽度)

自定义布局每行都全部显示(取列最大) 此自定义布局是为了实现设置一个列值,通过获取每一列的最大子view宽度让view全部展示效果先看效果使用ColumnVerticalLayout mGridLayout = new ColumnVerticalLayout(context); mGridLayout.setAverage(true); mGridLayout.setColumn(3); RelativeLayout.LayoutParams r

2022-03-24 19:49:44 429

原创 注解的浅析和简单应用

一、什么是注解注解也叫元数据,注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。个人理解:对包、类、接口、字段、方法参数、局部变量进行打标签注解分为三类:Java自带的标准注解、元注解(修饰注解的注解)、自定义注解二、常用的注解@Target,@Retention@Target:主要是做用于注解打标记的对象例如:@Target({ElementType.FIELD,ElementType.METHOD})public enum

2021-07-05 17:13:24 98

原创 Android Studio中项目下的build.gradle的解释

Android Studio中项目下的build.gradle的解释目录1.主工程下的build文件buildscript { //构建过程依赖的仓库 repositories { //代码托管仓库 google() jcenter() } dependencies { //Gradle 插件及使用版本 classpath 'com.android.tools.build:gradle:3

2021-05-13 18:17:56 458

原创 android版的聊天类实现mvc改造MVP

android版的聊天客服实现mvc改造MVP原作者文章点击这里.目录结构:本文中的ChatMessageAdapter、ChatMessage与原作者的一样,就不展示给大家了,只展示修改的地方http包下面的HttpUtils代码:package com.example.customerservice.http; import com.example.customerservice.entity.ChatMessage;import com.google.gson.Gson;impor

2021-05-08 18:46:36 136

原创 okhttp的个人学习

okhttp的简单描述OkHttp是一个轻量级网络请求框架okhttp的流程图okhttp的简单使用同步请求 String url = "http://taobao.com"; OkHttpClient client = new OkHttpClient.Builder().build(); Request request = new Request.Builder().url(url).build(); Call call = client.newCall(reques

2021-01-04 20:25:38 608 1

原创 android 工作中遇到的问题,不定期更新

1、问题:App点击Home键后,再次点击APP图标,APP重启回不到点击home键前的那个界面解决办法:在你的LAUNCHER的Activity里面查看是否有 android:launchMode="singleTask"这个属性,如果有这个属性就把他去掉,或者改成singleTop。2、问题:dialogfragment在dismiss()时,爆出java.lang.IllegalStateException: Can not perform this action after onSaveInst

2020-11-28 20:14:11 359

原创 Android ProGuard代码混淆

Android ProGuard配置方法什么是 ProGuardProGuard 是一个能对 java 字节码文件进行压缩、优化、混淆和预验证的免费工具。ProGuard 可以删除 java 代码中无用的类、字段、方法和属性,可以重命名已经存在的类、字段、方法和属性。ProGuard 常用于 Android 开发对项目进行混淆,增加项目代码被反编译的难度。对于Android 项目,混淆是 ProGuard 中最重要的一个功能。ProGuard 工作原理ProGuard 之所以可以保护 apk

2020-10-08 20:14:48 252

原创 Android Activity的启动模式基础

Android Activity的启动模式基础Activity启动过程Activity之间的启动流程见下图,从图中可以看出,启动的过程中会受很多因素的影响,导致启动的现象千变万化。Task管理并存放Activity实例的单元,它是Activity的组合,方便用户完成一系列操作。栈结构,符合先进后出特点。Android系统全局统一管理Task,Task不属于任何App,两个App的Activity可以放在一个Task内。四大启动模式1.Standard模式默认模式,此模式的Activity依

2020-10-08 18:48:41 132

原创 浅谈设计模式入门

设计模式基础良好的OO系统必须具备 复用、可扩充、可维护三个特性本

2020-10-08 18:08:12 148

原创 创建线程需要记住的几个点

使用多线程的目的一、在多核的cup处理器中,可以合理的利用资源,将任务分解开来,减缓单个cup的压力。二、在单核cpu处理器中,可以在一些不用cup的任务下,释放cup,让cup执行其他任务,比如IO操作阻塞的时候,是不需要CPU参与的。创建多线程的方式和区别一、创建多线程的方式继承 Thread 类、实现 Runnable 接口、实现 Callable 接口、线程池二、区别继承 Thread 类:扩展性不好;实现 Runnable 接口:无返回值,继承接口,扩展性好;实现 Callabl

2020-05-31 22:12:12 188

空空如也

空空如也

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

TA关注的人

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