工作拾遗
文章平均质量分 86
沙漠一只雕得儿得儿
沙漠一只雕,白月光与朱砂痣
展开
-
Android:为什么子线程不能更新UI
1、前言众所周知在Android中,子线程是不能更新UI的; 那么我在想,为什么不能,会产生什么问题; 是否真的就一定不能在子线程更新UI;2、能否在子线程中更新UI答案是可以的,比如以下代码:@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_m原创 2021-12-07 21:20:19 · 1033 阅读 · 0 评论 -
性能优化专题十一--线程优化
nice与进程调度Linux中,使用nice value(以下成为nice值)来设定一个进程的优先级,系统任务调度器根据nice值合理安排调度。nice的取值范围为-20到19。通常情况下,nice的默认值为0。视具体操作系统而定。nice的值越大,进程的优先级就越低,获得CPU调用的机会越少,nice值越小,进程的优先级则越高,获得CPU调用的机会越多。一个nice值为-20的进程优先级最高,nice值为19的进程优先级最低。父进程fork出来的子进程nice值与父进程相同。父进程ren原创 2020-06-04 22:37:35 · 529 阅读 · 0 评论 -
Android Q 适配指导
一、隐私权:1、分区存储 过滤视图为了让用户更好地控制自己的文件,减少文件混乱情况,Android Q 更改了应用对设备外部存储设备中的文件(例如存储在路径/sdcard下的文件)的访问方式。如果应用以Android Q为目标平台,则在访问外部存储设备中的文件时会进入过滤视图,此时只能查看特定目录(Context.getExternalFilesDir())和特定类型的文件1、 访问自己创建的文件:始终拥有读/写权限,无论文件位于特定目录以内还是以外2、...原创 2021-12-07 08:47:04 · 610 阅读 · 0 评论 -
如何使用IDEA创建的Java web项目中导入jar包
如何使用IDEA创建的Java web项目中导入jar包1. 将要导入的jar包放到WEB-INF/lib文件夹下,右键lib文件夹,选择Add as Library…2. 默认即可(不需要更改),点击【OK】3. 导入完成原创 2021-12-06 09:34:03 · 2985 阅读 · 0 评论 -
如何使用IDEA创建的Java web项目中导入jar包
如何使用IDEA创建的Java web项目中导入jar包1. 将要导入的jar包放到WEB-INF/lib文件夹下,右键lib文件夹,选择Add as Library…2. 默认即可(不需要更改),点击【OK】3. 导入完成原创 2021-12-06 09:33:21 · 1459 阅读 · 0 评论 -
内存泄漏常见case总结
错误示例:延时post runnable,匿名的runnable隐式持有activity的引用,造成内存泄漏。 解决方案:A、在activity的onDestroy方法中调用handler的removeCallbacksAndMessages方法,移除所有的回调和消息,使得runnable在activity回收时处于可回收状态,避免内存泄漏; B、利用static内部类和弱应用WeakReference来避免内存泄漏; 错误示例:内部类AsyncTask持有外部activity的引用,当内部类的生命周期超出原创 2021-12-06 09:31:26 · 736 阅读 · 0 评论 -
Android页面性能优化手册
写在前面的话 一般情况下,只有当我们发现“严重”的性能问题时,我们才会开始着手进行性能优化。此时,虽然可以针对性的解决严重的性能问题,但在继续优化过程中,面对无数细小的“不良”代码,却又力不从心。所以,为了得到的微小的性能改善,庞大的工作量和复杂的历史逻辑却让人望而却步。不得不承认,无数细小的不良代码所累加的性能问题是不可忽视的。面对这样的问题,最佳的解决办法就是总结优化过程中发现的不良代码,从编码之初就保留对性能的“敬畏心”和sense,才能根本构建良好的性能优化良性循环。 ...原创 2021-12-06 09:31:18 · 492 阅读 · 0 评论 -
Android APP存储路径和缓存清理规范
1. Android APP统一存储数据规范基于Android系统对存储卡访问的各种特性,在充分保证基线的产品交互体验前提下,定义Android APP各业务开发中的可选存储路径,对应存储特性,各自适合存储文件范围和存储路径格式规范。存储类型 根路径 特性 存储文件范围 业务路径格式 内置数据分区 /data/../<packagename>/files/ (对应:Context.getFilesDir()) 1.APP被安装时系统分配在d.原创 2021-12-06 09:31:09 · 6072 阅读 · 0 评论 -
Android权限分享
一.权限概述 1.Android 权限的含义及安全架构 2.权限许可 二.权限的分类 1.可选硬件功能的权限 2.服务许可执行 1)activity权限执行 2)service权限执行 3)广播权限执行 4)Content Provider权限执行 5)URI权限执行 6)其他权限检查 三.权限保护水平 1.正常权限 2.签名权限 3.用户ID和文件访问权限 4.危险的权限 5.特殊权限 四.权限分组 1.正常权限原创 2021-12-06 09:30:22 · 946 阅读 · 0 评论 -
Android应用市场付费APK防盗版研究
由于商城需要增加防盗版的功能,于是对其他应用市场进行了调研。看了下应用宝、小米市场、华为市场、百度等市场,发现只有华为市场和小米VR市场有提供付费下载功能,所以主要对这两个App进行了调研。华为市场华为市场开发者文档原理 华为市场的防盗版功能,需要接入SDK,生成的App可以独立运行。 华为市场的校验是需要配合华为市场或者游戏中心的App来进行的,校验时会先调用华为市场的服务,然后请求服务器来判断当前登录的账号是否已经购买了App。 所以说,假...原创 2021-12-06 09:29:49 · 824 阅读 · 0 评论 -
Android单元测试调研
(一)Java JUnit Tests1、JUnitandroidstudio创建工程自带 JUnit 在 Android 官网上出现的频率相当高,是 Android 单元测试的基础框架之一,后面提到的 mock 框架都相当于是在丰富这些基础框架的功能。 要做单元测试的开发者们通常都会在 JUnit 和 TestNG 之间选择一个,个人感觉还是选 JUnit 好一些。(理由在 TestNG 的介绍中) 这种测试运行在本地开发环境的Java虚拟机上,不需要连接Android设备或者模拟器,因原创 2021-12-05 09:27:49 · 308 阅读 · 0 评论 -
Junit
我们写单元测试,一般都会用到一个或多个单元测试框架,在这里,我们介绍一下JUnit4这个测试框架。这是Java界用的最广泛,也是最基础的一个框架,其他的很多框架,包括我们后面会看到的Robolectric,都是基于或兼容JUnit4的。然而首先要解决的问题是。。。为什么要使用单元测试框架或者换句话说,单元测试框架能够为我们做什么呢?从最基本的开始说起,假如我们有这样一个类:public class Calculator { public int add(int one, int a原创 2021-12-05 09:27:30 · 224 阅读 · 0 评论 -
Mockito 测试框架
1. 预备知识如果需要往下学习,你需要先理解 Junit 框架中的单元测试。2. 使用mock对象来进行测试2.1. 单元测试的目标和挑战单元测试的思路是在不涉及依赖关系的情况下测试代码(隔离性),所以测试代码与其他类或者系统的关系应该尽量被消除。一个可行的消除方法是替换掉依赖类(测试替换),也就是说我们可以使用替身来替换掉真正的依赖对象。2.2. 测试类的分类dummy object做为参数传递给方法但是绝对不会被使用。譬如说,这种测试类内部的方法不会被调用,或者是用来填充某个方.原创 2021-12-05 09:27:13 · 509 阅读 · 0 评论 -
native crash
http://geek.csdn.net/news/detail/50839安卓捕获RuntimeException,ANR,Native信号异常 - 简书android 异常捕获-UncaughtExceptionHandler - 简书(UncaughtExceptionHandler)https://github.com/google/breakpad/blob/master/docs/getting_started_with_breakpad.md(Breakpad)背景:.原创 2021-12-05 09:26:41 · 1446 阅读 · 0 评论 -
从 Linux 进程调度到 Android 线程管理
从 Linux 到 Android 线程调度起因最近我们的 APM 上线了应用卡顿的性能检测,我们使用的是和 BlockCanary 同样的方案,通过 Looper Printer 去监控应用的卡顿。在收集到线上数据以后,发现一个比较怪异的现象,大量的卡顿的情况下,当前执行线程(主线程)的执行时间其实并不长,主线程只执行了几毫秒,但是却卡顿1s甚至更长的时间。很明显这个时候是由于主线程没有抢占到CPU导致,为了搞清楚为什么主线程没有抢到CPU,我把 Android 线程调度仔细撸了一遍。Linu原创 2021-12-05 09:25:33 · 1605 阅读 · 0 评论 -
从 Android OOM监控与分析
简单介绍 What's OOM? Why OOM? 常见的OOM 一般的解决办法 监控阶段 端上内存自监控 端上内存主动释放 端上dump时机 内存泄漏加成 处理阶段 解析泄漏路径 大内存解析 压缩上传 展示 Qmas数据展示 后续 遗留问题 后续方案 简单介绍What's OOM?全称“Out Of Memory”,指的是内存超出了限制,抛出的一个异常。Why OOM?内存泄漏,导致可回收的内存回收失败,比如Ac原创 2021-12-05 09:25:21 · 1799 阅读 · 0 评论 -
Android系统获取内存状态
Android系统提供了很多方法来获取当前系统以及指定进程的内存状态。在此进行说明。1.使用相关工具获取1)DDMS。System Information->Memory usage2)APT 插件,监视内存及CPU使用。3)adb dumpsys 命令: adb shell dumpsys meminfo <package_name> 其中,package_name 也可以换成程序的pid,pid可以通过adb she...原创 2021-12-05 09:24:39 · 1301 阅读 · 0 评论 -
Compose
1、概述Jetpack Compose 是用于构建原生界面的最新的 Android 工具包,采用声明式 UI 的设计,拥有更简单的自定义和实时的交互预览功能,由 Android 官方团队全新打造的 UI 框架。官方文档第三方文档2、环境配置2.1、新项目可以通过最新的Android studio直接新建Compose项目2.2、支持Compose项目的具体配置如下2.2.1、Android studio版本,最好使用最新版本,Android Studio Arctic .原创 2021-12-03 13:52:47 · 1247 阅读 · 0 评论 -
布隆过滤器的原理、使用场景和注意事项
引题 哈希函数 Bitmap Bitset BloomFilter实现原理 构建布隆的误差率 布隆过滤器实现 JVM实现 guava实现 原理 redis中的布隆过滤器 参考引题有50亿个电话号码,现在给你10万个电话号码,如何快速准确的判断出这些号码是否存在?方案A: DB ? ----> 50亿的电话号码,这查询效率 ?方案B: 内存 ? —> 就按1个电话号码8个字节 , 50亿*8字节= 40G 内存…我们业务中原创 2021-12-03 13:52:08 · 556 阅读 · 0 评论 -
Java NIO分享
回顾 前言 三驾马车 Buffer DirectBuffer Channel ServerSockerChannel SocketChannel Selector 创建Selector—创建比赛 注册channel—购买入场卷 Selector执行选择—拿着入场卷入场 io和nio 总体分析 参考回顾Linux操作系统为了方便开发者进行网络编程,封装了一系列称为套接字 ( sockets ) 统调用 ( system cal原创 2021-12-03 13:51:33 · 144 阅读 · 0 评论 -
linux IO模型分享
用户态和内核态一个完整的 Linux 操作系统体系架构通常由下列几个核心层级组成:Applications:在操作系统上安装并运行的用户态应用程序 Shell:支持编程的命令行解析器 Libs:操作系统标准库函数 System Calls:暴露给用户态的内核态系统调用接口 Kernel:操作系统的核心,真正对接硬件平台的软件程序所以,为什么要划分核心态和用户态?简单来说:禁止用户程序和底层硬件平台直接交互 禁止用户程序直接访问任意内存地址空间用户态和内核态切..原创 2021-12-03 13:51:11 · 320 阅读 · 0 评论 -
SSH与HTTPS
第一部分 SSH 1.1常用的加密方式 1.2ssh是什么 1.3一个典型的服务器登录过程 1.4中间人攻击 1.5中间人攻击解决方案 1.5.1针对密码登录解决方案一 1.5.2方案二:公钥免密登录 第二部分 2.1HTTP、HTTPS与SSL/TLS 2.2HTTPS原理 第一部分 SSH1.1常用的加密方式需要注意的是非对称加密:如果用公钥对数据加密,那么只有用对应的私钥才能解密。同样的用私钥对数据加密,也只有对应的私钥才能.原创 2021-12-03 13:50:53 · 2274 阅读 · 0 评论 -
netty 重要原理分享
回顾linux网络IO 遗留问题 Netty特点 异步非阻塞通信 零拷贝 内存池 总结 内存分配流程 内存释放 个人看法 高效的 Reactor 线程模型 无锁化的串行设计理念 高效的并发编程 高性能的序列化框架 灵活的 TCP 参数配置能力 回顾linux网络IO遗留问题epoll 支持两种事件触发模式,分别是边缘触发(edge-triggered,ET)和水平触发(level-triggered,LT).原创 2021-12-03 13:50:01 · 640 阅读 · 0 评论 -
java并发AQS原理
1.前言 2.ReentrantLock介绍 3.AQS 3.1主要原理 3.2数据结构 3.3不同模式加锁过程 3.4 自定义同步器中需要实现的重要方法 4 ReentrantLock中的AQS分析 4.1加锁过程 4.1.1第一步:尝试获取锁(利用cas更改state值) 4.1.2第二步:线程加入队列 4.1.3第三步:队列中的节点自旋并阻塞 4.2解锁过程 4.2.1 第一步:资源释放 4.2.2 第二步,如果资源全部释放则唤醒阻塞的线程原创 2021-12-03 13:50:30 · 203 阅读 · 0 评论 -
HTTPS、TLS相关
开盘问题 背景 密码体系 密钥交换(key exchange) RSA key exchange 前向安全(forward secrecy) Diffie-Hellman 密钥交换算法 身份验证 TLS证书链校验 Charles抓包HTTPS原理 SSL Pinning如何阻止抓包 其他开盘问题历史抓包存下来的加密后的HTTPS流量,在服务端TLS证书私钥泄漏之后,内容是否可以被解密?背景密码体系对称加密:加密和解密用到的密钥是相等的,比如A原创 2021-12-03 13:52:33 · 848 阅读 · 0 评论 -
区块链技术
1.区块链是什么区块链:分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。 本质上是一个去中心化的数据库。定义:区块链是一个分布式账本,一种通过去中心化、去信任的方式集体维护一个可靠数据库的技术方案从数据角度来看:区块链是一种几乎不可能被更改的分布式数据库。数据的分布式存储,数据的分布式记录。从技术角度来看:区块链不是一种单一的技术,而是多种技术的整合的结果。这些技术以新的结构组合在一起,形成了一种新的数据记录、存储的表达方式就比如下面的例子:..原创 2021-12-03 13:52:21 · 4601 阅读 · 0 评论 -
Android博客周刊专题之#插件化开发#
本期专栏目讨论插件化开发。插件化涉及的东西很多,所以我们需要多个维度去学习。大概分为5个部分:预备知识、入门、进阶、系列、类库。一步一步深入了解插件的原理。本专栏会不定时更新相关内容,请留意更新的消息。基础1.Java 类加载器类加载器(class loader)是 Java™中的一个很重要的概念。类加载器负责加载 Java 类的字节代码到 Java 虚拟机中。本文首先详细介绍了 Java 类加载器的基本概念,包括代理模式、加载类的具体过程和线程上下文类加载器等,接着介绍如何开发自己的类加载器,最后介原创 2021-12-02 10:09:07 · 200 阅读 · 0 评论 -
Android应用瘦身-从18MB到12.5MB
Android应用瘦身,从18MB到12.5MB2017-02-08Android开发中文站(URL:帐号已迁移)开篇语前阵子老大交给了我一个任务,主要是帮我们开发的直播应用做 Android 端的安装包瘦身,花了大概一周的时间把安装包从 18MB 减小到了 12.5MB。原本完全可以优化到 10MB 之下,但由于其他原因的限制,所以目前阶段只到 12.5MB 为止。在此记录一下优化的思路和用到的工具,方便自己以后 Review ,有需要的童鞋也可供参考。瘦身的目的从目的导.原创 2021-12-02 10:08:54 · 307 阅读 · 0 评论 -
移动端测试基础android常用adb shell命令总结
一、adb命令和adb shell命令的区别 adb 命令是 adb 这个程序自带的一些命令,而 adb shell 则是调用的 Android 系统中的命令,这些 Android 特有的命令都放在了 Android 设备的 system/bin 目录下二、一些常用的adb shel命令简介pmPackage Manager , 可以获取到一些安装在 Android 设备上的应用信息pm 的源码Pm.java, 直接运行 adb shell pm 可以获取到该命令的帮助信息...原创 2021-12-02 10:08:18 · 1684 阅读 · 0 评论 -
kotlin使用注意点
一、协程相关1-1、协程使用官网例子(组合挂起函数):https://www.kotlincn.net/docs/reference/coroutines/composing-suspending-functions.html1、顺序调用: suspend fun doSomethingUsefulOne(): Int { delay(1000L)// 假设我们在这里做了一些有用的事 return13 } suspend f...原创 2021-12-02 10:07:22 · 287 阅读 · 0 评论 -
内存优化整理
一、dumpsys meminfo 查询内存划分 二、Java内存优化 2.1 java内存泄漏优化 三、Native内存优化 3.1 malloc_debug模式 3.1使用 python 分析 四、线程/fd泄漏分析 4.1 fd简述 4.2 常见原因 4.3 查看fd 4.4 查看线程树 4.5 查看线程调用栈 五、附(Python3环境工具)一、dumpsys meminfo 查询内存划分使用dumpsys meminfo[packa...原创 2021-12-02 10:07:08 · 878 阅读 · 0 评论 -
epic hook性能监控
Epic 是一个在虚拟机层面、以 Java Method 为粒度的运行时AOP Hook 框架。简单来说,Epic 就是 ART 上的Dexposed(支持 Android 5.0 ~ 11)。它可以拦截本进程内部几乎任意的 Java 方法调用,可用于实现AOP 编程、运行时插桩、性能分析、安全审计等。Epic:GitHub - tiann/epic: Dynamic java method AOP hook for Android(continution of Dexposed on ART)....原创 2021-12-02 10:06:17 · 1370 阅读 · 0 评论 -
Jetpack 基准测试库--宏基准
概述:与 Jetpack Benchmark 库不同,Macrobenchmark 适用于测试较大的用例,而非小块代码。使用 Macrobenchmark 的示例包括应用启动、运行时性能用例,例如滚动RecyclerView。步骤一:环境搭建1、Android studio需要使用预览版,下载地址:Android Studio Preview | Android Developers2、运行设备要在Android Q(Android10.0)及以上相关库的引...原创 2021-12-02 10:02:49 · 1066 阅读 · 0 评论 -
Jetpack 基准库测试--微基准
概述:使用 Jetpack 基准库可以对基于 Kotlin 或 Java 的代码进行基准化分析,适用于测试小块代码。官网:https://developer.android.com/studio/profile/benchmark#kts在编写基准之前先剖析代码性能,可以先利用trace找到耗时操作。然后使用微基准库测试滚动RecyclerView、执行数据库查询,以及衡量代码中任何运行速度慢而您希望提高其运行速度的部分。对哪些内容进行基准化分析基准化分析最适用于应用中频繁运行.原创 2021-12-02 10:02:16 · 688 阅读 · 0 评论 -
Android Jetpack Compose 相关调研
Android Jetpack Compose 相关调研 —— 声明式UICompose 从一出现,最受到官方推崇以及关注者赞扬的就是它实现了声明式 UI,而我们传统的书写方式叫做「命令式 UI」,那么什么叫做「命令式」?举个例子来说,当我们希望展示一个控件View时,我们需要在代码块中调用View.setVisibility()方法,这样的方式就是一个“命令”,即我们需要以命令的口吻来告诉一个View该怎么做。对于大多数刚刚接触Compose的Android 开发者来说,我们的第一个问题就原创 2021-12-05 09:25:06 · 483 阅读 · 0 评论 -
Android单元测试之Robolectric框架
测试Android代码逻辑,光有JUnit和Mockito是不够的,假设你使用了TextView的setText,用Mockito框架的话,默认的TextView的getText方法会返回null,如果是简单的代码,使用Mockito的桩设置还可以接受,如果是要测试到Activity的生命周期等一些复杂逻辑就显得比较复杂了。为了解决这个问题,诞生了Instrumentation、Robolectric等等的测试框架,不过Instrumentation实际上还是要运行代码到平台上测试,耗费大量的时间,介绍原创 2021-12-06 09:29:24 · 1626 阅读 · 0 评论 -
Fd 泄漏检测
fd 泄漏可以通过统计proc下fd数目观察是否持续增长来判断是否存在泄漏查看方法:1.获取进程idps | grep "包名"2.统计当前进程fd数目ls -l /proc/"进程号"/fd | wc -l原创 2021-12-05 09:27:59 · 1091 阅读 · 0 评论 -
Android(2017-2018)BAT面试题整理(Android篇,含答案)
1.四大组件- ActivityActivity详细总结 - 简书- ServiceCarson带你学Android:一份全面 & 简洁的 Service 知识讲解攻略 - 简书Carson带你学Android:Service使用教程(本地、可通信的、前台、远程) - 简书- Content ProviderCarson带你学Android:关于ContentProvider的知识都在这里了! - 简书- Broadcast ReceiverCarson带你学Android...原创 2021-12-06 09:30:12 · 526 阅读 · 0 评论 -
Android App通用型拒绝服务漏洞介绍
Android 本地拒绝服务漏洞漏洞类型:本地拒绝服务 威胁等级:中 影响版本:Android系统所有版本漏洞描述Android系统提供了Activity、Service和Broadcast Receiver等组件,并提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android系统则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用[1]。Android应用本地拒绝服务漏洞源于原创 2021-12-06 09:34:31 · 3321 阅读 · 0 评论 -
scrcpy ——Android手机PC端投屏调试工具
这个工具可以通过USB连接甚至WI-FI无线连接,在PC机上方便地显示并操控Android手机设备。scrcpy不需要手机获取root权限,并且能在Linux/Win/MacOS等多个主流操作系统上运行。各OS下安装方法及开源代码见:https://github.com/Genymobile/scrcpy主要有以下优点·高性能(帧率可达到30~60fps)·高质量(分辨率支持1920*1080或更高)·低延迟(与手机35~70ms的延迟)·启动速度快(只需一秒钟即可scrc原创 2021-12-01 13:01:50 · 1965 阅读 · 0 评论