自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 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 162

原创 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 232 2

原创 Jetpack探秘系列(一)----ViewModel

传统的开发模式中,大多数的处理逻辑和数据都是写在Activity和Fragment,导致两者代码臃肿,因此产生了诸如MVP,MVVM的架构,而ViewModel正是实现MVVM架构最重要的组件之一。ViewModel最重要的作用就是存放Activity和Fragment相关的数据,可以理解为存放页面所有数据的容器,那么问题来了,将数据和界面显示逻辑分开确实能让整体逻辑更清晰,但是为什么数据需要放在ViewModel,它和我们直接新建一个类来保存数据差别优点在哪?其中使用ViewModel最重要的是它

2021-04-04 00:06:31 286 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 521

原创 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 169

原创 从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 122

原创 measureChild方法解析

在自定义ViewGroup控件中,我们常常需要重写onMeasure->onLayout,onMeasure又会调用子控件的measure方法,该方法又会递归执行到子控件的onMeasure,如此递归,最后所有的子控件都确定了自己的大小(measure结果)和绘制位置(layout)后执行各自的draw方法。其中在ViewGroup控件在执行onMeasure的时候需要对每个子控件都执行//child是子控件,一般通过getChildAt(i)获得//widthMeasureSpec和heigh

2021-03-25 00:16:35 525

原创 Android加载流程解析(setContentView布局加载)

