Android
文章平均质量分 81
未子涵
简书主页:https://www.jianshu.com/u/cdce76b2fd5b
展开
-
StrictMode:Explicit termination method ‘end‘ not called
在 Android 严格模式(StrictMode)下,明明已经做了完善的 IO关闭,却还是收到了 IO泄漏的告警。原创 2023-07-12 14:52:27 · 389 阅读 · 0 评论 -
APK构建过程-命令行编译
脱离Android Studio,如何构建一个可执行的APK文件原创 2022-11-27 17:37:49 · 1976 阅读 · 1 评论 -
Android未捕获异常监控原理
你懂得如何进行“Android未捕获异常的监控”,但你了解过监控的原理吗?为什么你做的监控,异常信息会有丢失的现象?原创 2022-11-18 13:39:36 · 1453 阅读 · 0 评论 -
通过命令行进行R8混淆
如何通过命令行进行R8混淆原创 2022-11-18 13:27:15 · 1132 阅读 · 0 评论 -
kapt不兼容JDK 16:KaptContext cannot access class com.sun.tools.javac.util.Contex
kapt 报错:java.lang.IllegalAccessError: class org.jetbrains.kotlin.kapt3.base.KaptContext (in unnamed module @0x1f74be16) cannot access class com.sun.tools.javac.util.Context (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.原创 2022-09-15 11:48:46 · 5404 阅读 · 5 评论 -
SuperNotCalledException Activity xxx did not call through to super.onCreate
SuperNotCalledException Activity xxx did not call through to super.onCreate 异常分析原创 2022-08-16 12:30:10 · 1716 阅读 · 0 评论 -
跨线程通信-Handler
Thread Pool 和 Message Pool ,都是运用享元模式,创建了一个共享内存池。享元模式的使用非常广,比如地图开发,对于接收到的位置信息,不能每次都 new 一个 Java Bean 出来,而是应该创建一个 Java Bean 的内存池出来,合理复用。再比如股票类应用、 ViewPager、RecyclerView 等等。...原创 2022-07-26 00:07:04 · 863 阅读 · 0 评论 -
Crash:reportSizeConfigurations ActivityRecord not found for Token xxx
问题线上有统计到以下错误:java.lang.reflect.UndeclaredThrowableExceptionat $Proxy5.reportSizeConfigurations(Unknown Source)at android.app.ActivityThread.reportSizeConfigurations(ActivityThread.java:3670)at android.app.ActivityThread.handleLaunchActivity(ActivityTh原创 2022-01-26 16:04:56 · 4744 阅读 · 0 评论 -
信息安全的护城河:数字证书与数字签名技术
前言我们都知道信息在网络中的安全传输,其核心是依托于各种加解密机制,发送方的明文通过加密算法转为密文,再通过网络传输给接收方,接收方再通过解密算法将密文还原为明文。目前应用最广的加解密机制是 对称加密 和 非对称加密。加密能保证数据以密文的形式在网络中传输,但密钥本质上也是一段明文数据,如果密钥的发放是线下进行的(即数据交换的双方是面对面通过U盘等物理介质交换密钥),那这个过程中的安全性是没有问题的。但绝大多数情况下,密钥必须通过网络发放,因此密钥的发放本身又是另一个信息安全传输的问题,如果这个问题得不原创 2021-08-16 10:56:22 · 763 阅读 · 0 评论 -
让你彻底明白:HTTPS安全通信机制
一点点历史回顾ARPAnet Reference Model1969年11月,美国国防部 高级研究计划管理局( ARPA 全称: Advanced Research Projects Agency)开始建立一个命名为ARPAnet的网络,这是就是互联网的前身,一个军事用途的网络。TCP/IP Reference Model随着ARPAnet网络的逐渐发展,更多的主机接入,原来的架构和协议已经不够用了,研究人员把重点投向了第二代网络协议的研究,于是TCP/IP协议簇出现了。而TCP/IP簇使用的网络参原创 2021-08-10 23:55:04 · 3590 阅读 · 14 评论 -
面向对象设计的“7大原则”
本文转载自 《面向对象设计原》。为提高阅读效率,在原文基础上做了删减与部分示例代码的修改。开闭原则定义勃兰特·梅耶在其1988年的著作《面向对象软件构造》中提出了开闭原则(Open Closed Principle,OCP)经典定义:软件实体应当对扩展开放,对修改关闭。通俗来讲,就是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。实现方法主要是通过“抽象约束、封装变化”来实现开闭原则。【例】windows的桌面主题设计主题有共同.转载 2021-06-20 15:57:33 · 269 阅读 · 0 评论 -
通过ActivityThread获取Context
背景为了保存一个全局可用的ApplicationContext对象,通过反射ActivityThread.currentActivityThread()来实现。近期在分析线上错误日志时,偶有发现这里会小概率死锁,分析堆栈后发现问题出在“切换至主线程反射调用currentActivityThread()”时加的同步锁这里,虽然最直接的方向是如何避免死锁场景的出现,也就是不要用容易产生死锁的调用方式,但可惜在我们的应用场景下这种调用方式是无法避免的,所以只能从别的方向入手,那为什么这里一定要切换至主线程调用,原创 2021-05-26 22:01:59 · 1718 阅读 · 2 评论 -
Android Gradle Plug 4.1.0 升级后gradle获取manifest位置失败问题解决
问题背景项目编译过程中,使用了类似Android Gradle Plugin的gradle插件进行编译,在最终打包apk时,会动态修改manifest文件。近期发现线上用户有反应升级到以下开发环境后,打包apk后manifest文件中没有应有的任何配置。Android Gradle Plugin:4.1.0Gradle:6.5Android Studio:4.1确认调查方向首先要确认清楚到底是上述3个哪个的升级导致的问题。在本地进行环境升级过程验证了以下结论:Android Gradle原创 2020-10-17 16:34:14 · 4436 阅读 · 8 评论 -
Java并发编程(三) - 实战:线程同步的实现
synchronized关键字首先,来看一个多线程竞争临界资源导致的同步不安全问题。package com.example.weishj.mytester.concurrency.sync;/** * 同步安全测试 * * 在无任何同步措施时,并发会导致错误的结果 */public class SyncTest1 implements Runnable { // 共享资源(临界资源) private static int race = 0; private static final原创 2020-10-13 21:52:23 · 230 阅读 · 1 评论 -
Java并发编程(二) - 线程基础
线程的实现主流的操作系统都提供了线程实现,Java语言则提供了在不同硬件和操作系统平台下对线程操作的统一处理。我们注意到Thread类与大部分的Java API有着显著差别,它的所有关键方法都是声明为Native的。这就说明,有关线程的操作,底层都是与平台相关的。实现线程主要有3种方式:使用内核线程实现、使用用户线程实现和使用用户线程加轻量级进程混合实现。1.使用内核线程实现内核线程(Kernel-Level Thread,KLT)就是直接由操作系统内核支持的线程,这种线程由内核来完成线程切换,内核原创 2020-10-13 21:49:43 · 177 阅读 · 0 评论 -
Android 应用间跳转
关于跳转应用的方式https://www.jianshu.com/p/862885bd8ea2URL Scheme(android / iOS)Android中又叫DeepLinksapplinks(android)/ Universal links(iOS)intent(android only,package related)其实,1、2都可以认为是广义上的scheme方式,只是applinks将scheme限定为"http/https"。原生App Links功能官方介绍原创 2020-06-19 11:36:18 · 1543 阅读 · 0 评论 -
Android 获取应用列表
前言目前正是Android 11 马上要发布的时期,当前在Android手机上获取应用安装列表,要从三个维度上区分:获取方法、系统版本、是否系统应用。获取方法:至少有两种方法,它们的行为结果会有所差异系统版本:从 Android 11 开始,应用列表的获取将受到限制是否系统应用:系统应用与非系统应用的获取结果,也不尽相同获取方法介绍获取所有应用列表(系统应用+非系统应用),常用的方法有2种:Shell命令行、系统API。而要进一步区分是否系统应用,只要对上述结果进行一次过滤即可。下面分别介原创 2020-06-18 20:55:56 · 10380 阅读 · 0 评论 -
Android WiFi扫描
Wifi扫描Wifi scanning overview权限方面必须权限如下:ACCESS_WIFI_STATE(用于扫描结束后读取wifi信息)CHANGE_WIFI_STATE(用于扫描WiFi列表)除必须权限外,根据系统版本,还有不同的限制。具体如下Android 8.0 & 8.1WifiManager.getScanResults() 方法的调用必须具备以下任一权限:ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATIONCHANGE原创 2020-06-18 20:36:15 · 2647 阅读 · 0 评论 -
Android与Flutter桥接指南
Flutter官方文档这篇指南是针对Android开发者的,目的是让一个没有接触过Flutter的Android程序员快速开发出Flutter插件, 所以笔者默认各位读者已经有了JDK、SDK、Android Studio等开发环境和IDE。Flutter环境搭建1.下载Flutter SDKFlutter SDK Archive2.解压下载到的压缩包解压路径如D:\env\flutter,不要解压到Program Files目录下,因为操作该目录需要更高的权限。3.安装Flutter进原创 2020-06-16 10:46:15 · 429 阅读 · 0 评论 -
Java并发编程(一) - 初识并发
本文主要内容出自周志明老师《深入理解Java虚拟机》一书,是笔者结合自己的理解,做了一些补充,重新组织排版后,总结的读书笔记。计算机性能摩尔定律当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18-24个月翻一倍以上。Amdahl定律系统中对某一部件采用更快执行方式所能获得的系统性能改进程度,...原创 2020-03-25 16:13:01 · 235 阅读 · 0 评论 -
git credential osxkeychain问题
问题不知道是更新了mac系统还是什么原因,git项目做push操作时突然提示:git-credential-osxkeychain wants to use your confidential information stored in "xxx" in your keychain.如果是使用客户端操作,则提示443的错误:fatal: Unable to access 'https:/...原创 2020-03-13 14:43:26 · 12079 阅读 · 2 评论 -
JVM基础(一) - Java内存区域与内存溢出异常
本文主要内容出自周志明老师《深入理解Java虚拟机》一书,是笔者结合自己的理解,提取重点,重新组织排版,再补充了一些内容后,总结的读书笔记。JVM运行时数据区的划分线程共享的数据区特征虚拟机启动时创建,生命周期与进程相同内存分配和回收是动态的,GC负责的区域线程私有的数据区特征线程启动时创建,生命周期与线程相同内存的分配和回收都具备确定性,方法结束或线程结束就回收,不需过...原创 2018-10-22 13:13:26 · 267 阅读 · 0 评论 -
Android - 性能优化
前言性能优化的过程分两部分:发现性能瓶颈制定方案,解决性能问题解决性能问题的方案需要具体情况具体分析,并没有完全固定的路子,更多的是靠经验的积累,本文不做涉及。但是发现性能瓶颈确实有着固定的方法。本文主要介绍 如何找到性能瓶颈 。如何找到性能瓶颈常用的性能检测工具是traceview,集成于 Android Device Monitor 中。从Android Studio3.0开始...原创 2018-09-18 15:44:58 · 1387 阅读 · 0 评论 -
Android 内存管理机制
本文主要包括三大部分内容: 内存管理基础:从整个计算机领域简述主要的内存管理技术。 Linux的内存管理机制:Android毕竟是基于Linux内核实现的操作系统,因此有必要了解一下Linux的内存管理机制。 Android的内存管理相关知识:Android又不同于Linux,它是一个移动操作系统,因此其内存管理上也有自己的特性,这一部分详细讲述Android的内存管理...原创 2018-09-03 14:41:45 · 11094 阅读 · 3 评论 -
Android图片压缩(质量压缩和尺寸压缩)
在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩);质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手机拍照都能达到3M左右了,尺寸压缩一般可用于生成缩略图。两种方法都实装在了我的项目中,结果却发现在质量压缩的模块中,本来1.9M的图片压缩后反而变成3M多了,很是奇怪,再做了进一步调查终于知道原因了。...原创 2017-04-13 11:00:35 · 399 阅读 · 0 评论 -
JVM基础(二) - 垃圾收集器与内存分配策略
本文主要内容出自周志明老师《深入理解Java虚拟机》一书,是笔者结合自己的理解,提取重点,重新组织排版,再补充了一些内容后,总结的读书笔记。概述在 JVM 运行时 5 大数据区中,程序计数器、虚拟机栈、本地方法栈 3 个区域都是线程私有的,随线程而生,随线程而灭。这几个区域的内存分配和回收都具备确定性,不需要过多考虑回收的问题,因为方法结束或线程结束时,内存自然就跟着回收了。而Java堆...原创 2018-10-22 20:55:46 · 292 阅读 · 0 评论 -
Java内存模型
本文主要内容出自周志明老师《深入理解Java虚拟机》一书,是笔者结合自己的理解,提取重点,重新组织排版后,总结的读书笔记。计算机性能摩尔定律:描述处理器晶体管数量与运行效率之间的发展关系。Amdahl定律:通过系统中并行化与串行化的比重来描述多处理器系统能获得的运算加速能力。并发处理的广泛应用,使得Amdahl代替摩尔定律成为计算机性能发展的源动力,而这种更替也代表了近年来硬件发展...原创 2018-11-05 14:52:48 · 131 阅读 · 0 评论 -
Android 架构设计:MVC、MVP、MVVM
本文内容主要是转载,整理了几篇较好的博客的内容,做了一点总结与补全3种架构的示意图虽然示意图有各种版本的,但基本上思想都是一致的,个人觉得以下这个系列比较好,只是鉴于MVC的示意图思想有两种不同的,所以这里同时提出来。上面的MVC的示意图与接下来要讲的MVC示意图有点差异,主要是View和Model之间如何通信的问题,有说法认为这只是MVC的两个变种而已,不管如何,在MVC中,Ac...原创 2018-11-13 15:29:59 · 217 阅读 · 0 评论 -
Android与Flutter桥接指南
Flutter官方文档这篇指南是针对Android开发者的,目的是让一个没有接触过Flutter的Android程序员快速开发出Flutter插件, 所以笔者默认各位读者已经有了JDK、SDK、Android Studio等开发环境和IDE。Flutter环境搭建1.下载Flutter SDKFlutter SDK Archive2.解压下载到的压缩包解压路径如D:\env\flu...原创 2019-03-29 14:16:09 · 1042 阅读 · 0 评论 -
Android判断是否合法包名、是否系统应用
需要通过正则表达式判断给定字符串是否是合法的包名,网上找了几个,都有一定的缺陷,比如类似com会通过验证,或者com.a.也会通过验证等,于是自己完善了一下。#Android合法包名规约只能包含大小写英文字母、数字、下划线、句点(.)以句点分割称为“段”,必须至少包含2个段,且不能有空段(即不能以句点开头或者结尾)每个段必须以英文字母开头,不能以数字或下划线开头#完整的正则表达式...原创 2019-03-28 11:45:46 · 2451 阅读 · 0 评论 -
Android 蓝牙监听与扫描
基础知识蓝牙操作主要有四项任务:设置蓝牙、查找局部区域内的配对设备或可用设备、连接设备,以及在设备间传输数据。蓝牙的分类传统蓝牙(Classic Bluetooth)电池使用强度大可用于数据量较大的传输,如语音,音乐,较高数据量传输等广泛用于音箱,耳机,汽车电子及传统数传行业低功耗蓝牙(Bluetooth LE)功耗低不支持音频协议,传输速率较低主要用于移动互联和健康医疗...原创 2019-09-27 11:39:47 · 3184 阅读 · 0 评论 -
Android Handler机制 - handleMessage究竟在哪个线程执行
关于Handler的原理,下面两篇文章讲的不错,第一篇简单易懂,第二篇更详细但也更冗长: Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系 Android 消息处理机制(Looper、Handler、MessageQueue,Message) 第二篇中作者有条结论: Handler 对象在哪个线程下构建(Handler的构造函数在哪...原创 2018-09-03 11:53:46 · 6063 阅读 · 0 评论 -
Android Handler机制 - MessageQueue如何处理消息
一次trouble-shooting最近在查看应用的线上日志统计时,发现一个 MessageQueue.nativePollOnce() 的记录,具体信息如下: at android.os.MessageQueue.nativePollOnce(Native method) at android.os.MessageQueue.next(MessageQueue.java:325...原创 2018-08-23 21:47:58 · 6739 阅读 · 0 评论 -
Android不同分辨率launcher icon的适配
网上讲android适配不同分辨率的文章很多,但是很少有说明不同分辨率的屏幕应该对应多大分辨率的app icon,这里做一个说明:To create alternative bitmap drawables for different densities, you should follow the 3:4:6:8:12:16 scaling ratio between the six gener...原创 2017-04-13 11:02:10 · 956 阅读 · 0 评论 -
Android获取状态栏高度
获取状态栏高度有两种方法:1.如果是在Activity中: Rect localRect = new Rect(); getWindow().getDecorView().getWindowVisibleDisplayFrame(localRect); statusHeight = localRect.top;限制:由于getWindow()方法在Activity中...原创 2017-04-13 11:01:57 · 365 阅读 · 0 评论 -
Android 控件自动“移入、暂停、移出”效果的实现
一个常见的效果:控件自动移入屏幕,停留几秒,再移出屏幕。项目中想做,但没找到合适的教程,于是自己写了一个工具类实现这个效果。本人初学android,实现方法肯定不是最优的,这只是一个没有办法的办法。构思很简单:两个动画,一个移入,一个移出,两个动画间插入一个计时器,以下是代码:动画类(该类可以实现多个控件的同步动画,只要把所有控件传入构造方法即可,如果要执行不同的动画,各个控件单独调用就可以了,同...原创 2017-04-13 11:01:42 · 1065 阅读 · 0 评论 -
ViewPager刷新单个页面的方法
使用ViewPager做滑动切换图片的效果时,如果图片是从网络下载的,那么在子线程中下载完图片时我们会使用handler通知UI线程,然后UI线程就可以调用mViewPager.getAdapter().notifyDataSetChanged()进行页面的刷新,但是viewpager不同于listview,你会发现单纯的调用notifyDataSetChanged()并不能刷新页面。先说说V...原创 2017-04-13 11:01:14 · 897 阅读 · 0 评论 -
Android使用MediaPlayer开发时抛IllegalStateException
在我开发的语音播放程序中,首次播放语音没问题,第二次播放时就抛出IllegalStateException异常,由于项目时间比较赶,大致查了下,基本明白问题的原因了,自己debug也证实了一些个推论,但最佳的解决方法却未能找到,只有一个自己想到的笨办法,和同样遇到这问题的人分享一下。 首先要明确IllegalStateException这个异常是什么意思,它是指“非法的状态”。据我调查所知,...原创 2017-04-13 11:01:07 · 2874 阅读 · 1 评论 -
Android 含有图片和文字的Button的实现
要实现一个同时包含图片和文字的按钮,粗糙一点的做法当然是直接画个含有画像和文字的png做button的背景,但是考虑到文字部分的国际化以及灵活性的话,就必须把图片和文字独立开来了。原生的Button控件是做不到的,方法应该有很多,这里介绍我做法,说白了就是一个父View包裹两个子View,父View选用LinearLayout,子View分别是ImageView和TextView。下面看下主要...原创 2017-04-13 11:00:48 · 2968 阅读 · 0 评论 -
LinearLayout半透明效果
透明效果有很多中实现方式,可以代码实现,也可以直接在布局文件中实现。简单点的就是直接给控件设透明背景:android:background="#88323232"上面是常见的灰色半透明效果,当你设置了一个错误的color值时会得到以下提示信息:Error: Color value not valid -- must be #rgb, #argb, #rrggbb, or #aarrggbb相对于我...原创 2017-04-13 11:00:42 · 5769 阅读 · 0 评论