Android
文章平均质量分 68
川川~
剪水行舟
展开
-
Unresolved reference: kotlinx 和 Unresolved reference:xxx
是因为用于使用 Gradle 构建的 Kotlin 版本与 IDE 插件中的版本不一样的原因。这个报错是因为build.gradle中忘记apply plugin了。点击install - apply。同步以后再次编译发现报错。原创 2024-02-14 14:11:36 · 1129 阅读 · 0 评论 -
LayoutInflater.inflate全面解读
LayoutInflater.inflate() 是 Android 系统中用于将 XML 布局文件转换成相应的 View 的方法。在 Android 开发中,我们经常使用此方法来动态创建和填充布局。参数含义:int resource: 这是要加载的 XML 布局资源 ID;ViewGroup root: 可选的 ViewGroup 参数,它作为新创建View的父容器。如果提供了父容器,inflate 过程会考虑父容器的 LayoutParams,并可能根据需要调整新创建视图的属性;原创 2024-01-27 09:58:55 · 1266 阅读 · 0 评论 -
【设计模式】设计模式六大原则
单一职责原则一个类只负责一项职责难点这个“单一”是怎么界定的,每个人都有自己的看法,需要根据个人经验一级具体的业务逻辑来确定但是,其基本的指导原则是:两个完全不同的功能就不应该出现在同一个类中,一个类中应该是一组相关性很高的函数、数据的封装里氏替换原则所有引用基类的地方必须能透明的使用其子类对象难点如何建立抽象里氏替换的核心原理是抽象,将公共的行为进行抽象,不同子类实现不同的行为优点提高代码复用性,提高代码可扩展性缺点由于抽象依赖于继承这个特性,所以缺点是有侵入性,代码冗余,灵活性原创 2022-01-11 22:53:58 · 321 阅读 · 0 评论 -
Android指定浏览器访问指定网页
Android指定浏览器访问指定网页;便捷的获取app的包名的方法原创 2021-05-12 10:19:11 · 901 阅读 · 0 评论 -
Android中与Activity相关的知识扫盲和备忘
什么是Task、几种启动Activity的方式、各生命周期的区别和联系、横竖屏切换生命周期、启动模式以及应用场景、什么是Affinity、定义启动模式的方法和区别、Activity回收和数据恢复、onSaveInstanceState和onRestoreInstanceState调用时机 、intent-filter、Activity的进程优先级原创 2021-05-12 10:17:27 · 320 阅读 · 0 评论 -
使用ThreadPoolExecutor实现控制一个方法的并发量,实现同时只能有10个线程进入方法
线程池是什么线程池是一种基于池化思想管理线程的工具,设计它的核心目的是解决资源管理问题,可以降低资源消耗、提高响应速度以及提高线程的可管理性。ThreadPoolExecutorThreadPoolExecutor是Executor最下层的实现类参数1:corePoolSize:核心池大小参数2:maximumPoolSize 线程池中允许的最大线程数参数3:keepAliveTime 线程空闲时的存活时间,即当线程没有任务执行时,继续存活的时间,默认情况下,该参数只在线程数大.原创 2021-03-15 08:00:09 · 1584 阅读 · 7 评论 -
一个你读框架源码之前必须要理解的技术点,泛型(二)
上一篇介绍了一下各种定义,包括什么是泛型、泛型的优点、泛型擦除、泛型类、泛型接口、泛型方法、泛型通配符以及泛型上下边界,这一篇主要是上一篇的延续和补充限定类型变量在上一篇中,我们知道在使用泛型的时候,可以通过extends 限制泛型实参的上边界,除了限制上边界,我们还可以对泛型的类型变量加以约束,看下例子:class ExampleClass8{ //计算最小值 public <T extends Comparable> T min(T paramA, T paramB){原创 2020-07-30 17:01:39 · 165 阅读 · 0 评论 -
通过一张图理解 scrollBy()与scrollTo()的区别
通过字面意思,scrollTo是指移动到某一位置,scrollBy该怎么理解呢?先看一下两者的源码scrollTo:scrollBy:根据源码的实现,参数x是水平移动的位置,y是垂直方向移动的位置scrollBy调用了scrollTo方法;scrollBy是在上一次移动的位置的(mScrollX和mScrollY)基础上进行逸动的;scrollTo是直接移动到(x,y)的位置需要注意的是,scrollTo和scrollBy都是移动的内容,而不是将View做整体的移动,对于一个TextVi原创 2020-07-30 16:28:03 · 2106 阅读 · 0 评论 -
垃圾回收器如何判断对象的“存活”,以及类何时回收
前言在垃圾回收器回收堆里面的对象的时候,需要判断对象是否还被其它地方使用,此时的状态我们可以比作对象是“存活”的,如果对象没有被其它地方使用,就回被垃圾回收器回收。如何判断对象是否是“存活”的呢?有两个方法:引用计数法和可达性分析...原创 2020-07-30 14:51:14 · 298 阅读 · 0 评论 -
Java中对象到底存在堆中还是栈中
创建一个对象的时候,到底是在栈中分配还是在堆中分配需要看2个方面:对象类型和在Java中存在的位置1.如果是基本数据类型,byte、short、int、long、float、double、char,如果是在方法中声明,则存储在栈中,其它情况都是在堆中(比方说类的成员变量就在堆中);2.除了基本数据类型之外的对象,JVM会在堆中创建对象,对象的引用存于虚拟机栈中的局部变量表中3.并不是所有的对象都在堆中存储,可以走栈上分配,在不在栈上分配取决于Hotspot的一个优化技术:“逃逸分析”一般JVM 执行原创 2020-07-30 14:50:02 · 13907 阅读 · 1 评论 -
以面向对象的角度分析抽象类和接口
一、面向对象思想的理解面向对象即 OOP(Object Oriented Programming)它有三大特征 :封装、继承、多态封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。多态是同一个行为具有多个不同表现形式或形态的能力。面向对象思想相当于对万物的一个抽象,抽象具体体现在接口和抽象类抽象类和接口1.首先在定原创 2020-07-19 18:00:07 · 483 阅读 · 0 评论 -
Android Studio 修改工程名
(本文用于演示的AS版本是4.0)新项目开发到一半,app的名字换了,工程名也要做相应的修改。当我们右键工程名-Refactor-Rename的时候,发现不能修改,报错“Can’t rename root module”这时,我们可以关闭Android Studio,找到项目所在目录,更改项目根目录的名字。然后打开Android Studio 打开改名后的工程。打开后发现项目名是变了,但是后面中括号里还有之前的项目名字[NestedScroll]这时,我们只需要修改settings.gr原创 2020-07-12 16:11:22 · 3414 阅读 · 0 评论 -
搞清Class.forName()和ClassLoader.loadClass()的区别
反射定义在运行状态中,对任意一个类,都能知道这个类中所有的属性和方法;对于任意一个对象,都能调用它的任意一个方法和属性。反射的使用过程中要基于Class对象,那通过Class.forName()或者ClassLoader.loadClass()获取Class有什么区别呢?查看Class.forName()源码 @CallerSensitive public static Class<?> forName(String className) t原创 2020-06-22 17:37:13 · 3017 阅读 · 0 评论 -
Android中ClassLoader双亲委托机制
目录前言DexART与Dalvikdexopt与dexaotClassLoader介绍双亲委托机制总结前言一个Java程序,会通过javac编译成class文件,然后通过虚拟机加载(ClassLoader)到方法区,执行引擎会执行这些字节码,并翻译成操作系统底层相关函数。这是JVM运行java代码的整体流程。由于Java中的ClassLoader类加载机制和Android中是不同的,本文将介绍Android虚拟机的类加载机制Dex了解JVM的老铁都知道,JVM运行的是Class字节码。由于Cla原创 2020-06-21 14:25:56 · 1196 阅读 · 0 评论 -
为什么PathClassLoader的父加载器(parent)是BootClassLoader?
目录写在前面查看PathClassLoader的源码ActivityThread类的main方法总结写在前面双亲委托机制中,当加载一个Class的时候,如果当前ClassLoader有父加载器的时候用父类加载器加载。为什么我们写的应用程序使用PathClassLoader加载,又为什么PathClassLoader的父加载器(parent)是BootClassLoader?查看PathClassLoader的源码从上图可知,PathClassLoader构造函数传入了一个ClassLoader类型原创 2020-06-21 14:15:18 · 1114 阅读 · 0 评论 -
转发:UML类图详解和示例(超详细)
写在前面日常工作中用到UML类图,从网上找到一篇博客关于其用法写的不错,在此转发一下方便自己以后查看原文链接:UML类图详解和示例目录写在前面UML类图概述什么是UML类图UML类图的组成类和对象类之间的关系依赖关系泛化关系关联关系聚合关系组合关系实现关系类的多重性UML类图概述什么是UML类图要认识UML类图,要从UML是什么开始.UML(Unified Modeling Language)即统一建模语言,是用于系统可视化建模语言。它是国际统一软件建模标准,融合了OMT、OOSE、Booch方转载 2020-06-19 11:31:27 · 4701 阅读 · 2 评论 -
“码上理解”---RxJava 线程调度分析(一)切换子线程
目录RxJava简单介绍文章目的环境搭建和代码示例分析subscribeOn(Schedulers.io())Schedulers.io()subscribeOn()三级目录RxJava简单介绍RxJava现在几乎每个Android项目中都有它的身影,RxJava是使用了Rx(ReactiveX)函数库的语言库,除了RxJava,Rx几乎支持了全部的流行编程语言,例如:RxJS、Rx.NET等等。RxJava的优点和使用这篇文章不做详细介绍,今天关注一下框架内部原理:比如我们平时用RxJava的时候原创 2020-06-06 17:52:29 · 632 阅读 · 0 评论 -
“码上理解”--- 手撕RxJava订阅关系,事件发送和接收
目录RxJava简单介绍文章目的环境搭建和代码示例subscribe()方法Observable.create(new ObservableOnSubscribe< String>() {})1.以observer为参数创建了一个发射器2.调用observer的onSubscribe方法3.调用source的subscribe方法,并将发射器传递过去总结(以create操作符为例)RxJava简单介绍RxJava现在几乎每个Android项目中都有它的身影,RxJava是使用了Rx(Reac原创 2020-06-05 10:42:22 · 432 阅读 · 0 评论 -
一个你读框架源码之前必须要理解的技术点,泛型(一)
泛型泛型的本质是参数化类型,在不创建新的类型的情况下,通过泛型指定某一个类、方法或接口成不同类型。将类型由原来的具体类参数化,此时的参数可以称为类型形参public class Test1 { /** * @param args * ArrayList<Integer>,ArrayList被指定了一个Integer的类型形参,所以此时的ArrayList只能添加Integer的对象 * @throws Exception */ public static void ma原创 2020-06-01 18:30:40 · 223 阅读 · 0 评论 -
热修复原理分析总结
热修复概念热修复流程步骤常见热修复解决方案类替换和 NDKClassLoader原创 2020-05-24 17:08:00 · 563 阅读 · 2 评论 -
干掉findViewById,3种方法总有一款适合你
相信大家用AS写页面的时候,最烦的就是findViewById,尤其是复杂布局,那感觉太酸爽????,下面的3中方法我在项目中都在使用,目前感觉良好????,废话不多说,文章正式开始~文章目录方案一:使用Android Studio 3.6新特性方案二:使用Kotlin为Android提供的扩展插件kotlin-android-extensions方案三:使用[butterknife](http://jakewharton.github.io/butterknife/)总结方案一:使用Android S原创 2020-05-15 17:59:56 · 716 阅读 · 0 评论 -
在Android中使用AspectJX框架遇到的配置问题
一个基于AspectJ并在此基础上扩展出来可应用于Android开发平台的AOP框架,可作用于java源码,class文件及jar包,同时支持kotlin的应用。AspectJX Github链接首先,交代一下我的项目结构和遇到问题的三方包:1.使用了Arouter,是一个组件化的项目2.使用了友盟的sdk按照AspectJX文档上配置:1.在项目根目录的build.gradle里依赖AspectJXdependencies {classpath ‘com.hujiang.aspec.原创 2020-05-11 18:12:33 · 8628 阅读 · 8 评论 -
Android Splash启动页秒开方案,适配全面屏
Android 应用启动问题:由于zygote进程创建新进程运行app是耗时的,所以页面上会先出现黑屏或白屏,然后再进入app的第一个页面。黑屏或白屏是系统添加再第一个启动页面前面的一个临时窗口(StartingWindow)。启动页样式和解决方案:一、从UI拿到的启动页,由一个纯色或简单渐变色背景+若干图标组成,举例如下:页面上方一个logo 底部有一段话这种启动页可以采用layer-...原创 2020-04-28 17:51:29 · 4419 阅读 · 6 评论 -
解决Android性能分析工具systrace使用时找不到section name(或者叫找不到tag)
一、我们先说可能的原因如果找不到tag或者叫section name,有可能是①beginSection和endSection没有成对出现②命令行设置了-t N | --time=N,但是这个时间段没有执行tag所在的那段功能代码比如说在Application中的onCreate中设置了tag,命令行中 -t 5(跟踪设备5秒),如果我们应用活着的时候,执行了这段命令,生成的html中肯定...原创 2020-03-23 22:42:08 · 2884 阅读 · 7 评论 -
Android在java代码中修改文字颜色的几种方法
Android在java代码中修改文字颜色的几种方法直接见代码如下package com.example.blogtest;import android.graphics.Color;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.widget.TextVi...原创 2018-12-31 14:44:20 · 3982 阅读 · 0 评论 -
java单例模式的5种实现方式
简介单例模式是指在程序中只有一个实例存在。并且在程序运行中的任何时候都可以获取该实例对象。场景1.Android中数据库多线程读写时,保证每个线程使用同一个SQLiteDatabase对象,否则会报错“database is locked”;2.Android常用框架EventBus中使用了单例模式。例如,当我们获取EventBus对象时,会使用的EventBus.getDefau...原创 2018-07-26 15:56:58 · 269 阅读 · 1 评论