安卓开发
文章平均质量分 87
givemefive_001
这个作者很懒,什么都没留下…
展开
-
Android 序列化
Parcel序列化的原理:实际存储由Parcel.cpp负责,在一块连续的内存区域的中,写入各类信息。Parcel在实例化时,拿到Parcel.cpp的实例的句柄Parcel在序列化写入数据时,遵循I-V的形式,其中I指数据类型,V指实际数据要序列化的对象实现Parcelable,其中writeToParcel()在序列化过程中获得执行时机,对象负责写入数据。CREATOR在反序列化时被调用,调用对象构造函数,将Parcel传入以让对象填充数据效率:从执行结果上看Parcelable比Seri原创 2021-03-17 16:05:58 · 138 阅读 · 0 评论 -
Window、View、事件、绘制
- ActivityThread.handleResumeActivity() - Activity.makeVisible() - ViewManager.addView(DecorView) == WindowManagerImpl.addView - WindowManagerGlobal.addView() - ViewRootImpl构造:传入Display,来自Context.getDisplay() ...原创 2021-03-11 14:00:18 · 119 阅读 · 0 评论 -
Android崩溃分析与处理
一. 崩溃:概念:崩溃率 UV = 发生崩溃的UV / 登录UV崩溃率小于1/1000为正常,1/10000为优秀崩溃捕获:Java层捕获:设置默认的未捕获异常处理器,Thread.setDefaultUncaughtExceptionHandler()Native层捕获:常见signal:SIGABRT 6 : 常见非法UTF8字段SIGSEGV 11: 非法内存操作信号处理函数:int sigaction(int, const struct sigaction*, str原创 2021-03-10 17:04:43 · 948 阅读 · 0 评论 -
小问题
1.adb shell ps找不到对应的app进程,需要使用adb shell ps -A原创 2020-12-03 13:32:38 · 2065 阅读 · 2 评论 -
Android 11 跳转权限
<queries> <intent> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> </intent> <intent> <action android:name="android.intent.action.VIEW" /> <data and.原创 2020-11-20 09:45:28 · 653 阅读 · 0 评论 -
java 获取当前方法的调用栈
本文的出发点在于处理现场问题时,想看到方法的调用过程StackTrace(堆栈轨迹)存放的本文的出发点在于处理现场问题时,想看到方法的调用过程StackTrace(堆栈轨迹)存放的就是方法调用栈的信息,每次调用一个方法会产生一个方法栈,当前方法调用另外一个方法时会使用栈将当前方法的现场信息保存在此方法栈当中,获取这个栈就可以得到方法调用的详细过程。StackTraceElement stack[] = Thread.currentThread().getStackTrace(); ...转载 2020-08-18 20:40:04 · 3179 阅读 · 0 评论 -
openssl Android平台编译脚本
#!/bin/sh# Android ndk的路径ANDROID_NDK=/Android_Tools/android-ndk-r20b# 需要的openssl版本OPENSSL_VERSION=1.1.1fAPI_LEVEL=23# 编译的临时路径以及输出路径BUILD_DIR=/tmp/openssl_android_buildOUT_DIR=/tmp/openssl_android# 需要编译的多个cpu架构集合BUILD_TARGETS="armeabi armeab.原创 2020-07-22 14:26:04 · 357 阅读 · 0 评论 -
Android高级-笔记
1.序列化,性能2.onSaveInstanceState()调用时机;Q:AMS通过binder通信,告诉Application需要pauseActivity,Application通过Handler将任务转到ActivityThread的工作线程,然后ActivityThread通过Instrumentation先执行Activity的performSaveInstanceState()方法,然后执行onSaveInstanceState()方法,然后再执行Activity的performPaus原创 2020-06-14 09:51:44 · 618 阅读 · 0 评论 -
Binder的设计与实现
一. Binder使用Client-Server通信方式:一个进程作为Server提供诸如视频/音频解码,视频捕获,地址本查询,网络连接等服务;多个进程作为Client向Server发起服务请求,获得所需要的服务。二. Binder模型:Binder框架定义了四个角色:Server,Client,ServiceManager(以后简称SMgr)以及Binder驱动。其中Server,Client,SMgr运行于用户空间,驱动运行于内核空间。这四个角色的关系和互联网类似:Server是服务器,Clien原创 2020-05-20 15:56:34 · 422 阅读 · 0 评论 -
Android UI性能优化
对于Android的UI性能优化,我一般从5个途径来分析:1.Debug GPU overdraw;2.Android CPU Profile;3.dumpsys gfxinfo;4.Profile GPU Rendering;5.Systrace。我们从这5个途径一一来说明。一.Debug GPU overdraw这个是用于检测布局优化的工具,这个想必大家都非常熟悉了,在手机的开发者选项中打开”Debug GPU overdraw“,就能看到咱们的布局中有各种色块,色块的说明,一般避免出现原创 2020-12-08 17:14:42 · 2987 阅读 · 0 评论 -
命令dumpsys之gfxinfo调用流程
本文基于Android 8.0源码启动的位置是在/frameworks/native/cmds/dumpsys/main.cpp:int main(int argc, char* const argv[]) { signal(SIGPIPE, SIG_IGN); sp<IServiceManager> sm = defaultServiceManager(); //1 fflush(stdout); if (sm == nullptr) {原创 2020-05-12 13:16:18 · 1611 阅读 · 0 评论 -
UI绘制的小知识点
ViewRootImpl跟WindowManagerService通信是通过Session Session extends IWindowSession.StubSession创建的时候,将WindowManagerService、IWindowSessionCallback.Stub回调、InputMethodManager.getClient()、InputMethodManager.getInputContext()传入Session,而这个Session通过WindowManagerGlo..原创 2020-05-10 13:56:17 · 125 阅读 · 0 评论 -
IdleHandler
IdleHandler:在MessageQueue.next(),消息队列为空且延时消息时间未到的情况下,会执行IdleHandler的queueIdle()方法,该方法返回一个boolean值:1.如果为false则执行完毕之后移除这条消息(一次性完事);2.如果为true则保留,等到下次空闲时会再次执行(重复执行)。使用方式:Looper.myQueue().addIdleHandler(new IdleHandler() { @Override public boole...原创 2020-05-09 11:48:35 · 151 阅读 · 0 评论 -
今日头条屏幕适配框架AndroidAutoSize-原理
对于AndroidAutoSize SDK,需要明确一下几个点的实现原理:1.AndroidAutoSize的无侵入启动原理:autosize模块的AndroidManifest中注册了一个provider(InitProvider)由于一个应用程序的启动,伴随着ActivityThread的启动,在ActivityThread创建和启动过程中会去创建和初始化注册的contentpro...原创 2020-05-02 15:22:13 · 3205 阅读 · 0 评论 -
DVM
JVM与DVM的区别:1.基于的架构不同:JVM是基于栈的,读写数据需要较多的指令。DVM是基于寄存器的,省去了数据复制时的栈的出入栈操作,提高了性能。但是基于寄存器的指令要比基于栈的指令要大。2.执行的字节码不同:JVM:.java->.class->.jar,.jar只是对class进行了打包,并没有将class信息合并。DVM:.java->.class-&...原创 2020-04-27 11:05:08 · 831 阅读 · 0 评论 -
事件分发 - 阅读源码、查漏补缺
View的事件处理:dispatchTouchEvent -> onTouchEvent -> performClick -> 如果设置了setOnClickListener,那么此时就会调用。注意:如果View设置了setOnTouchListener,并且在回调方法onTouch里面return true,那么View的onTouchevent方法就不会执行,当然set...原创 2020-03-06 15:47:27 · 110 阅读 · 0 评论 -
注意:View.post(Runnable)
View.post(Runnable)调用之后,Runnable不一定会执行,那么什么时候不执行呢?下面来分析一下:交流 之 把事情讲清楚的技巧:结论先行,分析随后。先给结论:在Android 7.0之前,View还没有附着到Window,且View.post(Runnable)在子线程执行,那么这个Runnable就不会执行。首先看看它的源码(Android 7.0):publ...原创 2020-01-19 16:24:00 · 521 阅读 · 0 评论 -
Android Path
1.Android Canvas之Path操作 https://www.jianshu.com/p/9ad3aaae0c632.PathMeasure:https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B08%5DPath_Play.md原创 2019-10-24 09:02:06 · 85 阅读 · 0 评论 -
Android.mk 文件语法详解
Android.mk 文件语法详解转:http://blog.sina.com.cn/s/blog_602f8770010148ce.html=====================================================================================0. Android.mk简介:Android.mk文件用来告知NDK Build 系统...原创 2018-03-30 14:59:59 · 272 阅读 · 0 评论 -
Android编译时注解——APT技术
APT(Annotation Processing Tool)即注解处理器,是一种处理注解的工具,确切的说它是javac的一个工具,它用来在编译时扫描和处理注解。注解处理器以Java代码(或者编译过的字节码)作为输入,生成.java文件作为输出。简单来说就是在编译期,通过注解生成.java文件。运行时注解(@Retention(RetentionPolicy.RUNTIME)):之前讲得运行...原创 2019-08-07 17:59:32 · 656 阅读 · 0 评论 -
APK反编译
1.Android反编译apk并重新打包签名(Mac环境):https://www.jianshu.com/p/db709a280d9a2.Apktool回编译问题解决方案总结:https://blog.csdn.net/cavalier_anyue/article/details/464194133.一步一步带你反编译apk,并教你修改smali和重新打包:https://b...原创 2019-08-01 11:28:25 · 116 阅读 · 0 评论 -
Android模块开发之SPI
Android模块开发之SPI :https://www.jianshu.com/p/deeb39ccdc53原创 2019-07-31 20:05:15 · 171 阅读 · 0 评论 -
注解的简单应用 — 运行时注解
一.注解的概述:元注解共有四种“@Retention,@Target,@Inherited,@Documented”@Retention保留的范围,默认值为CLASS. 可选值有三种(1)SOURCE, 只在源码中可用(2)CLASS, 在源码和字节码中可用(3)RUNTIME, 在源码,字节码,运行时均可用@Target可以用来修饰哪些程序元素,如TYPE,METHOD...原创 2019-07-31 14:48:57 · 284 阅读 · 0 评论 -
Glide —— 替换资源加载组件
因为项目有特殊的需求,从本地代码加载资源生成Bitmap,然后渲染到RecyclerView上,由于加载资源部分是耗时操作,需要在异步执行,在资源加载过程中,很容易因为资源多且大导致oom,因此考虑引入Glide,加资源加载部分新增本地资源加载的途径。说白了就是要替换网络加载组件,为了不影响网络加载组件,需要在 ModelLoader根据uri来做判断。步骤:1.创建数据获取类继承D...原创 2019-07-18 17:10:13 · 620 阅读 · 0 评论 -
管理System UI —— 解决DialogFragment键盘挡住布局的问题
Android 解决界面底部弹出dialog被虚拟按键遮挡一部分的问题管理System UI (状态栏 + 导航栏)原创 2019-08-12 17:48:13 · 2782 阅读 · 0 评论 -
RecyclerView —— 自定义LayoutManager
对LayoutManager中的基本的几个集合和方法了解了,自定义LayoutManager就完成一半了。对集合和方法的解释:LayoutManager:1.getViewForPosition():是Recycler的方法,在需要获取新的View时直接申请,返回的View可能是之前回收的垃圾View,也可能是new出来的新View(RecyclerView完成);取View时,(...原创 2019-09-25 12:02:29 · 1120 阅读 · 0 评论 -
NDK调试
1.如果Android工程中已经存在c、c++文件,而且makefile也已经写好,那么此时需要让Android Studio indexer c、c++文件:在build.gradle的android{}下配置: externalNativeBuild { ndkBuild { path file('src/main/jni/Android.mk...原创 2019-09-24 20:41:56 · 783 阅读 · 0 评论 -
异常捕捉
一.Java异常捕获:1.1.Java异常概要:所有RuntimeException类及其子类的实例被称为Runtime异常,即UnCheckedException,不是RuntimeException类及其子类的异常实例则被称为CheckedException。(1)Checked异常又称为编译时异常,即在编译阶段被处理的异常。编译器会强制程序处理所有的Checked异常,也就是...原创 2019-09-09 23:13:25 · 388 阅读 · 0 评论 -
其实你不懂:Android之TextView 不常用的几个方法
转载:https://www.jianshu.com/p/4e7d7a08fc7e这篇文章记录一下TextView中不常用的几个方法,直接上动图:TextView不常用方法效果.gifsetTextIsSelectable(boolean selectable):setTextIsSelectable(boolean selectable)对应xml中的android:textIsSelectab...原创 2018-04-17 23:49:04 · 432 阅读 · 0 评论 -
Android中moveTo、lineTo、quadTo、cubicTo、arcTo详解(实例)
转载:https://segmentfault.com/a/11900000007211271、Why最近在写android画图经常用到这几个什么什么To,一开始还真不知道cubicTo这个方法,更不用说能不能分清楚它们了,所以特此来做个小笔记,记录下moveTo、lineTo、quadTo、cubicTo、arcTo的作用,在自定义view的时候经常用到。接下来也会分享下这几天写的几个东西。相信...原创 2018-04-12 17:02:48 · 218 阅读 · 0 评论 -
八一八那些px、pt、ppi、dpi、dp、sp之间的关系
做了几个移动端的项目之后,深感移动端尺寸换算的必要性,在此做个总结。先介绍下各自的定义:px:pixel,像素,电子屏幕上组成一幅图画或照片的最基本单元pt: point,点,印刷行业常用单位,等于1/72英寸ppi: pixel per inch,每英寸像素数,该值越高,则屏幕越细腻dpi: dot per inch,每英寸多少点,该值越高,则图片越细腻dp: dip,Density-indep...原创 2018-04-26 09:14:28 · 647 阅读 · 0 评论 -
Android 系统字体
转载:https://blog.csdn.net/rjdeng/article/details/485453130、对Android字库的认识:Android系统对字体的载入和Linux桌面很像,有一个Priority Order(优先级顺序)的,当然先是西方字符,然后是一些符号字体(包括emoji字体),再就是中日韩字符(DroidSansFallback.ttf包含了全部CJK的字符,但是日文...原创 2018-04-26 14:47:51 · 7389 阅读 · 0 评论 -
Google 官方Android MVP架构
Google官方MVP架构例子。源码见: https://github.com/googlesamples/android-architecture 官方给出了四种MVP架构模式:1、todo-mvp:MVP基础架构2、todo-mvp-loaders:基于MVP基础架构,获取数据部分使用了Loaders架构3、todo-mvp-databinding:基于MVP基础架构,使用了数据绑定组件4、t...原创 2018-05-18 11:28:58 · 702 阅读 · 0 评论 -
Android7.0以上安装时出现“解析软件包错误”
工作中,vivoX9s,版本号:7.1.2,在Android studio上调试软件出现“解析软件包错误”,不管是项目工程还是自己新建的hellowrold工程都会出现这个问题,如图:eclipse:Android studio:问题解决办法:1.eclipse:将图中第一个选项 不勾选2.Android studio:将图中第一个选项 不勾选...原创 2018-05-25 10:37:34 · 20873 阅读 · 6 评论 -
Android Bitmap 常见的几个操作:缩放,裁剪,旋转,偏移
转载:https://www.cnblogs.com/rustfisher/p/5071494.htmlAndroid Bitmap 常见的几个操作:缩放,裁剪,旋转,偏移Android Bitmap 相关操作常见的几个操作:缩放,裁剪,旋转,偏移 很多操作需要 Matrix 来支持;Matrix 通过矩阵来处理位图,计算出各个像素点的位置,从而把bitmap显示出来。 matrix里有一个...原创 2018-05-15 09:56:26 · 702 阅读 · 0 评论 -
setDataAndType(data,type)
//{后缀名,MIME类型} {".3gp", "video/3gpp"}, {".apk", "application/vnd.Android.package-archive"}, {".asf", "video/x-ms-asf"}, {".avi",原创 2018-05-25 16:21:23 · 666 阅读 · 0 评论 -
JNI 之二 :java & c/c++ 相互通信及调用
转载:https://www.cnblogs.com/yaozhongxiao/archive/2012/03/07/2383085.htmlJNI 之二 :java & c/c++ 相互通信及调用 JNI是Java Native Interface的缩写,JNI是一种机制,有了它就可以在java程序中调用其他native代码,或者使native代码调用java层的代码。...原创 2018-03-27 18:29:22 · 231 阅读 · 0 评论 -
Android开发性能优化总结
转载:http://blog.csdn.net/gs12software/article/details/51173392安卓开发应用首先要讲究良好的用户体验,如果一款软件卡顿现象严重,不流畅,经常崩溃,那么将给用户带来极不良好的体验,从而损失用户。 在实际开发和学习中,我总结了一下关于安卓性能的优化,供大家参考交流。应用程序的性能问题体现在很多方面, 比如第一次启动速度慢,或者进入某一界面速度慢...转载 2018-03-06 15:11:50 · 139 阅读 · 0 评论 -
HashMap实现原理及源码分析
转载:http://www.cnblogs.com/chengxiao/p/6059914.html哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比如memcached)的核心其实就是在内存中维护一张大的哈希表,而HashMap的实现原理也常常出现在各类的面试题中,重要性可见一斑。本文会对java集合框架中的对应实现HashMap的实现原理进行...转载 2018-03-08 20:11:57 · 102 阅读 · 0 评论 -
什么情况导致内存泄漏
1.单例造成的内存泄漏由于单例的静态特性使得其生命周期和应用的生命周期一样长,如果一个对象已经不再需要使用了,而单例对象还持有该对象的引用,就会使得该对象不能被正常回收,从而导致了内存泄漏。2.非静态内部类创建静态实例造成的内存泄漏例如,有时候我们可能会在启动频繁的Activity中,为了避免重复创建相同的数据资源,可能会出现如下写法:public class MainActivity exten...原创 2018-03-09 16:55:15 · 146 阅读 · 0 评论