自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

未子涵的博客

部分文章同步发布于 简书个人主页:https://www.jianshu.com/u/cdce76b2fd5b

  • 博客(100)
  • 资源 (4)
  • 问答 (2)
  • 收藏
  • 关注

原创 Android - 性能优化

前言性能优化的过程分两部分:发现性能瓶颈制定方案,解决性能问题解决性能问题的方案需要具体情况具体分析,并没有完全固定的路子,更多的是靠经验的积累,本文不做涉及。但是发现性能瓶颈确实有着固定的方法。本文主要介绍 如何找到性能瓶颈 。如何找到性能瓶颈常用的性能检测工具是traceview,集成于 Android Device Monitor 中。从Android Studio3.0开始...

2018-09-18 15:44:58 1347

原创 Android 内存管理机制

本文主要包括三大部分内容: 内存管理基础:从整个计算机领域简述主要的内存管理技术。 Linux的内存管理机制:Android毕竟是基于Linux内核实现的操作系统,因此有必要了解一下Linux的内存管理机制。 Android的内存管理相关知识:Android又不同于Linux,它是一个移动操作系统,因此其内存管理上也有自己的特性,这一部分详细讲述Android的内存管理...

2018-09-03 14:41:45 10851 3

原创 Android 内存泄漏 - 做一个有“洁癖”的开发者

