自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(172)
  • 资源 (5)
  • 收藏
  • 关注

原创 Android-三方框架的源码

跳转Activity最终必定是走到了 startActivity(intent)方法,而intent是一般需要目标Activity的Class,构建PostCard,继承自路由元信息 RouteMeta,参数group是path的第一级,group的作用是作为路由的默认分组。遍历所有帮助类,把帮助类路径中的"/“换成”."。为弱引用指定一个引用队列,当弱引用指向的对象被回收时,此弱引用就会被添加到这个队列中,我们可以通过判断这个队列中有没有这个弱引用,来判断该弱引用指向的对象是否被回收了。

2024-01-17 09:56:26 1001

原创 Android-网络基础

https 的作用主要有两点:建立安全的信息传输通道,保证数据传输安全;TCP(Transmission Control Protocol ,传输控制协议)与UDP(User Datagram Protocol ,用户数据报协议)是传输层中的两种协议,我们平时刷视频、打游戏、看新闻等都要通过这两种协议进行数据传输。在正式的使用场景中一般都是对称加密和非对称加密结合使用,使用非对称加密完成秘钥的传递,然后使用对称秘钥进行数据加密和解密。对称加密: 加密和解密用的都是相同的秘钥,优点是速度快,缺点是安全性低。

2024-01-15 16:26:03 451

原创 Android-跨进程

这是一个基于消息的服务,每次启动该服务并不是马上处理你的工作,而是首先会创建对应的Looper,Handler并且在MessageQueue中添加的附带客户Intent的Message对象,当Looper发现有Message的时候接着得到Intent对象通过在onHandleIntent((Intent)msg.obj)中调用你的处理程序.处理完后即会停止自己的服务.意思是Intent的生命周期跟你的处理的任务是一致的.所以这个类用下载任务中非常好,下载任务结束后服务自身就会结束退出。Binder 驱动。

2024-01-14 00:25:55 885

原创 Android-常用数据结构和控件

提到二分查找,这里还需要提一下的是二分查找的前提是数组已经是排好序的,没错,SparseArray 中就是按照key进行升序排列的。当从网络中获取到图片之后,首先判断一下imageView.getTag()与图片的 url 是否一致,如果一致则加载图片,如果不一致则不加载图片,通过这样的方式避免了列表中异步加载图片的错位。2、确定本地缓存,通常用的是 DiskLruCache,这里需要注意的是图片缓存的文件名一般是 url 被 MD5 加密后的字符串,为了避免文件名直接暴露图片的 url。

2024-01-14 00:25:39 956

原创 Android-基础

singleTask - 栈内复用模式:当 该 Activity 所属的任务中已存在 该 Activity 的实例,那么不创建该 Activity 的新实例 —— 而是 首先将任务中该 Activity 实例之上的 Activity 全都出栈,并且走该 Activity 实例的 onNewIntent 回调,注入新的 intent,并执行 onResume。7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

2024-01-14 00:25:06 1079

原创 Android-设计模式

接着,进程就一条一条地执行可执行文件中包含的代码。进程之间是不共享地址空间的,如果我们在一个进程中创建另外一个进程(比如,代码中有一个 fork() 语句,进程执行到这条语句的时候会创建一个新的进程),操作系统会给新进程分配新的地址空间,并且将老进程地址空间的所有内容,重新拷贝一份到新进程的地址空间中,这些内容包括代码、数据(比如 user 临时变量、User 对象)。而且,这两个对象并不是同一个对象,这也就说,单例类中对象的唯一性的作用范围是进程内的,在进程间是不唯一的。23 种经典的设计模式。

2024-01-08 22:34:44 960

原创 Android-多线程

线程池复用线程的原理,创建 Thread 对象的时候传入的不是我们的 Runnable 对象,而是通过线程池自定义的 Runnable 类,这个类主要的作用不仅是执行我们的 Runnable 对象,当我们传入的任务被某个线程执行完毕之后,它还会遍历阻塞队列中其他未执行的任务,这样就能达到一个线程执行多个 Runnable 对象的效果,这个就是线程池复用线程的原理。线程是进程中可独立执行的最小单位,也是 CPU 资源(时间片)分配的基本单位,同一个进程中的线程可以共享进程中的资源,如内存空间和文件句柄。

2024-01-08 18:30:07 1077

原创 Android-消息机制Handler

