自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 资源 (1)
  • 问答 (10)
  • 收藏
  • 关注

原创 libGDX:灯光效果实现一(实现一个点光源)

国内的libGDX文章很少,特别是libGDX实现灯光效果,所以就开始总结灯光效果的实现绿色的框 是为了方便看到Body位置,使用Box2DDebugRenderer渲染的工欲善其事,必先利其器,工具集合。

2023-03-05 22:24:52 862

原创 记一次Binder内存不足导致的应用被杀

可以看到BtGatt也在打印错误,这是BLE蓝牙的相关打印,结果压测场景是按住遥控器说话(这个过程会通过遥控器收音,发送语音数据给设备),所以确定是这个操作引发。这个内存不足的猜想,要么是每次传递数据过大,要么就段时间传递的太多了,导致这时候广播通知,跨进程发现共享内存不足,kill APP,通过Log发现parcel size = 160字节,应该不是太大导致,于是开始查看传递次数,发现出问题这次,收音持续了10分钟多,远超过脚本设定的每20S,收音2S的情况。通过过滤这两个关键字,发现是第二个原因。

2023-02-24 19:38:28 1186

原创 View,ViewRootImpl和WindowManagerService之间的关系

Android的基本布局控件,结构是树装,ViewGroup实现了ViewParent接口,每个View内部保留一个ViewParent变量,代表他的父节点。

2023-02-09 16:47:43 419

原创 LibGDX开发常见问题

LibGDX开发过程遇到的常见问题

2022-12-30 11:01:26 1219

原创 ARouter源码简析系列二:navigation过程