你应该管理好应用的内存Random-access memory(随机存取存储器RAM)在任何软件开发环境中都是宝贵的资源,而对于物理内存经常受到限制的移动操作系统来说,它就更具价值了。 尽管Android Runtime(ART)和Dalvik虚拟机都会执行常规的垃圾收集(GC),但这并不意味着你可以忽略你的应用分配和释放内存的时间和位置。你仍然需要避免引入内存泄漏。内存溢出(OO...

2018-07-20 16:47:45 2630 4

原创 StrictMode:Explicit termination method ‘end‘ not called

在 Android 严格模式(StrictMode)下,明明已经做了完善的 IO关闭,却还是收到了 IO泄漏的告警。

2023-07-12 14:52:27 305

原创 APK构建过程-命令行编译

脱离Android Studio,如何构建一个可执行的APK文件

2022-11-27 17:37:49 1834 1

原创 Android未捕获异常监控原理

你懂得如何进行“Android未捕获异常的监控”,但你了解过监控的原理吗?为什么你做的监控,异常信息会有丢失的现象?

2022-11-18 13:39:36 1354

原创 通过命令行进行R8混淆

如何通过命令行进行R8混淆

2022-11-18 13:27:15 1027

原创 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 4843 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 1483

原创 跨线程通信-Handler

Thread Pool 和 Message Pool ,都是运用享元模式,创建了一个共享内存池。享元模式的使用非常广,比如地图开发,对于接收到的位置信息,不能每次都 new 一个 Java Bean 出来,而是应该创建一个 Java Bean 的内存池出来,合理复用。再比如股票类应用、 ViewPager、RecyclerView 等等。...

2022-07-26 00:07:04 825

原创 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 4520

原创 信息安全的护城河:数字证书与数字签名技术

前言我们都知道信息在网络中的安全传输,其核心是依托于各种加解密机制,发送方的明文通过加密算法转为密文,再通过网络传输给接收方,接收方再通过解密算法将密文还原为明文。目前应用最广的加解密机制是 对称加密 和 非对称加密。加密能保证数据以密文的形式在网络中传输,但密钥本质上也是一段明文数据,如果密钥的发放是线下进行的(即数据交换的双方是面对面通过U盘等物理介质交换密钥),那这个过程中的安全性是没有问题的。但绝大多数情况下,密钥必须通过网络发放,因此密钥的发放本身又是另一个信息安全传输的问题,如果这个问题得不

2021-08-16 10:56:22 711

原创 让你彻底明白: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 3470 14

转载 面向对象设计的“7大原则”

本文转载自 《面向对象设计原》。为提高阅读效率,在原文基础上做了删减与部分示例代码的修改。开闭原则定义勃兰特·梅耶在其1988年的著作《面向对象软件构造》中提出了开闭原则(Open Closed Principle,OCP)经典定义:软件实体应当对扩展开放,对修改关闭。通俗来讲,就是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。实现方法主要是通过“抽象约束、封装变化”来实现开闭原则。【例】windows的桌面主题设计主题有共同.

2021-06-20 15:57:33 240

原创 通过ActivityThread获取Context

背景为了保存一个全局可用的ApplicationContext对象,通过反射ActivityThread.currentActivityThread()来实现。近期在分析线上错误日志时,偶有发现这里会小概率死锁,分析堆栈后发现问题出在“切换至主线程反射调用currentActivityThread()”时加的同步锁这里,虽然最直接的方向是如何避免死锁场景的出现,也就是不要用容易产生死锁的调用方式,但可惜在我们的应用场景下这种调用方式是无法避免的,所以只能从别的方向入手,那为什么这里一定要切换至主线程调用,

2021-05-26 22:01:59 1386 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 4313 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 218 1

原创 Java并发编程(二) - 线程基础

线程的实现主流的操作系统都提供了线程实现,Java语言则提供了在不同硬件和操作系统平台下对线程操作的统一处理。我们注意到Thread类与大部分的Java API有着显著差别,它的所有关键方法都是声明为Native的。这就说明,有关线程的操作,底层都是与平台相关的。实现线程主要有3种方式:使用内核线程实现、使用用户线程实现和使用用户线程加轻量级进程混合实现。1.使用内核线程实现内核线程(Kernel-Level Thread,KLT)就是直接由操作系统内核支持的线程,这种线程由内核来完成线程切换,内核

2020-10-13 21:49:43 145

原创 Mac导出目录树

概要工作中可能需要导出如下的目录树结构:src├── cn│   └── com│   └── ctcom│   └── account└── com └── example ├── commons └── sec ├── core ├── datatype ├── exception

2020-10-13 16:16:02 464 1

原创 Android异常捕获

Android应用不可避免的会发生crash,无论你的应用写的多完美,总是无法完全避免crash的发生,可能是由于由于Android系统底层的bug,也可能是由于不充分的机型适配或者是糟糕的网络状况。当crash发生时,系统会kill掉正在执行的程序,现象就是闪退或者提示用户程序已停止运行,这对用户来说是很不友好的,也是开发者所不愿意看到的。更糟糕的是,当用户发生了crash,开发者却无法得知为何

2020-10-13 14:55:25 1332

原创 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 1443

原创 Android 获取应用列表

前言目前正是Android 11 马上要发布的时期,当前在Android手机上获取应用安装列表,要从三个维度上区分:获取方法、系统版本、是否系统应用。获取方法:至少有两种方法,它们的行为结果会有所差异系统版本:从 Android 11 开始,应用列表的获取将受到限制是否系统应用:系统应用与非系统应用的获取结果,也不尽相同获取方法介绍获取所有应用列表(系统应用+非系统应用),常用的方法有2种:Shell命令行、系统API。而要进一步区分是否系统应用,只要对上述结果进行一次过滤即可。下面分别介

2020-06-18 20:55:56 10083

原创 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 2556

原创 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 375

原创 Java并发编程(一) - 初识并发

本文主要内容出自周志明老师《深入理解Java虚拟机》一书,是笔者结合自己的理解,做了一些补充,重新组织排版后,总结的读书笔记。计算机性能摩尔定律当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18-24个月翻一倍以上。Amdahl定律系统中对某一部件采用更快执行方式所能获得的系统性能改进程度,...

2020-03-25 16:13:01 224

原创 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 11461 2

原创 Android 蓝牙监听与扫描

基础知识蓝牙操作主要有四项任务:设置蓝牙、查找局部区域内的配对设备或可用设备、连接设备,以及在设备间传输数据。蓝牙的分类传统蓝牙(Classic Bluetooth)电池使用强度大可用于数据量较大的传输,如语音,音乐,较高数据量传输等广泛用于音箱,耳机,汽车电子及传统数传行业低功耗蓝牙(Bluetooth LE)功耗低不支持音频协议,传输速率较低主要用于移动互联和健康医疗...

2019-09-27 11:39:47 2830

原创 python安装aes模块

执行包含aes加解密功能的python脚本时脚本中引用了 module:from Crypto.Cipher import AES此句报错:No module named Crypto.Cipher于是需要安装AES模块,可以通过以下命令安装:pip install pycrypto(如果pip命令无法识别,可以参考另一篇【Windows安装Python和pip】进行安装)若...

2019-04-23 15:14:32 10950

原创 Windows安装Python和pip

安装Python下载安装包:https://www.python.org/downloads/设置环境变量:指向安装目录cmd 确认环境是否正常,输入:python安装pip下载安装包:https://pypi.python.org/pypi/pip#downloads(下载pip-18.1.tar.gz)解压到任意路径cmd 进入路径并输入:python setup...

2019-04-23 15:12:18 3792 2

原创 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 1006

原创 Android判断是否合法包名、是否系统应用

需要通过正则表达式判断给定字符串是否是合法的包名,网上找了几个,都有一定的缺陷,比如类似com会通过验证,或者com.a.也会通过验证等,于是自己完善了一下。#Android合法包名规约只能包含大小写英文字母、数字、下划线、句点(.)以句点分割称为“段”,必须至少包含2个段,且不能有空段(即不能以句点开头或者结尾)每个段必须以英文字母开头,不能以数字或下划线开头#完整的正则表达式...

2019-03-28 11:45:46 2233

原创 Python版本冲突?试试配置多个版本!

问题有个cocos的项目,使用的cocos 3.13.1,官方指定需要使用python2.X(我不确定最新的cocos 3.17是否已经兼容了最新的Python 3.7.1)。如果使用python3.7.1,直接报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xae in position 29301: illegal multib...

2018-12-19 10:54:55 1370

原创 Android 架构设计:MVC、MVP、MVVM

本文内容主要是转载,整理了几篇较好的博客的内容,做了一点总结与补全3种架构的示意图虽然示意图有各种版本的,但基本上思想都是一致的,个人觉得以下这个系列比较好,只是鉴于MVC的示意图思想有两种不同的,所以这里同时提出来。上面的MVC的示意图与接下来要讲的MVC示意图有点差异,主要是View和Model之间如何通信的问题,有说法认为这只是MVC的两个变种而已,不管如何,在MVC中,Ac...

2018-11-13 15:29:59 206

原创 Java内存模型

本文主要内容出自周志明老师《深入理解Java虚拟机》一书,是笔者结合自己的理解,提取重点,重新组织排版后,总结的读书笔记。计算机性能摩尔定律:描述处理器晶体管数量与运行效率之间的发展关系。Amdahl定律:通过系统中并行化与串行化的比重来描述多处理器系统能获得的运算加速能力。并发处理的广泛应用,使得Amdahl代替摩尔定律成为计算机性能发展的源动力,而这种更替也代表了近年来硬件发展...

2018-11-05 14:52:48 122

原创 JVM基础(二) - 垃圾收集器与内存分配策略

本文主要内容出自周志明老师《深入理解Java虚拟机》一书,是笔者结合自己的理解,提取重点,重新组织排版,再补充了一些内容后,总结的读书笔记。概述在 JVM 运行时 5 大数据区中,程序计数器、虚拟机栈、本地方法栈 3 个区域都是线程私有的,随线程而生,随线程而灭。这几个区域的内存分配和回收都具备确定性,不需要过多考虑回收的问题,因为方法结束或线程结束时,内存自然就跟着回收了。而Java堆...

2018-10-22 20:55:46 277

原创 JVM基础(一) - Java内存区域与内存溢出异常

本文主要内容出自周志明老师《深入理解Java虚拟机》一书,是笔者结合自己的理解,提取重点,重新组织排版,再补充了一些内容后,总结的读书笔记。JVM运行时数据区的划分线程共享的数据区特征虚拟机启动时创建,生命周期与进程相同内存分配和回收是动态的,GC负责的区域线程私有的数据区特征线程启动时创建,生命周期与线程相同内存的分配和回收都具备确定性,方法结束或线程结束就回收,不需过...

2018-10-22 13:13:26 256

原创 Android Handler机制 - handleMessage究竟在哪个线程执行

关于Handler的原理,下面两篇文章讲的不错,第一篇简单易懂,第二篇更详细但也更冗长: Android 异步消息处理机制 让你深入理解 Looper、Handler、Message三者关系 Android 消息处理机制(Looper、Handler、MessageQueue,Message) 第二篇中作者有条结论: Handler 对象在哪个线程下构建(Handler的构造函数在哪...

2018-09-03 11:53:46 5628

原创 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 6432

原创 Android的事件分发机制以及滑动冲突的解决

声明: 本文主要涉及VIew的事件分发与滑动冲突的解决,关于View的事件分发流程的部分内容参考自: Android事件分发机制详解:史上最全面、最易懂 个人感觉该文较全面,总结也很好,但略显冗长,且源码基于Android5.0以前的版本。本文中简化了核心原理,再补充了一些必要知识点,并使用最新的源码重新做了分析。基础知识事件分发的对象MontionEvent...

2018-07-20 18:37:13 2257

原创 Android 获取手机运营商、有无sim卡

名词解释MCCMobile Country Code:移动国家代码,由3位数字组成,唯一地识别移动用户所属的国家。MCC由国际电联(ITU)统一分配和管理,一旦分配就不可更改。所以一个MCC只能对应一个国家,但是一个国家可以被分配多个MCC。比如美国的MCC有310,311和316。中国的 MCC只有460。MNCMobile Network Code:移动网络代码,共2位,中国移...

2018-07-10 15:30:53 7570 3

ezmorph-1.0.3.jar

json必不可少的包,很难找到不要分的资源,只好花点分数下载来用,这里0分做个备份,供大家使用

2012-07-10

struts的json相关jar包

struts1.2和struts2中公用的json的jar包,struts2好像还有一个struts2-json-plugin-2.2.1.1.jar,不过我用的struts1.2,没有这个包

2012-07-10

aopalliance-1.0.jar

aopalliance-1.0.jar,不要分,这里做个备份,以便以后有用

2012-05-29

cglib-nodep-2.1_3.jar

可以解决这个问题:Cannot proxy target class because CGLIB2 is not available

2012-05-29

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

TA关注的人

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