首页
学习
活动
专区
工具
TVP
发布

李蔚蓬的专栏

专栏成员
239
文章
346897
阅读量
33
订阅数
Tip | JNI数据类型与指针嵌套
像图中的CallObjectMethod()、CallIntMethod()等这里写的这些方法其实只是一个调用而已,
凌川江雪
2020-05-29
8220
NDK和JNI概要
NDK:Native Development Kit(Kit n.配套元件)是一系列工具的集合; 它提供了一系列的工具,帮助开发者快速开发C/C++的动态库, 并能自动将so和Java一起打包成apk;
凌川江雪
2020-05-26
5050
基于堆栈内存详析 Java函数形参是传值还是引用?
Java中没有指针的说法,Java中的引用就类似于C++的指针, Java的引用是栈区的一个变量, 如果引用的是基本数据类型,那它存储着就是栈区的一块内存,(因为普通基本数据类型由栈区管,long、int、short、byte、float、double、string、boolean),做形参时是传值调用; 如果引用的是new出来的实例(new String('a')也算,直接写'a'则存在栈区),则这个引用存储的是堆区一块内存的地址(这个时候就类似于C++的指针),做形参时是传引用调用,即C++中的传指针调用;
凌川江雪
2020-05-04
8210
Java设计模式 | 单例模式解析与实战
确保某个类有且只有一个对象的场景, 避免产生多个对象消耗过多的资源, 或者 某种类型的对象只应该有且只有一个。 例如, 创建一个对象需要消耗的资源过多, 如要访问IO和数据库等资源,这时就要考虑使用单例模式。
凌川江雪
2020-04-14
6720
Java设计模式 | 观察者模式解析与实战
定义对象间一种一对多的依赖关系, 使得每当一个对象改变状态, 则所有依赖于它的对象都会得到通知并被自动更新。
凌川江雪
2020-04-14
8800
Android | IPC 之 AIDL实践
现在我们看一下这两个实战项目, 一个AIDLTest项目, 还有一个AIDLDemo项目, AIDLTest项目可以 单独用于测试同一个进程内的Service基础运作, 当然这里咱们要表演一个IPC(进程间通信)过程, 即, 从AIDLDemo项目中, 访问到AIDLTest项目的MyService; 【即跨APP、跨进程通信访问】 下面是AIDLTest项目的AndroidManifest, 我们给MyService一个action标签, 以及记下来AIDLTest项目的包名,待会儿需要用到!
凌川江雪
2020-04-01
4890
牛客网刷题记 | 零散知识点汇总——Java(ing)
A.vector是线程安全的ArrayList,在内存中占用连续的空间。 初始时有一个初始大小, 当数据条数大于这个初始大小后会重写分配一个更大的连续空间。 如果Vector定义为保存Object则可以存放任意类型, 无需事先知道!!! B.选项说的情况就是我们自定义异常的情况, 我们可以用违例(Exception)来抛出一些并非错误的消息, 可以,并非错误的消息。 比如我自定义一个异常,若一个变量大于10就抛出一个异常, 这样就对应了B选项说的情况, 我用抛出异常说明这个变量大于10, 而不是用一个函数体(函数体内判断是否大于10,然后返回true或false)判断, 因为函数调用是入栈出栈, 栈是在寄存器之下的速度最快,且占的空间少, 而自定义异常是存在堆中,肯定异常的内存开销大! C选项是错误的,因为接口中不能声明变量,只有常量! 接口中只有常量定义,没有变量声明。 接口中方法默认是abstract public, 所以在接口只写函数声明是符合语法规则。 但是变量默认是用public final static 修饰的, 意思它是静态常量,不是变量! 另外, 常量不管在接口中还是类中必须在声明时初始化。 D.子类可以访问父类受保护的成员 访问修饰符 访问范围 继承性 private 本类内部 不可继承 私有的 (default) 本类+同包 同包子类可以继承 默认的 protected 本类+同包+子类 可以继承 受保护的 public 公开 可以继承 公开的
凌川江雪
2020-04-01
3420
Android网络 | Socket(Eclipse--Java)
在获取时使用方法readFromClient()来读取客户端数据。 如果读取数据过程中捕获到 IOException异常, 则说明此Socket对应的客户端Socket出现了问题, 程序就会将此Socket从socketList中删除。
凌川江雪
2019-12-16
9360
Android | App内存优化 之 内存泄漏 要点概述 以及 解决实战
1.Bitmap优化 Bitmap非常消耗内存, 而且在Android中,读取bitmap时, 一般分配给虚拟机的图片堆栈只有8M,所以经常造成OOM问题。 所以有必要针对Bitmap的使用作出优化: 1.1. 图片显示:加载合适尺寸的图片,比如显示缩略图的地方不要加载大图。 1.2. 图片回收:使用完bitmap,及时使用Bitmap.recycle()回收。 问题:Android不是自身具备垃圾回收机制吗?此处为何要手动回收。 Bitmap对象不是new生成的,而是通过BitmapFactory生产的。 通过源码可发现是通过调用JNI生成Bitmap对象(nativeDecodeStream()等方法)。 所以, 加载bitmap到内存里包括两部分, Dalvik(ART)内存和Linux kernel内存。 前者会被虚拟机自动回收。 而后者必须通过recycle()方法, 内部调用nativeRecycle()让linux kernel回收。 1.3. 捕获OOM异常:程序中设定如果发生OOM的应急处理方式。 1.4. 图片缓存:内存缓存、硬盘缓存等 1.5. 图片压缩:直接使用ImageView显示Bitmap时会占很多资源, 尤其当图片较大时容易发生OOM。 可以使用BitMapFactory.Options对图片进行压缩。 1.6. 图片像素(质量):android默认颜色模式为ARGB_8888, 显示质量最高,占用内存最大。 若要求不高时可采用RGB_565等模式。 还可以使用WebP; 图片大小:图片长度 * 宽度 * 单位像素 所占据字节数 ARGB_4444:每个像素占用2byte内存 ARGB_8888:每个像素占用4byte内存 (默认) RGB_565:每个像素占用2byte内存 1.7. 考虑使用inBitmap;图片优化之inBitmap 2. 巧用对象引用类型
凌川江雪
2019-12-16
1.3K0
Android | App内存优化 之 JVM & Android内存管理机制
计数器的值代表着下一条需要执行的字节码指令,!!! 字节码解释器工作时, 就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,!!!! 分支、循环、跳转、异常处理、线程恢复等基础功能 都需要依赖这个计数器来完成。**
凌川江雪
2019-11-27
1.6K0
Android(Java) | 你真的熟悉Java匿名内部类吗(Java匿名内部类的限制)
如上代码, new Foo()在定义的时候, 重写了bar()这个方法, 如此一来new Foo(){...}这里就是一个匿名内部类了; 呐这个匿名内部类,实际上在字节码中是会定义出来的,!!! 定义出来一个用于定位的“名字”, 这个“名字”可见上面代码的第二行, “com.bennyhuo.iiv.ch1.”即代码包名, “OuterClass$1”即外部内名$1, 1代表这个匿名内部类, 是前缀的外部类中,定义的第一个匿名内部类, 再创建第二个匿名内部类 就是$2了; 所以匿名内部类跟普通类一样,是可以加载出来的!!! 只不过参数格式不一样, 普通类是“class 类名” 匿名内部类是“class 包名.外部类名$num”
凌川江雪
2019-11-11
1.8K0
Android | 如何使程序实现线程安全(拓展关键词:ThreadLocal、重排序、volatile/final)
假设Thread1 为 writer线程,初始化了一个FinalFieldExample实例f, Thread2 为 reader线程,读取实例f 的x、y值,赋值给 i、j; 那么表面上我们是期待结果是 i = 3, j = 4的:
凌川江雪
2019-11-06
1.1K0
Rxjava源码解析笔记 | 创建Observable 与 Observer/Subscriber 以及之间订阅实现的源码分析
接下来是Rxjava的SDK中subscribe()的传入参数 是Observer时候(observable.subscribe(observer);)的源码:
凌川江雪
2019-06-11
1.5K0
File was loaded in the wrong encoding
如题:真是惨不忍睹。 在AS中显示是错误的,在文本编辑软件却正确显示!! 在AS中显示是错误的,在文本编辑软件却正确显示! 解决方法: 在Notepad++记事本中,打开有问题的java文件设置一下U
凌川江雪
2019-05-20
1.5K0
Tip | 写一段会产生死锁的代码
两个线程: 线程1 锁o1, 执行块中 try睡1s试图锁o2 线程2 锁o2, 执行块中锁o1, object式: public class Test { static Object o1 = new Object(); static Object o2 = new Object(); public static void main(String[] args) { new Thread(new Runnable() { pub
凌川江雪
2019-05-15
3620
Android动画基础 | 概述、逐帧动画、视图动画
或者给<animation-list>添加android:oneshot="true"属性,也可实现:
凌川江雪
2019-05-14
4K0
01 详析一次腾讯一面 | 移动端开发岗
URL realUrl = new URL(url); HttpURLConnection conn = (HttpURLConnection) realUrl .openConnection(); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); // POST方法 conn.setRequestMethod("POST"); // 设置通用的请求属性 conn.setRequestProperty("accept", "*/*"); conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.connect();
凌川江雪
2019-05-13
6760
Tip | Android的消息机制
简述 首先,底层实现了一个线程本地存储,叫ThreadLocal区域, 一个主线程以及它对应的所有子线程,共享同一个 ThreadLocal对象, 这个ThreadLocal对象中可以说逻辑上维护着一个key-value表, 这个表为不同的线程 一 一 对应地维护一套数据副本, 每一套数据副本对应着一个线程 (有多少线程共享这个ThreadLocal对象,ThreadLocal对象就准备多少套数据副本), 每一套数据副本也是ThreadLocal对象中这个逻辑表的一个项, 数据副本在这里可以具
凌川江雪
2019-04-18
4000
Java常识Tip
源文件(.java)-->编译器compiler--->字节码文件(.class)--> 解释器interpreter(JVM解释执行,把字节码解释成具体机器的执行指令)--> 最终平台可执行程序
凌川江雪
2019-04-18
7010
Java | Static 与 final
Static #Static 定义的变量 其调用: 类名.变量名 所有同一个类的类成员共享,共用一个; 其值可以修改 不能将方法体内的局部变量声明为static #Static 定义的方法 其调用: 类名.方法 如 Math.pow 所有同一个类的类成员共享,共用一个; 其值可以修改 静态方法不能向对象实施操作,静态方法中不可以使用this关键字; 不能访问类中实例域(非static域 / 变量 / 方法),可访问类的静态域 / 变量(而且无需类名.变量名的普通调用格式): //demo class
凌川江雪
2019-03-15
3510
点击加载更多
社区活动
【纪录片】中国数据库前世今生
穿越半个世纪,探寻中国数据库50年的发展历程
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档