Java系列
文章平均质量分 84
洲汐
互联网小白一枚
展开
-
Jetpack探秘系列(三)----LiveData
在上一篇文章中,Lifecycle组件使得普通类能随时感知Activity/Fragment周期的变化,以此来执行对应周期的逻辑而在本文中,LiveData组件使得Activity/Fragment能够随时感知到界面数据的变化,以此来执行对应的界面数据更新LiveData的基本操作public class MainActivity extends AppCompatActivity { private static final String TAG = "LiveDataDemo";.原创 2021-04-08 09:46:30 · 143 阅读 · 0 评论 -
Jetpack揭秘系列(二)----Lifecycle
public class MyObserver { private static final String TAG = "Lifecycle_MyObserver"; public void activityCreated() { Log.i(TAG, "activityCreated in MyObserver"); } public void activityResume() { Log.i(TAG, "activityResume .原创 2021-04-05 23:54:25 · 216 阅读 · 2 评论 -
Jetpack探秘系列(一)----ViewModel
传统的开发模式中,大多数的处理逻辑和数据都是写在Activity和Fragment,导致两者代码臃肿,因此产生了诸如MVP,MVVM的架构,而ViewModel正是实现MVVM架构最重要的组件之一。ViewModel最重要的作用就是存放Activity和Fragment相关的数据,可以理解为存放页面所有数据的容器,那么问题来了,将数据和界面显示逻辑分开确实能让整体逻辑更清晰,但是为什么数据需要放在ViewModel,它和我们直接新建一个类来保存数据差别优点在哪?其中使用ViewModel最重要的是它原创 2021-04-04 00:06:31 · 270 阅读 · 1 评论 -
android开发中SDK相关的一列问题解析
Android sdk(software development kit)是提供给应用开发者调用google提供的Api的工具集,里面包含了android提供的api源码,编译工具等,具体组成可以看https://blog.csdn.net/zizidemenghanxiao/article/details/50041185。其中最重要的文件是android.jar,平时安卓开发中所调用的库大多数在这个文件中需要注意的是,编译好的apk并不包含android.jar,那么app没有了这些api是如果运原创 2021-03-31 23:36:17 · 495 阅读 · 0 评论 -
Java反射解析
首先放上该博客所用到的两个类Person类:public class Person { public String name; public int age; private int salary; public Person() { } public Person(String name) { this.name = name; } public Person(String name, int age) { thi原创 2021-03-30 00:38:57 · 154 阅读 · 0 评论 -
从android源码分析Handler流程
执行prepareMainLooperActivityThread的main方法是app的入口,首先调用了Looper.prepareMainLooper();查看源码:public static void prepareMainLooper() { prepare(false); synchronized (Looper.class) { if (sMainLooper != null) { throw new IllegalStateExcep原创 2021-03-29 23:21:51 · 111 阅读 · 0 评论 -
measureChild方法解析
在自定义ViewGroup控件中,我们常常需要重写onMeasure->onLayout,onMeasure又会调用子控件的measure方法,该方法又会递归执行到子控件的onMeasure,如此递归,最后所有的子控件都确定了自己的大小(measure结果)和绘制位置(layout)后执行各自的draw方法。其中在ViewGroup控件在执行onMeasure的时候需要对每个子控件都执行//child是子控件,一般通过getChildAt(i)获得//widthMeasureSpec和heigh原创 2021-03-25 00:16:35 · 490 阅读 · 0 评论 -
浅谈函数式编程
初识函数式接口先介绍一下函数式接口,函数式接口就是有且只有一个抽象方法的接口(可以有多个非抽象方法),常见的函数式接口有Runnable,Comparable等@FunctionalInterfacepublic interface Runnable { void run();}public interface Comparable<T> { int compareTo(T var1);}jdk1.8以后增加了java.util.function包下的常用函.原创 2021-01-25 23:00:13 · 156 阅读 · 0 评论 -
从内存角度分析Java的深拷贝和浅拷贝
浅拷贝是指拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。深拷贝不仅拷贝对象本身,而且拷贝对象包含的引用指向的所有对象。举例来说更加清楚:对象A1中包含对B1的引用,B1中包含对C1的引用。浅拷贝A1得到A2,A2 中依然包含对B1的引用,B1中依然包含对C1的引用。深拷贝则是对浅拷贝的递归,深拷贝A1得到A2,A2中包含对B2(B1的copy)的引用,B2 中包含对C2(C1的copy)的引用。接下来通过内存分析来说明深拷贝与浅拷贝的区别,由于本文主要关注两个拷贝原创 2021-01-06 21:29:54 · 140 阅读 · 0 评论 -
String,StringBuilder,StringBuffer,数组,列表之间的若干转换以及若干数组常用操作方法
0. 几点说明本博客主要研究不同类型数据之间相互转换以及常见的操作,StringBuilder和StringBuffer主要差别在于前者非线程安全,后者线程安全,方法差别不大,因此下文只研究了StringBuilder的相关操作。 为了更加深入的理解实现过程中相关变量的类型,建议使用getClass方法查看 ArrayList类型打印结果是以 “[ ]” 包围 数组直接打印的不会出现数组中的元素,只会出现数组变量在堆中的地址。可以使用Arrays.toString()查看数组。 数组,Array原创 2021-01-06 21:27:04 · 592 阅读 · 0 评论 -
JAVA中 ^、&、|和位运算符的含义详解
1. ^(异或运算符)^是针对二进制的二目运算符。运算规则:两个二进制数值如果在同一位上相同,则结果中该位为0,否则为1,比如1011 & 0010 = 1001。2. |(或运算符)|是针对二进制的二目运算符。运算规则:两个二进制数值如果在同一位上至少有一个1,则结果中该位为1,否则为0,比如1011 & 0010 = 1011。3. &(与运算符)&是是针对二进制的二目运算符。需要注意的是&&是java中判断条件之间表示“和”的标识符,原创 2021-01-06 21:23:51 · 3398 阅读 · 0 评论 -
String类中substring方法的内部实现以及内存泄漏详解
在JDK7之前,String类中的substring方法新建的对象与原对象指向同一个数组,具体来说:/**JDK6*/public final class String { /** The value is used for character storage. */ private final char value[]; /** The offset is the first index of the storage that is used. */ private f原创 2021-01-06 21:19:34 · 178 阅读 · 0 评论 -
Java高效编程
本文前期会基于Efffective Java第二版来写,优先选取平时项目中接触比较多的注意点,在提炼书本的基础上补充平时项目中的一些见解。后期会脱离书本的建议给与自己对于高效java编程的想法,本文会持续更新。如有侵权,请联系博主。1. 谨慎地使用本地方法--Effective Java第54条Java Native Interface(JNI)允许Java应用程序调用本地方法,本地方法指的是使用c或者c++等别的语言编写的方法。...原创 2020-08-14 00:28:12 · 174 阅读 · 0 评论 -
Aidl进阶 ----- 自定义类型传输
2020.8.7 第一次编辑。。。未完待续。。。package com.zhouxi.client;import androidx.appcompat.app.AppCompatActivity;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.content.ServiceConnection;import a.原创 2020-08-12 00:25:27 · 463 阅读 · 0 评论 -
Aidl介绍 ----- 常见踩坑原因和解决方案
package com.zhouxi.aidldemo;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;import android.os.Bundle;import android.view.View;public class MainActivity extends AppCompatActivity implements View.OnClickListener { @.原创 2020-07-13 00:44:52 · 2023 阅读 · 0 评论