本文主要讲述app如何在onCreate方法中调用setContentView来加载布局,对于想知道app从启动到执行setContentView之间的执行逻辑的小伙伴可以查看Android加载流程解析(从app启动到执行onCreate)。首先查看setContentView方法 public void setContentView(@LayoutRes int layoutResID) { getWindow().setContentView(layoutResID); //1

2021-03-23 00:14:48 230

原创 Android Studio效率提升设置

本文提供了一些推荐的快捷键设置,读者可以根据自己的习惯定制化。//返回上次光标的位置,推荐ctrl+向左箭头setting->Keymap->Main menu->Navigate->Back//返回下次光标的位置,推荐ctrl+向右箭头setting->Keymap->Main menu->Navigate->Forward//以下推荐不设置,推荐使用默认的shift+shift,可以直接调出All、Classes、Files、Symbols、A

2021-03-18 00:38:06 342

原创 Android加载流程解析(从app启动到执行onCreate)

Android软件的主入口也是main,这个main方法定义在ActivityThread中:public static void main(String[] args) { ... Looper.prepareMainLooper(); ActivityThread thread = new ActivityThread(); thread.attach(false); if (sMainThreadHandler == null) { sMa

2021-03-07 21:39:42 886 1

原创 Android Studio小技巧之查找资源

在平时项目开发中,可能整个项目包含很多模块,体量很大,这就需要一些查找的技巧查找指定的类双击Shift键即可查找指定的文件名(包括类文件、资源文件等)查找代码中出现的字符鼠标指向项目名-右键点击Find in Path就可以查找字符,一般快捷键默认是Ctrl+Shift+F,推荐使用快捷键的方式,如果只是想查找单一文件中的字符,只需要Ctrl+F即可查找类的路径有时候通过双击Shift打开对应的类后,需要知道该类所在的路径,可以在类名上右击获取打开类在项目中的位置还是双

2021-02-04 00:26:43 1343

原创 浅谈函数式编程

初识函数式接口先介绍一下函数式接口,函数式接口就是有且只有一个抽象方法的接口(可以有多个非抽象方法),常见的函数式接口有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 171

原创 从内存角度分析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 153

原创 String,StringBuilder,StringBuffer,数组,列表之间的若干转换以及若干数组常用操作方法

0. 几点说明本博客主要研究不同类型数据之间相互转换以及常见的操作,StringBuilder和StringBuffer主要差别在于前者非线程安全,后者线程安全,方法差别不大,因此下文只研究了StringBuilder的相关操作。 为了更加深入的理解实现过程中相关变量的类型,建议使用getClass方法查看 ArrayList类型打印结果是以 “[ ]” 包围 数组直接打印的不会出现数组中的元素,只会出现数组变量在堆中的地址。可以使用Arrays.toString()查看数组。 数组,Array

2021-01-06 21:27:04 605

原创 桥接模式,NAT模式,仅主机模式区别

实验设置了六台虚拟机,其中:1. Linux-1和Linux-2都是桥接模式。 2.Linux-3和Linux-4都是NAT模式。3.Linux-5和Linux-6都是仅主机模式。已知主机内网地址为10.199.130.85。1.桥接模式在桥接模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机(主机和虚拟机处于对等地位),它可以访问网内任何一台机器。在桥接模式下,我们往往需要为虚拟主机配置IP地址、子网掩码等(注意虚拟主机的ip地址要和主机ip地址在同一网段)。  使用桥接..

2021-01-06 21:26:03 1852

原创 JAVA中 ^、&、|和位运算符的含义详解

1. ^(异或运算符)^是针对二进制的二目运算符。运算规则:两个二进制数值如果在同一位上相同,则结果中该位为0,否则为1,比如1011 & 0010 = 1001。2. |(或运算符)|是针对二进制的二目运算符。运算规则:两个二进制数值如果在同一位上至少有一个1,则结果中该位为1,否则为0,比如1011 & 0010 = 1011。3. &(与运算符)&是是针对二进制的二目运算符。需要注意的是&&是java中判断条件之间表示“和”的标识符,

2021-01-06 21:23:51 3547

原创 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 195

原创 Android Mvp架构详解

注意点:IView和IModel是顶层接口,接口中没有任何方法,用于多态。SingleInterfaceContract中View和Presenter接口以及ISingleInterfaceModel三个接口定义了MVP三层需要实现用于对方调用的方法。V层的基类BaseMVPActivity持有P层的对象,该对象在实现类中初始化,V层需要获取数据只要调用该对象2中对应的方法即可。P层的基类BasePresenter持有V层的对象,该对象在V层调用attach方法的时候初始化,P层需要返回数据只要调

2020-12-24 00:32:12 416

原创 Android Studio小技巧之查找中文字符串

首先去提供中文转Unicode的网站,将所需要搜索的中文输入然后在Android Studio中按ctrl+shift+f或者在左上角项目名右键Find in Path输入^((?!(\*|//)).)+[\u4eca]+[\u5929]+[\u5929]+[\u6c14]+[\u771f]+[\u597d],有几个中文输入几个"+[\u****]",注意把Regex正则表达式搜索打开...

2020-12-20 13:59:27 1199

原创 gradle下载慢的解决方案

今天从代码仓下载了很早以前的代码,需要重新下载gradle-5.4.1,然而下载过程过慢,等了半小时也只下载了1.06M。(忽略下面的6.1.1,当时测试时改成6.1.1而已)网上查了相关问题,主要有以下三种方案(最后本人是用第三种方案解决)1. 替换阿里云镜像的方案修改项目根目录下的文件 build.gradle:buildscript { repositories { //google() //jcenter() maven.

2020-09-20 17:53:23 19211 3

原创 Android开发中常用的shell脚本和bat脚本命令

1. 当需要跳转到某个路径下执行操作就可以使用cd命令,下面表示将当前的路径跳转到C:\ZhouXi下C:\shellShow>cd C:\ZhouXi ---------//cd就是change directory的缩写C:\ZhouXi>2. 当需要调试手机,但是不确定手机是否连接上的时候可以使用adb devices查看当前连接的设备C:\ZhouXi>adb devicesList of devices attachedFRU6R204260

2020-08-21 00:01:53 1616 1

原创 Java高效编程

本文前期会基于Efffective Java第二版来写,优先选取平时项目中接触比较多的注意点,在提炼书本的基础上补充平时项目中的一些见解。后期会脱离书本的建议给与自己对于高效java编程的想法,本文会持续更新。如有侵权,请联系博主。1. 谨慎地使用本地方法--Effective Java第54条Java Native Interface(JNI)允许Java应用程序调用本地方法,本地方法指的是使用c或者c++等别的语言编写的方法。...

2020-08-14 00:28:12 193

原创 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 477

原创 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 2091

空空如也

空空如也

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

TA关注的人

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