- 博客(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
原创 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
原创 创建线程需要记住的几个点
使用多线程的目的一、在多核的cup处理器中,可以合理的利用资源,将任务分解开来,减缓单个cup的压力。二、在单核cpu处理器中,可以在一些不用cup的任务下,释放cup,让cup执行其他任务,比如IO操作阻塞的时候,是不需要CPU参与的。创建多线程的方式和区别一、创建多线程的方式继承 Thread 类、实现 Runnable 接口、实现 Callable 接口、线程池二、区别继承 Thread 类:扩展性不好;实现 Runnable 接口:无返回值,继承接口,扩展性好;实现 Callabl
2020-05-31 22:12:12 188
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人