自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(130)
  • 资源 (10)
  • 收藏
  • 关注

转载 【无标题】

DeadSystemException

2024-02-05 17:43:00 33

转载 Mac升级Ventura 13.4后无法远程ssh连接服务器

背景电脑升级Ventura后 部分服务器地址链接失败 premission denied 尝试了 ssh-add 等各种操作,后来在简书里看到才解决问题 在此记录。

2023-10-16 14:18:04 317

原创 记· 当前activity设置防截屏后,通过WindowManager.addview的方式添加的view 仍然可以被录制·之addview流程

addView。防截屏失效

2023-04-27 15:55:16 593

原创 Android Gradle4.2之后如何禁用资源混淆

android 关闭r8的资源混淆

2022-11-14 16:35:07 1660

原创 【visual Studio 如何查看预处理后生成的代码C/C++】

visual Studio 输出预处理代码到文件

2022-10-20 23:32:24 1075

原创 Android修改项目名称 & 出现 can‘t rename root module 的警告

修改项目名

2022-06-06 17:34:48 1996

原创 如何关闭华为手机连接电脑自动弹出cd驱动器和类似文件管理文件夹

关闭cd驱动器华为手机助手

2022-04-20 17:10:55 10802 7

原创 JNI(三) - FFmpeg for android

Win10 ubuntu子系统 ffmpeg 编译 动态静态库ffmpeg 静态库在android项目的引用

2022-02-09 13:52:51 2052

原创 JNI(二) - 如何生成so并暴露给第三方使用

提供so给其他项目使用的方式

2022-02-08 09:49:33 594

原创 JNI(一) JNI - NDK-交叉编译

Jni NDK 以及交叉编译的基础知识

2022-02-07 18:19:05 2300

原创 AndroidStudio Arctic fox 配置ndk 路径

在项目的 project.properties 内配置ndk 路径 如下ndk.dir=C:\Users\bangcle\AppData\Local\Android\Sdk\ndk\android-ndk-r14b-windows-x86_64\android-ndk-r14b如图所示

2021-11-17 14:54:06 2040

原创 性能优化(五)工具LeakCanary原理2.0之前

leakCanarysquare 公司 提供的一款开源的内存泄漏检查工具,在程序中检测activity 是否被gc 回收使用debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5'releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'在Application / activity 中初始化protect

2021-09-28 02:58:36 141

原创 性能优化(四)分析工具