message是有一个内存块,里面的内容处理掉之后,放到另一个消息链表,头插,每生成一个节点放到头部。Handler中的消息队列,也就是MessageQueue,从名字看是一个队列,但是底层是单链表结构,通过MessageQueue.enqueueMessage()向消息队列添加消息,入参时候的 when 参数,when变量是一个时间戳,就是我们平时调用 sendMessageDelayed 方法时传入的延时 + 当前系统时间,使用 when 属性对消息进行排序,when 的值越小,在链表中的排序越靠前。

2024-01-08 16:12:32 913

原创 设计模式之美学习笔记-单例模式-为什么说支持懒加载的双重检测不比饿汉式更优?

单例的定义 单例设计模式(Singleton Design Pattern)理解起来非常简单。一个类只允许创建一个对象(或者叫实例),那这个类就是一个单例类,这种设计模式就叫作单例设计模式,简称单例模式。单例的用处 从业务概念上,有些数据在系统中只应该保存一份,就比较适合设计为单例类。比如,系统的配置信息类。除此之外,我们还可以使用单例解决资源访问冲突的问题。单例的实现 单例有下面几种经典的实现方式。

2023-12-01 22:23:54 1116

原创 设计模式之美学习笔记-理论篇1-面向对象的特性

面向对象主流的编程范式或者是编程风格有三种,它们分别是面向过程、面向对象和函数式编程。面向对象这种编程风格又是这其中最主流的。现在比较流行的编程语言大部分都是面向对象编程语言。大部分项目也都是基于面向对象编程风格开发的。面向对象编程因为其具有丰富的特性(封装、抽象、继承、多态),可以实现很多复杂的设计思路,是很多设计原则、设计模式编码实现的基础。面向对象的四大特性:封装、抽象、继承、多态面向对象编程与面向过程编程的区别和联系面向对象分析、面向对象设计、面向对象编程。

2023-11-30 15:24:14 1042

原创 Android logfilter抓log

本文献给测试同学logfilter的效果如下,很方便用:安装三步:1、安装jdk,安装包我上传了可以0积分下载,直接安装下载完了。https://download.csdn.net/download/u013750244/854843352、logfilter安装,安装包我也上传了,可以0积分下载,下载了不用安装,找个文件夹放一下。3、解压刚才下载的logfilter,如图:右键logfilter.jar如下图的第1步,选择属性之后弹框如2弹出 的弹框点击 更改 选择开发方式是记事本(把

2022-05-28 15:49:21 1316

转载 adb 打印activity堆栈

文章来源:http://www.k-beta.com/dump_activity.html更多adb命令:https://editor.csdn.net/md/?articleId=122071015使用adb查看当前手机的相关内容adb shell dumpsys activity可以得到如下内容:ACTIVITY MANAGER PENDING INTENTS (dumpsys activity intents) * PendingIntentRecord{42b05f20 com.and

2022-03-30 16:05:39 2528

转载 Android 项目架构系列之代码的混淆

