- 博客(132)
- 资源 (10)
- 收藏
- 关注
原创 aab 安装后导出base.apk 和split-abi.apk之后如何通过adb命令安装
【代码】aab 安装后导出base.apk 和split-abi.apk之后如何通过adb命令安装。
2024-12-04 17:18:37
297
原创 Android 代码中启动java程序 app_process
通过app_process 即可Runtime.getRuntime().exec 用执行命令行的方式 通过 app_process来启动新的进程。
2024-05-29 17:47:45
267
转载 Mac升级Ventura 13.4后无法远程ssh连接服务器
背景电脑升级Ventura后 部分服务器地址链接失败 premission denied 尝试了 ssh-add 等各种操作,后来在简书里看到才解决问题 在此记录。
2023-10-16 14:18:04
553
原创 记· 当前activity设置防截屏后,通过WindowManager.addview的方式添加的view 仍然可以被录制·之addview流程
addView。防截屏失效
2023-04-27 15:55:16
719
原创 JNI(三) - FFmpeg for android
Win10 ubuntu子系统 ffmpeg 编译 动态静态库ffmpeg 静态库在android项目的引用
2022-02-09 13:52:51
2141
原创 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
2116
原创 性能优化(五)工具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
194
原创 性能优化(四)分析工具
分析工具原生工具1. StrictMode主线程优化分析工具StrictMode 最常用于捕获应用程序主线程上耗时,阻塞操作,例如意外磁盘或网络访问,通过该工具我们可以将意外发生的耗时操作放到主线程 结合loading等动画,让ui变得更流畅同时也预防ANR的产生使用方式在APPlication 或者activity中配置如下代码public void onCreate() { if (DEVELOPER_MODE) { StrictMode.set
2021-09-28 02:57:44
785
原创 性能优化(三)引用类型
java引用类型分四种 想必大家都不陌生强软弱虚引用分优先级 依次是 强 软 弱 虚强引用java中默认声明就是强引用例如Object o=new Object()只要该对象强引用存在,垃圾回收器将永远不会回收被引用的对象,JVM即使程序抛出out of memory(内存溢出),GC也不会回收如果想要被Gc回收则需要手动将 强应用对象赋值为null软引用软引用是用来描述一些非必需但仍有用的对象,只有内存不足时才回收在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系
2021-09-28 02:56:43
195
原创 性能优化(二) 内存溢出& 内存泄漏
内存泄漏& 内存溢出内存泄漏&内存溢出的区别内存泄漏 memory leak系统无法释放已经申请的内存内存溢出 out of memory (内存不足)申请内存时系统没有足够的内存供其使用内存泄露是导致内存溢出的原因之一,内存泄漏过多 最终会导致内存溢出内存泄露可以通过完善代码来避免;内存溢出可以通过调整配置来减少发生频率,但无法彻底避免。内存泄漏分类常发性内存泄漏内存泄漏的代码经常被执行到偶发性内存泄漏内存泄漏的代码在某些特定条件下执行
2021-09-28 02:55:46
359
原创 Glide(五)磁盘缓存
磁盘缓存磁盘缓存通过DiskLruCache实现 与LruCache算法相似,当缓存大小将超过阈值的时候,清除缓存中最老的数据DiskLruCache内部也是通过LinkedhashMap 实现的同样的也是在glide 生成时创建的这里我们也从两个角度分析 取,存取经过前面文章的分析,我们知道当内存缓存和活动缓存都没有的时候我们就要开启线程从磁盘或者网络中获取 下面我们看代码 public <T, Z, R> LoadStatus load(Key signa
2021-09-28 02:49:25
1196
原创 Glide(四)内存缓存
内存缓存前引声明上文中我们知道Glide内存缓存通过两部分组成又叫做运行时缓存LruCache -》MemoryCache cache 实现类是LruResourceCache在创建Glide的时候创建,大小为屏幕大小的两张图片采用LruCache实现,遵循最近最少使用原则,当缓存大小达到设定缓存大小时将最近使用的最少的缓存对象清除其内部维护了一个LinkedHashMap 将 缓存对象的强引用缓存该缓存只存储当前没在使用的资源弱引用缓存(活动缓存)-》Map<Key,
2021-09-28 02:48:04
562
原创 Gilde(三)图片请求执行过程--into()
Glide 的请求执行过程要了解请求执行过程首先我们需要知道如下问题何时构建的请求何时执行的请求如何构建的请求执行请求1.请求执行时机&2.请求构建时机在源码流程分析里我们提到调用into()开始执行图片请求 public <Y extends Target<TranscodeType>> Y into(Y target) { //省略部分代码 //1. 获取之前的请求 Request previous
2021-09-28 02:47:27
277
原创 Glide(二)生命周期监听
https://blog.youkuaiyun.com/Applicaton/article/details/119672525?spm=1001.2014.3001.5501Glide生命周期监听
2021-09-28 02:46:18
199
原创 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
246
原创 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
607
原创 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
330
原创 Android启动(六)Launcer的启动
Launcher 启动Launcher是桌面应用程序 基于8.0都是调用栈,只说调用栈的话,跟没说一样这里先总结一下流程流程总结在SystemServer启动文章中我们最后提到,SyetemServer进程在启动的过程中会启动PackageManagerService,PackageManagerService启动后会将系统中的应用程序安装完成。在此前已经启动的ActivityManagerService会将Launcher启动起来。入口就在Ams的systemReady()里Launc
2021-09-03 16:07:34
426
原创 Android启动(八)Activity启动
Activity的启动流程Activity的启动流程分两种一是从桌面点击图标,启动MainActivity流程就是Android启动(七)应用进程的启动过程二是从程序内调用StartActivity 启动Activity二者区别就在于第一种要启动进程在启动MainActivity第二种是直接启动Activity这里说下第二种 区别于第一种 就是省略了一个启动应用进程的步骤## 步骤总结调用StartActivity获取AMS的Binder代理对象,该对象利用
2021-09-03 16:05:13
2021
原创 Android启动(七)应用进程的启动过程
Android启动(七)应用进程的启动过程该流程内部包含activity的启动过程场景描述当点击桌面的图标到展示打开应用的MainActivity也可以称作是MainActivity的启动过程,因为这里说的是应用的启动过程,所以下文中的Activity 可以理解为MainActivity(应用的第一个页面)步骤分析这里我们先规划下总体步骤方便后面看起来好理解点击Launcher图标,执行Launcher内的OnClick,获取AMS的Binder代理对象,该对象利用Binder驱动通知A
2021-09-03 16:01:57
1550
原创 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
684
原创 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
488
原创 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
421
原创 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
410
原创 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
183
原创 Glide生命周期时间监听流程逻辑
Glide 如何实现的生命周期监听问题??使用过Glide的,都知道Glide加载图片生命周期跟随activity 或者 Fragemnt,那么glide是如何实现对activity、fragment 生命周期的监听的呢?那他们绑定的具体的逻辑是什么呢 ?解释对于第一个问题通过上一篇文章 我们知道其内部是通过 给宿主添加一个RequestManagerFragment(无界面Fragment)并通过 ActivityFragmentLifecycle 添加监听事件 完成的 生命周期绑
2021-08-13 11:53:09
306
原创 酷安开发者签名认证
如图所示将你要上传的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
1653
3
原创 Retrofit 流程解析
Retrofitretrofit是什么一个 RestFul 的 http 网络请求框架 (是对Okhttp的封装)网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网络请求接口的封装retrofit 为什么存在为了优化okhttp 请求框架的使用在okhttp 相关部分讲过 okhttp 的使用其存在如下几个问题每一个请求须手动创建request,并获取call ,没有自动线程切换得到的response 需手动解析而在retrofit
2021-08-10 19:27:14
233
原创 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
867
原创 Okhttp 缓存策略的获取
Okhttp 缓存策略的获取在缓存拦截器那我们提到过 第二步就是要获取一个缓存策略对象 CacheStrategyCacheStrategy 是什么,有什么用直接上代码/** * 给定一个请求和缓存响应,这将确定是使用网络、缓存还是两者都使用。 */public final class CacheStrategy { /** 在网络发送请求如果该Call不使用网络请求 该值为null 代表使用网络请求*/ public final @Nullable Request net
2021-08-05 19:11:07
256
原创 OK HTTP(二)Okhttp的缓存拦截器CacheInterceptor
Okhttp的缓存拦截器CacheInterceptorokhttp 提供了 CacheInterceptor 来处理缓存关于如何使用缓存请参考·····下面我们分析下该拦截器的工作流程流程分析主要流程都在intercept 方法里 下面看代码public final class CacheInterceptor implements Interceptor { final @Nullable // 注意观察 这里InternalCache InternalCac
2021-08-05 19:09:36
350
原创 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
400
mvp设计思想的一个简单demo
2017-11-03
forcStop 多语言 小米 ---string name ="miui_stop_process"
2017-09-22
CollapsingToolbarLayout+toolbar
2016-04-13
materialdesign Floatingactionbutton 上下联动
2016-04-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人