ARouter的navigation过程1.postcard制作过程2.完善postcard信息2.1 @Route生成的映射类(方便举例说明)2.2 完善postcard过程 稍长 忍一下3.导航处理流程4.不同类型路由匹配处理流程总结之前讲了初始化流程,现在接着看navigation过程,先来一个使用示例 后面好举例@Route(path = "/image/imageActivity")class MainActivity : AppCompatActivity() { @Au

2021-08-26 15:14:43 2472

原创 ARouter源码简析一:初始化流程

Arouter简单使用@Route(path = "/image/imageActivity")class MainActivity : AppCompatActivity() { @Autowired(name = "tip") @JvmField var mTip: String? = "" override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInsta.

2021-08-26 15:13:25 310

原创 Kotlin中的crossinline

这一篇看下crossinline,同样他也要在inline函数中才能使用先来看下这样2种情况情况1:fun mainInline2(func1: () -> Unit) { func1()}override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main)

2020-10-09 17:21:52 3003

原创 Kotlin中的noinline

上一篇介绍了inline,这篇介绍下noinline,noinline需要在inline函数中才能用1.noinline的作用区部取消内联作用,举个例子class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.

2020-10-09 16:32:23 642

原创 Kotlin中的inline作用

1.inline的作用1.1 可以将函数体直接复制到函数调用处package com.example.kotlinsyntax._inlineclass InlineClass { //inline标记的函数 inline fun doInline() { print("inline") } //普通函数 fun doNoInline() { print("noInline") } //调用处函数 fun test

2020-10-09 11:19:45 3820

原创 Android AppLink使用经历

项目中需要实现分享功能,提前剧透,国内环境GG,验证App link不翻墙会失败,退化到deep link,还是要弹框选择处理程序1.实现效果有安装本app的,跳转到app,没有安装app的跳转到浏览器的官网,网上有自己定义scheme部分,让浏览器无法直接处理这个链接,而app定义这个协议后可以直接跳转到app,但是有一个问题,如果我需要有app跳转到app,无app跳转到官网,这个就不能实现了,应为自定义的scheme就无法被浏览器处理2.实现方式Android给我们提供了一个工具来生成这个链接

2020-05-25 17:31:45 3858

原创 Android: 记一个关于获取输入法弹起高度的新方式

很久没写博客,最近项目遇到需要获取输入法高度将EditText上移的效果,实现方式本来有几种1.设置softInputMode WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN但是这样布局中如果有RecyclerView,或者ScrollView的时候,整个布局会向上滚动,但是我不想让他滚动,执行编辑框上移2.往上有一个SoftSoftInputKeyBoardUtil类,原理是通过获取可见高度来计算键盘高度,但是测试发现有些手机获取到的高度是不正确的

2020-05-22 22:32:16 2016

原创 Kotlin开发jni程序 二.C调用java/kotlin方法和属性

首先我们声明kotlin的几个方法和属性,如下package com.example.firstjniimport android.util.Logobject NDKUtil{ val name = "djfklsd" external fun updateArray(array: IntArray) external fun updateArrayByPoin...

2019-08-08 10:17:27 1896

原创 Kotlin开发jni程序 一.头文件声明

1.和java的不同本地方法声明不同//java声明方式public static native void testJNI();//kotlin声明方式external fun testJNI()生成c头文件方式不同JAVA在AS中java声明的native方法会直接提示未声明头文件,直接Alt+Enter就能生成,也可以点击下方的Terminal通过命令生成//...

2019-08-08 09:19:12 1571

原创 串联整个音视频录制流程,完成音视频的采集、编码、封包成 mp4 输出

音频采集:AudioRecord视频采集:Camera预览回调YUV数据编码:MediaCodec合成封包MP4:MediaMuxer首先确定几条线程处理任务1.audioThread 音频采集和编码2.videoThread 视频编码3.muxerThread 合成示例代码:Kotlin所有详细代码已上传github,后面会给出地址,示例Activity是Camera1Pr...

2019-06-04 11:22:09 3335 3

原创 MediaCodec完成AAC文件硬解,5.0异步,AudioTrack播放,MediaExtractor获取音频

MediaCodec API,完成音频 AAC 硬编,5.0异步处理,AudioRecord录音上一篇写了硬编,这一篇写下硬解,其实和硬编逻辑一样,代码还是Kotlin取录音和编码都设置在子线程采取的是边取录音边解码边播放6.0注意动态权限问题示例使用的5.0以上的API编解码器的MediaFormat必要填写的信息MediaExtractor获取的数据一般不需要自己填1.配置M...

2019-05-23 18:11:02 2927

原创 MediaCodec API,完成音频 AAC 硬编,5.0异步处理,AudioRecord录音

AAC硬件编码文章有几篇,但是都是同步实现,这里采用异步实现,代码Kotlin。虽然代码是kotlin写的,但是思路上面的按照java能复制出来最后我会把代码上传到github,可以查看完整过程,为了方便查看,所以代码都写在Activity中录音和编码都设置在子线程采取的是边录制边编码边写入文件上面是官方的一张原理图,我就先说下基本原理MediaCodec给我们提供了一组Input...

2019-05-23 11:14:53 1156 1

原创 Android平台MediaExtractor和MediaMuxer学习,解析和封装MP4

本文代码示例采用的Kotlin语法,但是没什么高级特性MediaExtractor:视频文件的提取器,能将视频和音频分离MediaMuxer:音视频文件合成器,能将提取到的视频和音频合成新的视频MediaFormat :提取器获取到的媒体格式类,保存了获取到的媒体的信息(媒体类型,帧率等)1.设置需要权限一.如果是本地文件,会涉及到读取和写入,需要在Manifest配置 &lt...

2019-05-16 17:11:23 1534

原创 对于Matrix中PreXXX和PostXXX的使用时机的理解

在自定义View的时候我们在绘制bitmap时候canvas.drawBitmap(bitmap,Matrix,Paint)用到了Matrix,也就是矩阵,网上有图,说明了这个矩阵影响的方式1.Matrix矩阵各数值影响第一行影响X轴,分别是scale缩放,skew错切,trans平移第二行影响Y轴,与第一行相同,作用于图形就是矩阵相乘这是影响的旋转和位移,还有一张是说明错切和缩放...

2019-04-24 15:37:19 2233

原创 Android中 Canvas绘制图形,有时候不显示的一个可能原因

有时候,绘制图形,参数都设置的对,但是真机上就是不显示,很有可能就是需要我们关闭硬件加速,有三种方式1.在Manifest的application中设置 <application android:name=".MyApplication" android:hardwareAccelerated="false"> </appl...

2019-04-11 16:37:38 6017 1

原创 Android中关于画布Skew,斜切操作的计算方式

Android中对于画布有多种操作,translate,rotate,scale,skew,前三个还比较好理解,就最后的斜切比较抽象,网上有介绍说是讲坐标轴旋转,但是寻找目标坐标还是麻烦,他的计算方式可以理解为如果一个点p(x,y),对于skew(),他最终的坐标就会经过下面的转换,k为skew的参数比如,我画一个矩形,其中一个顶点是(200,300),skew(1,0),对于x斜切那么k...

2019-04-10 17:41:59 1444 2

原创 记关于处理Handler内存泄漏犯的一个错误

说到内存泄漏,可能首先就想到创建非静态Handler内部类,导致Handler持有外部Activity引用class MyHandler extends Handler{ @Override public void handleMessage(Message msg) { }}网上有很多说处理方法有两种1.使用静态内部类,也就是static class MyHandler ...

2019-03-21 11:01:59 292

翻译 Gradle学习笔记--创建构建变体

1.构建类型(Build types)Android Studio生成的标准buildTypes块android { buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile ('proguard-...

2019-03-05 09:27:06 573

翻译 Gralde学习笔记--提升构建速度和项目优化

这一节会介绍之前没提到的构建技巧和提示,包括减少apk大小加快构建速度忽略Lint检查使用Ant工具改进app部署1.减小apk文件大小(Reducing APK file size)1.1 ProGuardProGuard是一个java工具,不仅可以收缩代码,还能优化,混淆代码和编译阶段验证代码,他会查找所有并删除未使用的代码,也会重命名类和属性,让app难以被反编译。and...

2019-03-04 16:59:36 417

原创 Gradle中自定义String类型属性注意点

在build.gradle中有时候我们要的debug和release版本中获取定义统一变量的不同值,在定义String类型的时候要注意用“\”\“”,两个双引号和右斜杠,例如BuildConfigField "String", "key", "\"value\""如果直接一个双引号,生成的BuildConfig会是这样public static final String key = valu...

2018-10-23 17:29:07 2866

原创 RecyclerView学习--自定义ItemDecoration

RecyclerView无法像ListView直接设置分割线,但是提供了ItemDecoration类来设置,有一个实现类DividerItemDecoration提供了一个简单的分隔线,如果想自定义可以继承ItemDecoration,参考DividerItemDecoration来写。1.主要实现方法 //绘制自定义的分隔线,这个绘制和item的View属于同一位面,分隔线太大会阻挡视...

2018-10-10 17:07:26 795

原创 类加载的大概流程和特点

1.类加载的大概过程如果类未被加载到内存,会经过加载,连接,初始化过程。提供java.lang.Class对象2.类的连接(1) 验证: 验证类是否有正确的内部结构,防止有人估计加入错误信息 (2) 准备: 为类变量分配内存,并设置默认值 (3) 解析: 将符号引用转化为直接引用(final变量直接当作宏变量)3.类初始化的时机1.创建类的实例,用new 或 反射 或 ...

2018-09-07 09:52:57 280

原创 Android消息机制-Handler再学习

Handler消息机制,主要由4个类构成 1.Handler 发送和处理消息 2.Message 消息的载体 3.MessageQueue 存储消息的队列,实际他更像是单链表 4.Looper 消息循环,主要是取出MessageQueue中的Message进行分发几者之间的关系如图 下文就按照执行的流程,分析一下执行过程中具体的步骤和执行的操作...

2018-08-16 17:09:49 201

原创 线程池学习及相对应的sdk中注释翻译

Android中有时候会用到很多线程去处理问题,但是开启多条线程很不明智,会有很大开销,这时候就可以用到线程池。一.线程池的好处 1.服用线程,避免多次创建和关闭线程产生的开销 2.控制最大线程并发数量二.Android中线程池的创建 在Android中可以利用Executors的工厂方法来创建线程池,但其实都是调用了 new Thr...

2018-08-08 15:50:56 271

原创 ListView中嵌套EditText造成ListView的子Item点击无响应问题简要分析

继上一篇处理ListView嵌套EditText出现的问题,有一个问题EditText使ListView的setOnItemClickListener回调失效,最新看了源码,得出了一些结论,如有错误欢迎指出,不需要看完整代码,看标记的最关键的就行。1.我们来一步步看这个回调过程 首先我们看到,这个回调发生在ListView的父类AdapterView的performItemCli...

2018-06-05 18:07:25 1219

原创 关于ListView中嵌套EditText,焦点及其他点击问题

之前项目做过这个类似的UI,处理起来也很麻烦,要求的效果是 1.EditText点击出现输入法,游标显示在最后,效果如图 2.编辑完内容后,收起键盘保存修改内容。ListView的Item的XML文件&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;amp;gt;&amp;amp;lt

2018-06-05 17:25:54 2376

原创 Android跨进程启动Service流程及常见问题

最近学习Android跨进程通信,使用到AIDL,参考着开发艺术探索,但是实践过程中也遇到一些问题,特记下流程和常见问题,使用工具Android Studio1.服务端编写AIDL文件 点击new,创建AIDL接口文件 生成了IMyAidlInterface.aidl文件,文件名是可以自己修改的package com.example.android_7_test;//...

2018-05-09 16:44:31 8333

原创 Android7.0及以上下载后自动安装无法运行

在最近的项目中,用到了下载新版然后自动安装更新的功能,但是发现在7.0手机上无法正常安装,查阅资料,发现在android 7.0的行为变更中有说明,文件共享发生了变化(自动安装就是系统的安装程序调用本项目的文件,等同于在跨应用访问数据)对于面向 Android 7.0 的应用,Android 框架执行的 StrictMode API 政策禁止在您的应用外部公开 file:// URI。如...

2018-03-22 17:27:11 2215

原创 EditText无法显示跳动的游标

最近项目,登录界面输入发现EditText控件输入时候没有游标,找到一个解决方法,记录一下在Xml文件中设置EditText属性 android:cursorVisible=”true” android:textCursorDrawable=”@drawable/cursor_drawable”cursor_drawable是一个shape文件,定制了游

2018-02-06 10:03:13 588

原创 Java学习经历回顾----泛型

泛型在JDK1.5被加入(也可以叫做参数化类型),使JAVA中的集合(List ,set, map…)能够记住被添加的元素的类型,但不是只有java中的集合才能用泛型。接下来通过介绍泛型被引入的意义和作用以及他的使用场景来一步步回顾泛型。 1.泛型的写法List<String> list = new ArrayList<String>();在类的后面跟上<>,里面写上类型参数,这就是泛型的一般写法

2017-10-21 18:44:01 279

原创 Android的几种SdkVersion(complie target min)

之前就看过一次关于compileSdkVersion,minSdkVersion,targetSdkVersion的帖子,但是对于第一个和第三个当时也没太懂,最近又找了些资料,发现一篇不错的博客,最后放上地址。于是将自己的理解赶紧写下来。 1.compileSdkVersion 首先,这个东西发挥着用是在我们的项目编译期间,它决定了用那个版本的SDK去编译我们的项目,他会去检查代

2017-09-27 15:16:21 629

原创 Activity生命周期再探

近期看到讲述Activity生命周期的帖子,秉着复习的精神,再来亲自探索下activity的生命周期,这次不只是看正常的启动和关闭流程,而是考虑更多其他的操作,比如锁屏,旋转等。测试平台红米Note4,系统版本Android6.0,国际惯例,先来一张经典图 一般的流程是这样,启动一个activity onCreate->onStart()->onResume,从准备视图到用户可见再到可获得焦

2017-09-25 15:14:49 409

原创 数据结构和算法的学习-排序-冒泡排序

在数据结构课程涉及到排序章节就基本不会少了冒泡排序,废话少说,开始冒泡排序学习。 1.冒泡排序的定义。 之所以叫冒泡排序,是因为水中的气泡一定是按照下面小,上面大排列的,形成一个有序的序列(书上看的,类比还是很形象的)。 2.冒泡排序的过程(这里默认从小到大排列) 从左边开始,相邻的两个数字进行对比,后一个比前一个大就不做操作,比前一个小就交换两个数字的位置,让较大的

2017-09-16 20:06:57 365

原创 android无法找到连接的设备 ADB占用解决

在最近的android项目开发过程中,使用的IDE是android studio,有时候连接上手机想安装调试android程序,明明连接了手机,却出现这样的情况 什么设备都没找到? 1.这时候有2中情况 ,但是都是一个问题 adb端口很可能被占用了,如果你有下载360手机助手,有80%是被他影响,只需要到任务管理器关闭360手机助手 2.如果关闭了360手机助手还不行或者没有装过360就需

2017-07-27 19:29:10 1521

转载 ImageButton与ImageView的区别

第一次写博客,不知从何写起,就从最近项目中遇到的一些细节问题说起吧!项目中使用ImageButton,但是给图片设置具体尺寸(width,height)之后,发现还是原来的大小,为了保持图片的原始像素,并没有给ImageButton设置ScaleType,后来将ImageButton换成ImageView之后就ok了(并不是唯一解决方案)于是,想搞明白ImageView和ImageButton之间到

2017-07-11 15:39:48 1922

转载 有关Android View 绘制流程

View绘制流程调用链图 记清楚函数调用的顺序才能准确地进行调用。根据调用链,可将整个绘制过程分为三部分:Measure - Layout - DrawMeasure 过程测量过程由上至下,在measure过程的最后,每个视图将存储自己的尺寸大小和测量规格。measure过程会为一个View及其所有子节点的mMeasureWidth和mMeasuredHeight变量赋值, 该值可以通过get

2017-07-03 09:18:00 228

android oad升级源码包

android 蓝牙oad升级的官方源码包,让我转成了android studio项目,不能用告诉我

2017-06-07

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

TA关注的人

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