分析工具原生工具1. StrictMode主线程优化分析工具StrictMode 最常用于捕获应用程序主线程上耗时,阻塞操作,例如意外磁盘或网络访问,通过该工具我们可以将意外发生的耗时操作放到主线程 结合loading等动画,让ui变得更流畅同时也预防ANR的产生使用方式在APPlication 或者activity中配置如下代码public void onCreate() { if (DEVELOPER_MODE) { StrictMode.set

2021-09-28 02:57:44 444

原创 性能优化(三)引用类型

java引用类型分四种 想必大家都不陌生强软弱虚引用分优先级 依次是 强 软 弱 虚强引用java中默认声明就是强引用例如Object o=new Object()只要该对象强引用存在,垃圾回收器将永远不会回收被引用的对象,JVM即使程序抛出out of memory(内存溢出),GC也不会回收如果想要被Gc回收则需要手动将 强应用对象赋值为null软引用软引用是用来描述一些非必需但仍有用的对象,只有内存不足时才回收在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系

2021-09-28 02:56:43 122

原创 性能优化(二) 内存溢出& 内存泄漏

内存泄漏& 内存溢出内存泄漏&内存溢出的区别内存泄漏 memory leak系统无法释放已经申请的内存内存溢出 out of memory (内存不足)申请内存时系统没有足够的内存供其使用内存泄露是导致内存溢出的原因之一,内存泄漏过多 最终会导致内存溢出内存泄露可以通过完善代码来避免;内存溢出可以通过调整配置来减少发生频率,但无法彻底避免。内存泄漏分类常发性内存泄漏内存泄漏的代码经常被执行到偶发性内存泄漏内存泄漏的代码在某些特定条件下执行

2021-09-28 02:55:46 254

原创 性能优化(一)java内存分配

java内存分配

2021-09-28 02:54:37 94

原创 Glide(五)磁盘缓存

磁盘缓存磁盘缓存通过DiskLruCache实现 与LruCache算法相似,当缓存大小将超过阈值的时候,清除缓存中最老的数据DiskLruCache内部也是通过LinkedhashMap 实现的同样的也是在glide 生成时创建的这里我们也从两个角度分析 取,存取经过前面文章的分析,我们知道当内存缓存和活动缓存都没有的时候我们就要开启线程从磁盘或者网络中获取 下面我们看代码 public <T, Z, R> LoadStatus load(Key signa

2021-09-28 02:49:25 910

原创 Glide(四)内存缓存

内存缓存前引声明上文中我们知道Glide内存缓存通过两部分组成又叫做运行时缓存LruCache -》MemoryCache cache 实现类是LruResourceCache在创建Glide的时候创建,大小为屏幕大小的两张图片采用LruCache实现,遵循最近最少使用原则,当缓存大小达到设定缓存大小时将最近使用的最少的缓存对象清除其内部维护了一个LinkedHashMap 将 缓存对象的强引用缓存该缓存只存储当前没在使用的资源弱引用缓存(活动缓存)-》Map<Key,

2021-09-28 02:48:04 402

原创 Gilde(三)图片请求执行过程--into()

Glide 的请求执行过程要了解请求执行过程首先我们需要知道如下问题何时构建的请求何时执行的请求如何构建的请求执行请求1.请求执行时机&2.请求构建时机在源码流程分析里我们提到调用into()开始执行图片请求 public <Y extends Target<TranscodeType>> Y into(Y target) { //省略部分代码 //1. 获取之前的请求 Request previous

2021-09-28 02:47:27 120

原创 Glide(二)生命周期监听

https://blog.csdn.net/Applicaton/article/details/119672525?spm=1001.2014.3001.5501Glide生命周期监听

2021-09-28 02:46:18 153

原创 Glide(一)源码流程分析

Glide源码分析Glide 基本使用方式Glide .with(this) .load("https://img1.baidu.com/it/u=4030671121,170372214&fm=26&fmt=auto&gp=0.jpg") .into(binding.ivTest) 这就是最简单的使用方法了调用with ,load ,into 方法完成一个图片加载的过程下面我们分析下这三个方法分别做了什么基本

2021-09-28 02:42:31 98

原创 java1.6、1.7、1.8 的内存分配

java中的内存分配前言 昨天去面试 被问到,我说1.7之后静态变量在堆内存中,面试官很明显的提出了质疑 静态变量在堆中,这个疑问和诧异的表情,下意识的让我感觉我说错了,我随即改口到在方法区,前面我叙述了在1.7之后 方法区被取代改成了元空间,面试当时也忘的差不多了,回来做记录,下面先看1.6 1.7 1.8 内存运行时分配图(感谢划船一哥的图)在此建议各位面试官,要了解清楚再来面试别人 不要误导在1.7中 为了逐步去除永久代将静态变量 和 字符串常量池 放到了堆内存中在1.8中去掉了

2021-09-25 12:48:26 460

原创 Activity栈管理相关类

Activity栈管理 有助于理解Activity启动流程Activity在AMS 中存在的形式为ActivityRecord;AMS以Task的方式管理Activity,Task在AMS存在的形式为TaskRecordTaskRecord在AMS中依靠ActivityStack去管理ActivityStack同样有管理者,ActivityStackSupervisor负责管理ActivityStack;主要涉及四个类ActivityRecord存在历史栈的一个实例,代表一个Acti

2021-09-03 16:10:59 271

原创 Android启动(六)Launcer的启动

Launcher 启动Launcher是桌面应用程序 基于8.0都是调用栈,只说调用栈的话,跟没说一样这里先总结一下流程流程总结在SystemServer启动文章中我们最后提到,SyetemServer进程在启动的过程中会启动PackageManagerService,PackageManagerService启动后会将系统中的应用程序安装完成。在此前已经启动的ActivityManagerService会将Launcher启动起来。入口就在Ams的systemReady()里Launc

2021-09-03 16:07:34 339

原创 Android启动(八)Activity启动

Activity的启动流程Activity的启动流程分两种一是从桌面点击图标,启动MainActivity流程就是Android启动(七)应用进程的启动过程二是从程序内调用StartActivity 启动Activity二者区别就在于第一种要启动进程在启动MainActivity第二种是直接启动Activity这里说下第二种 区别于第一种 就是省略了一个启动应用进程的步骤## 步骤总结调用StartActivity获取AMS的Binder代理对象,该对象利用

2021-09-03 16:05:13 1313

原创 Android启动(七)应用进程的启动过程

Android启动(七)应用进程的启动过程该流程内部包含activity的启动过程场景描述当点击桌面的图标到展示打开应用的MainActivity也可以称作是MainActivity的启动过程,因为这里说的是应用的启动过程,所以下文中的Activity 可以理解为MainActivity(应用的第一个页面)步骤分析这里我们先规划下总体步骤方便后面看起来好理解点击Launcher图标,执行Launcher内的OnClick,获取AMS的Binder代理对象,该对象利用Binder驱动通知A

2021-09-03 16:01:57 1318

原创 Android 启动(五)SystemServer启动

SystemServer进程在zygote启动过程中我们知道最终执行到了ZyogoteInit#mainframeworks/base/core/java/com/android/internal/os/ZygoteInit.java在这个方法中注册名为 zygote 的 LocalServerSocket 用来接收AMS请求启动SystemServer进程SystemServer源码位置 frameworks/base/services/java/com/android/server

2021-09-03 15:56:36 468

原创 Android启动(四)Zygote进程启动

zygote 启动通过 init进程 这篇 我们知道 在解析init.rc时主要做了ServiceManager,zygote的启动在 init.rc中有一句 import /init.${ro.zygote}.rc 在7.0之后 zygote 分为多个文件init.zygote32.rcinit.zygote32_64.rcinit.zygote64.rcinit.zygote64_32.rc执行时会根据条件执行其中一个我们看zygote32service zygote /syst

2021-09-03 15:55:02 413

原创 Android启动(三)ServiceManager启动

ServiceManager启动通过 init进程 这篇 我们知道 在解析init.rc时主要做了ServiceManager,zygote的启动下面我们来看ServiceManager,源码路径frameworks/native/cmds/servicemanager/service_manager.c我们主要观察Main函数int main(int argc, char** argv){ struct binder_state *bs; if (argc > 1) {

2021-09-03 15:53:54 356

原创 Android启动(二)init进程

Init进程解析在系统启动过程中我们知道在拉起内核后,启动init进程源码在system/core/init/init.cpp中int main(int argc, char** argv) { //添加环境 add_environment("PATH", _PATH_DEFPATH); bool is_first_stage = (getenv("INIT_SECOND_STAGE") == nullptr); //进行基本文件系统设置 mount("tmpfs",

2021-09-03 15:51:05 347

原创 Android启动(一)系统启动

整体流程按下电源键加载BootLoader程序到Ram拉起Linux内核寻找init.cpp文件(system/core/init/init.cpp)启动init进程进行基本文件系统设置property_init()初始化基础属性服务start_property_service()启动基础属性服务属性服务用来查询或者设置相应的属性解析init.rc文件**启动ServiceManager **主要就是打开Binder驱动, 开启循环等待接收client的消息

2021-09-03 15:49:27 127

原创 Glide生命周期时间监听流程逻辑

Glide 如何实现的生命周期监听问题??使用过Glide的,都知道Glide加载图片生命周期跟随activity 或者 Fragemnt,那么glide是如何实现对activity、fragment 生命周期的监听的呢?那他们绑定的具体的逻辑是什么呢 ?解释对于第一个问题通过上一篇文章 我们知道其内部是通过 给宿主添加一个RequestManagerFragment(无界面Fragment)并通过 ActivityFragmentLifecycle 添加监听事件 完成的 生命周期绑

2021-08-13 11:53:09 232

原创 酷安开发者签名认证

如图所示将你要上传的apk 和 从酷安下载的签名apk 和你的jks文件放到一起 这里为了方便我放到了一个文件夹cmd命令–进入命令编辑页面输入如下命令jarsigner -verbose -keystore 你的jks文件名.jks -signedjar apk文件名.apk 酷安下载的签名apk名.apk 你的jks文件的keyAlias示例jarsigner -verbose -keystore myjks.jks -signedjar QrCodeBarScanner_1.01_2_..

2021-08-13 10:53:23 1404 3

原创 Retrofit 流程解析

Retrofitretrofit是什么一个 RestFul 的 http 网络请求框架 (是对Okhttp的封装)网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网络请求接口的封装retrofit 为什么存在为了优化okhttp 请求框架的使用在okhttp 相关部分讲过 okhttp 的使用其存在如下几个问题每一个请求须手动创建request,并获取call ,没有自动线程切换得到的response 需手动解析而在retrofit

2021-08-10 19:27:14 166

原创 OkHttp 缓存管理

OkHttp 缓存管理okhttp内置缓存策略,在CacheInterceptor中执行缓存策略,那么我们如何设置使用Okhttp的缓存okhttp 缓存又是如何管理的呢如何设置使用Okhttp的缓存在构建OkHttpClient的时候即可设置okhttp的缓存OkHttpClient.Builder() .connectTimeout(5, TimeUnit.SECONDS) //缓存目录 ,缓存空间大小 .cache(new Cache(new File(

2021-08-05 19:12:40 634

原创 Okhttp 缓存策略的获取

Okhttp 缓存策略的获取在缓存拦截器那我们提到过 第二步就是要获取一个缓存策略对象 CacheStrategyCacheStrategy 是什么,有什么用直接上代码/** * 给定一个请求和缓存响应,这将确定是使用网络、缓存还是两者都使用。 */public final class CacheStrategy { /** 在网络发送请求如果该Call不使用网络请求 该值为null 代表使用网络请求*/ public final @Nullable Request net

2021-08-05 19:11:07 184

原创 OK HTTP(二)Okhttp的缓存拦截器CacheInterceptor

Okhttp的缓存拦截器CacheInterceptorokhttp 提供了 CacheInterceptor 来处理缓存关于如何使用缓存请参考·····下面我们分析下该拦截器的工作流程流程分析主要流程都在intercept 方法里 下面看代码public final class CacheInterceptor implements Interceptor { final @Nullable // 注意观察 这里InternalCache InternalCac

2021-08-05 19:09:36 273

原创 OKhttp Dispatcher如何调度网络请求的

Okhttp 基本使用流程1、创建okhttpClientOkHttpClient ok=new OkHttpClient.Builder().build(); 2 、创建Request请求Request request=new Request.Builder().build();3、创建创建Call对象 Call 是个接口 实际是通过其实现类RealCall 得到的callCall call=ok.newCall(request);这里的newC

2021-08-03 02:29:16 288

原创 Android 事件传递机制 与 消费事件

本文分析从Activity是如何向下分发的,暂不分析事件从InputManagerService如何传递到Activity下列均属于个人理解 若有不正确欢迎指正事件分发中的事件指的是什么点击事件(Touch事件)即用户点击屏幕所产生的事件该事件会被封装成MotionEvent对象事件有哪几种类型事件类型具体触发动作对应值MotionEvent.ACTION_DOWN用户按下发生动作0MotionEvent.ACTION_UP用户抬起时1Motio.

2021-03-19 18:18:08 283

原创 TextView 文字滚动 横向

TextView 文字滚动效果如下Java 代码 XML 均可设置javaTextView tv = (TextView) findViewById(R.id.tv); tv.setEllipsize(TextUtils.TruncateAt.MARQUEE);//设置跑马灯显示效果 tv.setSingleLine(true);//设置单行显示 tv.setHorizontallyScrolling(true);//设置水平滚动效果 tv.setMarqueeR

2021-02-01 11:25:48 282

水波纹Ripple

水波纹适配解决方案

2018-01-16

mvp设计思想的一个简单demo

我不想要积分 但是不知道怎么选择 最少就是2 没有0 对应的还有一片博客作为介绍的 http://blog.csdn.net/Applicaton/article/details/78439605

2017-11-03

forcStop 多语言 小米 ---string name ="miui_stop_process"

一个多语言的包里面包含了很多多语言 但是但是我们要用到的只有一个 就是miui_stop_process 这个包要配合之前的 Accessibility来共同使用 稍后会有博客介绍 AccessibilityService 批量清理后台进程

2017-09-22

AccessibilityService批量清理后台进程

AccessibilityService批量清理后台进程

2017-08-15

MdNavigationView

包含优化卡顿 图标设置大小 显示分割线 以及 选中条

2017-06-26

侧滑NavigationView

NavigationView使用 以及 设置图标大小 选中item颜色 详情请看本人博客

2017-06-26

recclerview等间距瀑布流

recyclerview 瀑布流 以及设置均等间距 还有动态设置imagview的宽高

2016-06-18

CollapsingToolbarLayout+toolbar

另有博客描述http://blog.csdn.net/Applicaton/article/details/51145056

2016-04-13

materialdesign Floatingactionbutton 上下联动

另有专门博客进行介绍Floatingactionbutton上下联动http://blog.csdn.net/Applicaton/article/details/51144604

2016-04-13

lsitview未满一屏添加footerview满一屏固定下方布局

对于Listview未满一屏添加footerView 满了一屏幕将View固定在屏幕下方的解决方案

2016-03-14

空空如也

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

TA关注的人

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