
Android开发
文章平均质量分 75
Android开发
KWMax
Android/跨端/iOS
展开
-
DeepSeek深度思考:客户端(Android/iOS)架构设计指南
DeepSeek深度思考,教你如何进行客户端(Android/iOS)架构设计原创 2025-02-08 11:35:42 · 1458 阅读 · 0 评论 -
Android开发系列:常用gradlew和adb命令
常用gradlew和adb命令原创 2024-07-07 16:24:38 · 441 阅读 · 0 评论 -
JNI学习笔记:NDK入门(附Demo)
一、JNI简介JNI,Java native interface,即Java本地接口。JNI是Java调用Native 语言的一种特性。通过JNI可以使得Java与C/C++机型交互。即可以在Java代码中调用C/C++等语言的代码或者在C/C++代码中调用Java代码。实现步骤:1、在Java中先声明一个native方法 2、编译Java源文件javac得到.class文件 3、...原创 2019-03-16 22:19:37 · 292 阅读 · 0 评论 -
JNI学习笔记:JNI原理
一、JNI数据类型在上节中出现了jstring类型,这里说明一下,JNI有自己的原始数据类型和数据引用类型。二、JNI原理Java语言的执行环境是Java虚拟机(JVM),JVM其实是主机环境中的一个进程,每个JVM虚拟机都在本地环境中有一个JavaVM结构体,该结构体在创建Java虚拟机时被返回,在JNI环境中创建JVM的函数为JNI_CreateJavaVM。JNI...转载 2019-03-16 22:59:29 · 1778 阅读 · 0 评论 -
一个sql语句执行结果诡异的问题
最近碰到一个sql语句在不同端执行结果不同的诡异问题,后台编写了一条多表联查的sql语句,执行结果为5条记录。然而放到手机端执行,发现结果只有一条记录。经过语句拆分,一部分一部分排除原因,发现原因在select count (a.numebr)...... FROM TABLE_A a LEFT JOIN TABLE_B...LEFT JOIN TABLE_C...WHERE ......原创 2018-08-09 17:07:36 · 306 阅读 · 0 评论 -
Android M 6.0特性及适配
一、前言Android M(6.0,API 级别 23)提供诸多新特性和功能,并且对系统和 API 行为做出了一些变更。网上也有很多相关博客,都写得很详细,也有很不错的文章。这里就不照搬献丑了,仅做一下总结,作为自己学习记录,便于日后查阅。二、重要特性相比5.0,Android M 并没有带来Android系统质的飞跃,不过在人性化功能和安全性上做了一些更新。关于一些体验上...原创 2019-09-07 17:17:37 · 312 阅读 · 0 评论 -
Android P 9.0特性及适配
一、前言Android P 在Google IO2018就正式发版了,随着用户设备升级和项目升级,Android P的使用者越来越多。Android P (9.0,API级别 28),引入了许多新特性和新功能。本文重点介绍面向开发者的新功能。主要内容有以下几项:刘海屏适配 利用Wi-Fi RTT进行室内定位 通知栏功能增强 限制访问通话记录和电话号码 对使用非 SDK 接口...原创 2019-09-10 15:25:06 · 702 阅读 · 0 评论 -
Android O 8.0特性及适配
Android 8.0的正式版,官方代号为Oreo。新系统在优化和新功能设计上下足了功夫。以下是一些比较重要的特性。1、画中画模式PiPPIP 是一种多窗口显示模式,多用于视频播放,即你可以一边发微信一边看视频。最早用于 Android TV,从 Android 8.0 开始,API 开放给所有 Android 设备。Android 的画中画是基于整个 Activity 的,并...原创 2019-09-09 18:11:36 · 437 阅读 · 0 评论 -
Android N 7.0特性及适配
一、前言Android 7.0 Nougat 提供新功能以提升性能、生产效率和安全性。主要新增了一些特性和优化。关于Android 7.0特性的介绍,网上有很多不错的博客,比如->https://blog.youkuaiyun.com/wulianghuan/article/details/59112049在此,就不详细列举,仅做自我总结一下,重点在适配上,便于日后查阅。二、几个重要特...转载 2019-09-09 15:42:02 · 226 阅读 · 0 评论 -
手机屏幕尺寸大全
在进行前端页面开发时,有时候需要根据手机进行适配,为避免每次查找麻烦,贴一个手机屏幕尺寸大全,数据来源:优设网-屏幕尺寸大全iPhone 11 Pro iOS 5.8 458 19 : 9 375 x 812 1125 x 2436 3.0xxhdpi iPhone 11 Pro Max iOS 6.5 458 19 : 9 414 x 896 1242 x 2688 3.0xxhdpi iPhone 1..转载 2020-06-01 11:36:58 · 4367 阅读 · 0 评论 -
Android 混淆
一、前言混淆的概念:打包项目时将项目里的包名、类名、变量名进行更改,使得代码不容易泄露,类似于对其apk中的文件加密.混淆的优点是:1.增加Apk反编译之后代码泄露的困难性;2.生成的apk体积会缩小。相应的可能带来的问题:混淆设置稍有不对可能导致项目运行崩溃,或者上线之后异常信息定位困难。二、开启混淆找到项目app目录下build文件,设置minifyEnabled为t...原创 2019-06-23 17:21:08 · 274 阅读 · 0 评论 -
Android 逆向工程:反编译第一个APK
一、前言众所周知,APK是由源码编译生成的,那么反过来,源码也是有可能是由APK反编译的。近来学习Android逆向工程,所以写写博客记录学习过程还是很有必要的,那么就从反编译一个简单的APK开始吧。二、工具1、apktool作用:资源文件获取,可以提取apk中的图片文件和布局文件下载地址:https://bitbucket.org/iBotPeaches/apktool/do...原创 2019-05-16 00:22:15 · 672 阅读 · 0 评论 -
Android 内存分析工具:LeakCanary和Memory Profiler
一、LeakCanary一款非常好用的内存泄露检测工具,能够通过Log的方式告诉你是哪块代码发生了内存泄露。使用方法:添加依赖 ->Application中install LeakCanary (默认只能检测Activity内容的内存泄露)debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.1...原创 2019-07-10 19:48:18 · 825 阅读 · 0 评论 -
Android LeakCancary问题:未出现leak应用图标
今天碰到一个奇怪的问题,按照配置步骤完成leakcancary的接入 ->LeakCanary的使用安装后发现在手机桌面未出现对应的leak应用图标,不是说好的会自动装上leak应用的吗??查找良久,1、检查权限(因为LeakCanary需要生成hprof文件,保存在SD卡里面,因此你的应用要先申请权限)<!-- SDCard中创建与删除文件权限 --> ...原创 2019-07-10 20:20:04 · 2215 阅读 · 2 评论 -
Android bitmap的获取方法总结
从获取方式分:(1)以文件流的方式假设在sdcard下有 test.png图片FileInputStream fis = new FileInputStream("/sdcard/test.png");Bitmap bitmap=BitmapFactory.decodeStream(fis);(2)以R文件的方式假设 res/drawable下有 test.jpg文件...转载 2019-05-13 16:22:37 · 892 阅读 · 0 评论 -
Android bitmap的压缩方式总结
1、质量压缩private void compressQuality() { Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.test); mSrcSize = bm.getByteCount() + "byte"; ByteArrayOutputStream bos = n...转载 2019-05-13 17:17:35 · 7136 阅读 · 0 评论 -
Android 手势划定区域裁剪图片
需求:拍照,然后对图片进行处理,划定矩形区域,将矩形区域裁剪下来思路:1、使用系统相机拍照,拍完返回,对图片进行压缩和存储。2、新建一个activity处理图片裁剪,利用自定义view在画布上画出矩形区域。3、根据坐标信息生成裁剪图片并存储。部分核心代码:1、调用系统相机拍照String IMAGE_PATH = Environment.getExte...原创 2019-06-19 23:39:00 · 1055 阅读 · 0 评论 -
Android 本地图片显示相册或隐藏
隐藏:1、创建 .nomedia 文件夹,则该文件夹被隐藏,但在代码中依然可以获取到文件2、在文件夹里面新增.nomedia文件,则文件夹下系统会自动跳过扫描文件,从而隐藏显示:插入相册- > 通知图库public static void saveImageToGallery(Context context, Bitmap bmp) { // 首先保存图片...原创 2018-12-05 11:31:21 · 2058 阅读 · 0 评论 -
Android scaleType属性
转自:https://blog.youkuaiyun.com/lirui0822/article/details/384234231、android:scaleType="center"(1)当图片大于ImageView的宽高:以图片的中心点和ImageView的中心点为基准,按照图片的原大小居中显示,不缩放,用ImageView的大小截取图片的居中部分。(2)当图片小于ImageView的...转载 2018-07-03 15:18:25 · 8251 阅读 · 0 评论 -
Android AIDL的原理和使用
一、什么是AIDLAIDL,全称Android Interface definition language,是Android中IPC(Inter-Process Communication)进程通信方式的一种。说到进程通信,就要区分一下什么是进程什么是线程:进程一般指的是一个执行单元,它拥有独立的地址空间,也就是一个应用或者一个程序。线程是CPU调度的最小单元,是进程中的一个执行部...原创 2019-04-06 18:03:34 · 547 阅读 · 0 评论 -
Android缓存机制--LruCache
一、LruCache简介 LruCache采用的缓存算法为LRU(Least Recently Used),即最近最少使用算法。核心思想是当缓存满时,会优先淘汰那些近期最少使用的缓存对象。其内部采用的数据结构是LinkedHashMap,当缓存满时,把最近最少使用的对象从内存中移除,并提供了get和put方法来完成缓存的获取和添加操作。 常用于图片缓存,但不局限与图片缓存。而且...转载 2018-09-02 22:37:59 · 949 阅读 · 0 评论 -
Android framework(一): 系统架构及源码
虽然实际开发工作经常偏业务和应用层,但作为一个有追求的程序猿,对于技术还是要保留好奇和深入了解的习惯的。年轻就要多学习!不仅要知其然,还要知其所以然。故趁闲暇,博览大家,研究一下frameworks相关知识,提升自己。Android四层架构从高到低分别是应用层、框架层、运行库层、Linux内核层。Android的本质是在标准的Linux系统上增加了Java虚拟机Dalvik/ART,并在Dalvik/ART虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基原创 2020-05-27 21:28:40 · 797 阅读 · 0 评论 -
Android framework(四):应用程序启动过程
概述1、几个重要类Instrumentation:监控应用程序和系统的交互。ActivityManagerService:组件管理调度中心。ActivityStarter:Activity启动控制器,处理Intent与Flag对Activity启动的影响,具体说来有:1 寻找符合启动条件的Activity,如果有多个,让用户选择;2 校验启动参数的合法性;3 返回int参数,代表Activity是否启动成功。ActivityStackSupervisor:Activity启动和调度的核心类,主要管原创 2020-10-16 19:33:05 · 439 阅读 · 0 评论 -
Android开发系列:TextView绘制(四)过程分析
整体流程onMeasure -> onLayout -> onDrawonMeasureprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int widthMode = MeasureSpec.getMode(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int width.原创 2020-12-31 17:01:27 · 1202 阅读 · 1 评论 -
Android Binder机制
一、引言Android系统中,涉及到多进程间的通信底层都是依赖于Binder IPC机制。例如当进程A中的Activity要向进程B中的Service通信,这便需要依赖于Binder IPC。不仅于此,整个Android系统架构中,大量采用了Binder机制作为IPC(进程间通信)方案。进程间通信还有诸如管道、SystemV、Socket等方式,那么Binder机制相比其他的优势在哪里:...转载 2019-04-06 20:39:46 · 242 阅读 · 0 评论 -
Android开发系列:TextView绘制(一)BoringLayout
前言在Android开发中,TextView是一个很基础的控件。但看过它的源码你就会发现他其实一点都不简单。毕竟他也是不少view的父类。其中包含了很多布局、逻辑和计算。之前一直想有空就研究一下来着的。那么现在就开始吧。这篇先讲TextView中三大布局(BoringLayout、StaticLayout、DynamicLayout)中最简单的BoringLayout。BoringLayout在官网中,BoringLayout的描述如下:A BoringLayout is a very simp原创 2020-12-23 20:40:42 · 1261 阅读 · 1 评论 -
Android framework(二):Zygote进程
一、概述zygote,在英语中是受精卵的意思。而在Android系统中也有这么一个“受精卵进程” – Zygote进程。在Android系统中,Zygote进程是所有Android进程的父进程。它通过fork的形式,创建SystemServer进程和应用程序进程。而Zygote进程则是通过linux系统的init进程启动的。在Android系统中各种进程的启动过程:init进程 ––> Zygote进程 ––> SystemServer进程 ––>各种应用进程其中,应用程序进程原创 2020-06-30 20:53:35 · 558 阅读 · 0 评论 -
Android开发系列:TextView绘制(二)StaticLayout
StaticLayout官网中,StaticLayout的描述如下:StaticLayout is a Layout for text that will not be edited after it is laid out. Use DynamicLayout for text that may change.This is used by widgets to control text layout. You should not need to use this class directly原创 2020-12-26 10:27:18 · 2042 阅读 · 1 评论 -
Android framework(三):SystemServer进程
一、概述SystemServer是Android系统的核心之一,大部分Android提供的服务都运行在这个进程里,SystemServer中运行的服务总共有60多种。为了防止应用进程对系统造成破坏,Android的应用进程没有权限直接访问设备的底层资源,只能通过SystemService中的代理访问。通过Binder,用户进程在使用SystemService中的服务并没有太多不便变之处。上一节已经讲到ZygoteInit的启动,那么ZygoteInit是如何启动SystemServer的呢二、fork原创 2020-08-01 15:44:00 · 22211 阅读 · 0 评论 -
Android Handler原理源码全解析
前面已经写过handler的使用方法了 -> Android Handler全使用,本篇将详解handler机制原理和源码。Message线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程之间交换数据。使用Message的arg1和arg2便可携带int数据,使用obj便可携带Object类型数据。Handler消息的处理者。在子线程调用sendMessage方法...原创 2019-09-12 00:29:25 · 226 阅读 · 0 评论 -
Android 手写一套Handler
上一篇,详细分析了原理和handler机制的源码(传送门 -> https://blog.youkuaiyun.com/yaojie5519/article/details/100579131)这一篇,将自己动手“丰衣足食”,尝试手写一套Handler代码一、分析按照上一篇内容,画出UML类图(只包含主要的部分方法)如下:注意几个类的关系和主要方法。上一篇内容有几个点需要补充一下...原创 2019-09-17 17:12:45 · 318 阅读 · 0 评论 -
Android开发系列:TextView绘制(三)DynamicLayout
DynamicLayout官网中,DynamicLayout描述如下DynamicLayout is a text layout that updates itself as the text is edited.This is used by widgets to control text layout. You should not need to use this class directly unless you are implementing your own widget or cus原创 2020-12-30 16:43:24 · 1784 阅读 · 1 评论 -
Android 开发之GreenDao(入门篇)
一、GreenDao简介首先,greendao是一种ORM实现技术。ORM(Object Relation Mapping 即 对象关系映射),通俗讲就是将面向对象编程语言里的对象与数据库关联起来的一种技术。所以,greenDao其实就是一种将java object 与SQLite Database关联起来的桥梁。二、GreenDao特点1、greenDao可以说是当今最流行,最高...原创 2018-08-07 10:51:02 · 1522 阅读 · 0 评论 -
Android开发之GreenDao(进阶篇)
1、数据库升级原理:创建临时表-->删除原表-->创建新表-->复制临时表数据到新表并删除临时表;这样就实现数据库表的更新了新建一个数据库更新辅助类 MigrationHelperpublic class MigrationHelper { private static final String CONVERSION_CLASS_NOT_FOUND_EX...原创 2018-08-27 10:04:18 · 1030 阅读 · 0 评论 -
Android RxJava学习记录(二)
(五)https://www.jianshu.com/p/0f2d6c2387c91、使用zip操作符,发送事件内容未组合前存放于“水缸”。2、当上下游工作在同一个线程中时, 这时候是一个同步的订阅关系, 也就是说上游每发送一个事件必须等到下游接收处理完了以后才能接着发送下一个事件。当上下游工作在不同的线程中时, 这时候是一个异步的订阅关系, 这个时候上游发送数据不需要等待下游接收。这...原创 2019-06-12 20:41:11 · 196 阅读 · 0 评论 -
Android RxJava学习记录(三)
(八)https://www.jianshu.com/p/a75ecf461e02在上篇记录中讲到,Flowable默认有一个大小为128的“水缸”。一旦超过128就会抛出MissingBackpressureException异常。实际上,Flowable可以使用更大的“水缸”,只需指定 BackpressureStrategy.BUFFERFlowable.create(new ...原创 2019-06-17 19:07:03 · 169 阅读 · 0 评论 -
Android RxJava学习记录(一)
看了一些RxJava的技术博客,发现有位大神写得很简明形象,深感佩服!教程地址 -->https://www.jianshu.com/u/c50b715ccaeb此处记录一下学习过程中一些重要的点:(一)https://www.jianshu.com/p/464fa025229e1、onComplete 和onError唯一并且互斥。发送多个onComplete是...原创 2019-06-03 20:21:40 · 195 阅读 · 0 评论 -
Android网络编程:OkHttp的使用和源码分析
一、简介OkHttp是一个高效的HTTP客户端,它有以下默认特性:支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接连接池减少请求延时透明的GZIP压缩减少响应数据的大小缓存响应内容,避免一些完全重复的请求当网络出现问题的时候OkHttp依然坚守自己的职责,它会自动恢复一般的连接问题,如果你的服务有多个IP地址,当第一个IP请求失败时,OkHttp会交替尝试...原创 2019-04-07 16:14:56 · 497 阅读 · 0 评论 -
Android网络编程:Http原理及优化
一、前言网络编程作为移动应用开发的一个重要内容,虽然现在有很多的开源库可以帮我们方便快捷的访问网络。但我们仍要去了解其网络访问的原理,这是基础,也是优秀的开发者必备素质。二、Http1、概念HTTP,全称HyperText Transfer Protocol,超文本传输协议,即使用超文本标记语言(HTML)的一种文本传输协议。它是应用层协议,规定了数据交互的格式内容。2、特点支持...原创 2019-04-07 16:11:09 · 958 阅读 · 2 评论 -
Android开发系列:高性能视图组件Surfaceview
在Android应用开发领域,面对视频播放、游戏构建及相机实时预览等高性能需求场景,直接操控图像数据并即时展示于屏幕成为必要条件。性能瓶颈:传统View的绘制任务由UI主线程承担,如果绘制操作过于复杂或需要频繁刷新,就可能导致主线程阻塞,进而影响界面的响应速度和用户交互体验。视觉瑕疵:传统View组件缺乏双缓冲技术的支持,View直接屏幕绘制易引发画面闪烁及图像撕裂。效果局限:传统View组件基于视图层次结构,每个View都被视为一个矩形区域,这使得实现不规则形状、透明度变化等复杂视觉效果变得相对困难。原创 2024-06-16 21:01:54 · 2151 阅读 · 0 评论