被前辈问到代码混淆,决定从自己的模块跳出来,思考和优化项目的整体架构,写下系列的第一篇 代码的混淆。代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。可以加大反编译的成本,但是并不能彻底防止反编译。混淆我在项目build.gradle中android下的配置如下: buildTypes { release { minifyEnabled true prog

2022-03-25 14:22:46 510

转载 Android Fragment 常见问题

1、Fragment与Activity生命周期https://juejin.cn/post/70213987310564802692、add和replace的区别add方式实现fragment的效果就是:切换fragment时不会重新创建,是什么样子切换回来还是什么样子;用replace的效果就是:切换fragment时每次都会销毁前一个Fragment重新创建初始化。3、Fragment应用于GlideGlide 是如何判断容器是否还处于活跃状态的呢?类似于 Jetpack 组件中的 Life

2022-03-20 16:21:43 584

原创 Android Studio 内存可见和修改内存大小

设置AS内存可见,勾选上,点击Apply就可以:修改内存大小:1、点击如图,会打开路径C:\Users.AndroidStudio4.0\config下的studio64.exe.vmoptions,没有的话会创建studio64.exe.vmoptions。新建的studio64.exe.vmoptions如果没内容从安装路径把studio64.exe.vmoptions内容拷贝进去。2、修改如图两个参数,然后 Invalidate Caches/ Restart 重启就搞定了。-Xms 是

2022-03-08 10:26:28 6180

转载 socketpair函数介绍及使用

文章来源:https://blog.csdn.net/wufuhuai/article/details/79747912摘要在linux下,使用socketpair函数能够创建一对套节字进行进程间通信(IPC)。函数原形:#include <sys/types.h>#include <sys/socket.h>int socketpair(int domain, int type, int protocol, int sv[2]);参数1(domain):表示协议族

2022-01-21 13:41:03 385

原创 Android .dex、.odex、Dalvik、ART、AOT、OAT

文章来源:https://www.jianshu.com/p/e52b7e460748https://zhuanlan.zhihu.com/p/53723652目的理清 .dex、.odex、ART、AOT、OAT 等近似名称的概念和意义。APK 生成最终 apk 内的代码文件为 .dex 文件。APK 安装运行基础概念**AOT:**编译方式,运行前编译。AOT是指"Ahead Of Time",与"Just In Time"不同,从字面来看是说提前编译。JIT是运行时编译,是动态编译,

2022-01-19 14:23:20 1095

转载 JAVA String.format的使用,及与 StringBuilder和String ‘+’比较

文章来源:https://blog.csdn.net/qq_35387940/article/details/103399432这里我选取作为比较的例子是, 在一个url后面拼接参数。关于拼接参数, 无非就几种,一种就是String的 ‘+’ ,一种就是StringBuilder.append(StringBuffer.append) ,还有就是String.format。先来看看这三种的效果:TestStringAppend.java/** * @Author : JCccc * @Crea

2022-01-17 21:52:14 741

转载 Java 实体类中的toString方法

文章来源:https://blog.csdn.net/Sunny5319/article/details/836175451.在Java中每个类都默认继承Object类,除非声明继承某个类。而Object类中有一个叫做toString的方法。该方法返回的是该Java对象的内存地址经过哈希算法得出的int类型的值在转换成十六进制。这个输出的结果可以等同的看作Java对象在堆中的内存地址。例如:package com.cal.toString; public class Test1 { public

2022-01-14 23:22:05 2201

转载 Java getSuperclass和getGenericSuperclass

文章来源:https://blog.csdn.net/sybnfkn040601/article/details/73602346https://cloud.tencent.com/developer/article/13531611.官方API对这两个方法的介绍 .getSuperclass :返回表示此 Class 所表示的实体(类、接口、基本类型或 void)的超类的 Class。如果此 Class 表示 Object 类、一个接口、一个基本类型或 void,则返回 null。如果此对象表示一

2022-01-08 14:22:34 2073

原创 Android adb命令 apk安装路径/连接设备/打开应用/杀死进程/打开系统应用/安装应用/截图/录屏 log PID/UID

杀死某进程:adb shell am force-stop com.***.***.***打开某应用的某Activity:adb shell am start com.***.***.***/.MainActivity打开系统设置:adb shell am start com.android.settings/com.android.settings.Settings

2021-12-21 19:02:20 3165

转载 Java transient关键字使用小记

文章来源:https://www.cnblogs.com/lanxuezaipiao/p/3369962.html1. transient的作用及使用方法我们都知道一个对象只要实现了Serilizable接口,这个对象就可以被序列化,java的这种序列化模式为开发者提供了很多便利,我们可以不必关系具体序列化的过程,只要这个类实现了Serilizable接口,这个类的所有属性和方法都会自动序列化。 然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化,打

2021-12-13 21:19:48 121

转载 Activity的启动流程三--基于API30分析

本文将根据Api 30(Android 11)的源码来分析Activity的启动流程。我个人把Activity的启动流程依次分为三个阶段:App进程中 ——[通过Binder]——> 系统进程中 ——[通过Binder]——> 回到App进程中下面按顺序进行梳理,主要整理大体脉络,不会大量贴出源码,只展示关键代码。一、App进程中第一阶段在用户进程中进行,比较简单。1. Activity一般通过Activity.startActivity(Intent)来启动Activity。通过

2021-12-10 21:15:48 602

原创 git review报错UnicodeDecodeError: ‘gbk‘ codec can‘t decode

报错信息类似:UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xac in position 44: illegal multibyte sequence解决方法:找到python安装目录或者直接搜subprocess.py,找到安装的地方,Python38-32\Lib\有个文件subprocess.py,encoding=NONE 改为encoding=‘utf-8’ 。...

2021-12-07 20:26:33 2177 3

转载 Activity的启动流程二--基于API29分析

文章来源:https://www.jianshu.com/p/160a53701ab6我个人把Activity的启动流程依次分为三个阶段:App进程中 ——(通过Binder)—→ 系统进程中 ——(通过Binder)—→ 回到App进程中1. App进程中App进程第一轮做的事儿不多,主要就是把传进来的Intent扔给AMS。1.1 Activity在Activity中调用了startActivity方法后,不管调用的是哪个重载,最后都会进入到startActivityForResult(In

2021-12-04 20:41:21 223

转载 一起设计一个Android倒计时组件

文章来源:一起设计一个Android倒计时组件1 背景我们在项目中经常有倒计时的场景,比如活动倒计时、抢红包倒计时等等。通常情况下,我们实现倒计时的方案有Android中的CountDownTimer、Java中自带的Timer和ScheduleExcutorService、RxJava中的interval操作符。在实际项目中存在2个典型的问题,一是倒计时的实现形式不统一,不统一的原因分为认知不一致、每种倒计时方案各有优势;二是存在大量倒计时同时执行。2 对比分析关于几种方案的用法不是本文要讨论的

2021-11-06 16:09:17 594 1

转载 Java多线程学习之wait、notify/notifyAll 详解 | 生产者、消费者问题

文章来源:https://www.cnblogs.com/moongeek/p/7631447.html1、wait()、notify/notifyAll() 方法是Object的本地final方法,无法被重写。2、wait()使当前线程阻塞,前提是 必须先获得锁,一般配合synchronized 关键字使用,即,一般在synchronized 同步代码块里使用 wait()、notify/notifyAll() 方法。3、 由于 wait()、notify/notifyAll() 在synchron

2021-11-06 14:35:01 204

转载 setDaemon详解

一、线程JAVA线程分为即实线程与守护线程,守护线程是优先级低,存活与否不影响JVM的退出的线程,实现守护线程的方法是在线程start()之前setDaemon(true),否则会抛出一个IllegalThreadStateException异常。不能操作文件、数据库等资源,避免主线程关闭而未能关闭守护线程的资源,并且它会在任何时候甚至在一个操作的中间发生中断。二、优点及使用场景在主线程关闭后无需手动关闭守护线程,因为会自动关闭,避免了麻烦,Java垃圾回收线程就是一个典型的守护线程,简单粗暴的可以理

2021-11-06 14:08:53 553

转载 URL scheme是什么?

转载地址:https://blog.csdn.net/lengye7/article/details/105799574一、什么是url scheme?URL scheme是系统提供的一种机制,它可以由应用程序注册,然后其他程序通过url scheme来调用该应用程序。它分为两部分:一部分是系统默认的url scheme,另外一部分是应用程序自己注册的url scheme。例如:mailto:这种就属于系统默认的一种机制。访问一个mailto的url链接,可以直接调用本机的邮件客户端,如:目前它

2021-11-01 20:00:54 1571

转载 git clone项目跑不起来,缺少module 报错Cannot get property ‘android‘ on extra properties extension as it does

git clone https://git.oschina.net/gaofeifps/body.git 之后加上下面一句git submodule init && git submodule update或#下面这一句的效果和上面三条命令的效果是一样的,多加了个参数 --recursivegit clone https://git.oschina.net/gaofeifps/body.git --recursive解决了。问题原因就是项目的module都是单独的git地址,需要

2021-10-22 18:47:48 744

原创 Gerrit 提交之前没有pull代码导致问题怎么办?

1、在项目文件夹下打开Git Bash Here2、git branch 查看本地所有分支3、git log 看你commit的日志4、git checkout -b temp 建立一个新的本地分支temp5、git checkout master 切换到主分支6、git reset --hard 433ba**************9f3 # 将冲突前的版本重置为HEAD(通常用于merge失败回退)7、git pull 拉取代码,本地与服务器端同步8、git ch

2021-04-16 18:49:14 1151

原创 ADB 安装、卸载apk、卸载系统应用、compileDebugJavaWithJavac问题、打印详细的log等

1、安装adb install -r 17student.apkadb install [flag] xxxx.apk flag一共有六个选项:-l 锁定该应用程序-r替换已存在的应用程序,也就是说强制安装, 低版本还是会安装失败-t允许测试包-s把应用程序安装到sd卡上-d允许进行低版本的安装,也就是安装的比手机上带的版本低-g为应用程序授予所有运行时的权限2、卸载已安装的应用adb uninstall com.A17zuoye.mobile.homework备注说明如

2020-10-27 17:53:25 2061

转载 Android 性能优化

https://juejin.im/post/6844904105438134286

2020-09-22 20:16:12 286 1

转载 Android Bitmap图片优化分析

原文地址:https://juejin.im/post/6844904166138069005图片在移动开发中占据中举足轻重的地位,早期的android 应用页面Ui相对简单,但随着Android系统不断的升级发展, 界面元素越来越丰富,用户对体验要求越来越高,UI小姐姐们需要设计出精致的界面元素,其中不乏很多好看的图片,但是随着手机性能提升(分辨率,cpu主频,内存等),图片质量也越来越大,拍个照动不动就3M,4M,8M, 大家都知道,android 应用在创建进程时候,会分配一个指定的内存大小,准确的

2020-09-21 17:35:57 622

转载 Android 通过AIDL在两个APP之间Service通信

原文地址:https://www.cnblogs.com/xqz0618/p/aidl_service.html一、项目介绍【知识准备】①Android Interface definition language(aidl,android接口定义语言),其目的实现跨进程的调用。进程是程序在os中执行的载体,一个程序对应一个进程,不同进程就是指不同程序,aidl实现不同程序之间的调用。②主线程与子线程通信使用handler,handler可以在子线程中发出消息,在主线程处理消息,从而完成线程之间的通信

2020-09-20 21:50:29 1235

转载 LiveDataBus的实现比你想象中的简单

原文链接:https://www.jianshu.com/p/9b00422fbcc1为什么要用LiveData实现事件总线呢?LiveData 是一种可观察的数据存储器类。与常规的可观察类不同,LiveData 具有生命周期感知能力,意指它遵循其他应用组件(如 Activity、Fragment 或 Service)的生命周期。这种感知能力可确保 LiveData 仅更新处于活跃生命周期状态的应用组件观察者。LiveData 具有生命周期感知能力,确保界面符合数据状态,不会发生内存泄露,不会因 Ac

2020-09-20 19:51:06 482

转载 Android布局优化-merge, viewStub, include总结

原文链接:https://www.jianshu.com/p/a4eee43aa60ehttps://www.jianshu.com/p/48a2fbf75954一、 ViewStub标签的使用姿势步骤一:定义需要懒加载的布局 test.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:l

2020-09-20 19:12:49 226

转载 SAF(Storage Access Framework)使用攻略

原文链接:https://weilu.blog.csdn.net/article/details/104199446https://open.oppomobile.com/wiki/doc#id=10432https://developer.android.google.cn/guide/topics/providers/document-provider1.介绍Android 4.4 就引入了存储访问框架 (SAF)。借助 SAF,用户可轻松在其所有首选文档存储提供程序中浏览并打开文档、图像及其

2020-09-20 17:25:17 3205

转载 Android中RelativeLayout和LinearLayout性能分析和优化

原文地址:https://www.jianshu.com/p/8a7d059da746https://blog.csdn.net/yang1349day/article/details/80359064https://developer.android.google.cn/training/improving-layouts/Google开发者文档的时候看到这句话:Optimizing Layout HierarchiesIt is a common misconception that usi

2020-09-20 15:10:16 277

转载 String、StringBuffer与StringBuilder之间区别

原文地址:https://blog.csdn.net/itchuxuezhe_yang/article/details/89966303一、Java String 类——String字符串常量简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,这样不仅效率低下,而且大量浪费有限的内存空间,所以经常改变内

2020-09-20 09:20:29 398

jdk安装包。java基础环境,jdk下载

jdk安装包

2022-05-28

logfilter安装包

logfilter安装包

2022-05-28

腾讯面试题解析.pdf

腾讯面试题解析,android面试题,2020年面试题,网络基础,常用三方库,算法基础等等的。腾讯面试题解析,android面试题,2020年面试题,网络基础,常用三方库,算法基础等等的

2020-08-23

dex-tools-2.1-new.zip

dex2jar 作用:将apk反编译成java源代码(classes.dex转化成jar文件),最新版2.1版本。原来的旧版很多已经不能反编译了,新版的可以。

2020-07-29

apk反编译工具.zip

Android反编译三件套 apktool 、dex2jar、jd-gui,apktool 作用:资源文件获取,能够提取出图片文件和布局文件进行使用查看;dex2jar 作用:将apk反编译成java源代码(classes.dex转化成jar文件);jd-gui 作用:查看APK中classes.dex转化成出的jar文件,即源代码文件

2020-07-29

空空如也

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

TA关注的人

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