Android
新助锦鹏
这个作者很懒,什么都没留下…
展开
-
RxJava学习(一)之简单使用
一、简介RxJava是一个响应式的编程,基于观察者模式二、简单使用1、无背压 private fun initListener() { mRxJavaRecycleTest.onClick { Log.i(TAG,"==mRxJavaRecycleTest==") Observable.create<String> { emitter-> emitte原创 2020-05-18 17:42:11 · 270 阅读 · 0 评论 -
Android基础之Binder
一、IPC进程间通信。多个进程间的数据交互进程一般是指一个可执行的单元,在PC或移动设备上指一个程序或应用。线程是CPU最小的调度单元,是一种有限的系统资源一个进程中可以包含多个线程如果将一个耗时操作放在主线程,就会造成ANRAndroid中进行进程间通信最特色的就是使用Binder,同样也可以使用Socket进行进程间通信Android可以通过给四大组件指定android:proc...原创 2019-07-16 10:42:29 · 143 阅读 · 0 评论 -
Android基础之RemoteViews
一、简介RemoteViews是一种远程View,可以在其他进程中显示,为了能够更新它的界面,RemoteViews提供了一组基础操作用于跨进程更新它的界面。RemoteViews常用在通知和桌面小组件中。二、使用RemoteViews在通知栏上的应用1、简单使用<1> 创建NotificationManager对象NotificationManager manager ...原创 2019-07-15 19:43:05 · 659 阅读 · 0 评论 -
Android基础之Notification
一、定义是一种具有全局效果的通知,它展示在屏幕的顶端,首先会表现为一个图标的形式,当用户向下滑动的时候,展示出通知具体的内容。二、使用Android 3.0 (API level 11)之前,使用new Notification()方式创建通知。Android 3.0开始弃用new Notification()方式,改用Notification.Builder()来创建通知。为兼容API...原创 2019-07-15 19:19:45 · 192 阅读 · 0 评论 -
Android异常与性能优化之内存管理与泄漏
一、内存管理机制概述1、分配机制 操作系统为每一个进程分配一个合理的内存2、回收机制 系统在内存不足的情况下会合理的回收而再分配的机制二、Android内存管理机制1、分配机制 Android为每个进程分配一个弹性的内存2、回收机制 根据进程的优先级来杀死进程三、内存管理机制的特点1、占用更少的内存2、在合适的时候,合理的释放系统资源3、内存紧张的时候,能释放掉大部分...原创 2019-07-15 19:04:36 · 159 阅读 · 0 评论 -
Android异常与性能优化之冷启动优化
一、冷启动的定义1、冷启动的定义冷启动就是在启动应用前,系统中没有该应用的任何进程信息。比如第一次启动2、冷启动与热启动的区别热启动就是用户按home键退出应用然后马上又重新启动应用区别:<1> 冷启动在启动时没有该应用的进程信息,这时候启动系统就会为该应用创建新的进程,而热启动的进程是保留在后台的<2> 冷启动会创建新的进程所以先会创建Applicatio...原创 2019-07-15 18:59:45 · 101 阅读 · 0 评论 -
Android异常与性能优化之UI卡顿
一、UI卡顿原理 60fps -> 16ms 渲染 太多耗时操作 overdraw 过度绘制 布局中出现大量重复、嵌套二、卡顿原因 1、人为在UI线程中做轻微耗时操作,导致UI线程卡顿 2、布局Llayout过于复杂,无法16ms内完成渲染 3、同一时间动画执行的次数过多,导致CPU或GPU负载过重 4、View过度绘制,导致某些像素在同一帧时间内被绘制多次,...原创 2019-07-15 18:56:22 · 440 阅读 · 0 评论 -
Android异常与性能优化之crash异常处理
Android应用总是会不可避免的发生crash,也就是崩溃。Android提供了处理这类问题的方法,当crash发生的时候,系统就会回调UncaughtExceptionHandler的uncaughtException方法。在uncaughtException方法中就可以获取到异常信息,可以选择将异常信息存储到sd卡,然后在合适的时候将其上传到服务器。实现方法:<1> 创建一个...原创 2019-07-15 18:54:44 · 298 阅读 · 0 评论 -
Android异常与性能优化之oom异常
一、oom定义 当前占用内存加上申请的内存资源超过了虚拟机的最大内存限制,就会抛出Out Of Memory 二、一些容易混淆的概念内存溢出(oom) / 内存抖动 / 内存泄漏内存抖动是指在短时间内有大量的对象被创建或者被回收的现象。内存泄漏是指某一段内存在程序里功能上已经不需要了,但是垃圾回收机制回收内存时检测那段内存还是被需要的,不能被回收,这种在程序中在没有使用的但是又不能被回...原创 2019-07-15 18:50:10 · 295 阅读 · 0 评论 -
Android异常与性能优化之anr异常
一、什么是ANRApplication Not Responding默认Activity最长执行时间5s 超过就会ANR 在广播接受者中最长是10s在主线程中做了耗时操作二、造成ANR的主要原因主线程耗时计算操作主线程被IO操作阻塞三、解决ANR在子线程中做耗时操作Activity的onCreate和onResume中避免做耗时操作...原创 2019-07-15 18:46:52 · 309 阅读 · 0 评论 -
Android学习之webview常见问题
一、webview常见的一些坑1、webview在布局文件中的使用,webview写在其他容器中。webview的销毁:先把父容器中的webview移除,再调用webview的ondestory2、jsbridge3、webviewClient.onPageFinished由于页面跳转的原因,会回调多次4、后台耗电。会开启一些线程,处理不当导致线程一直在后台运行。在退出时需要彻底销毁web...原创 2019-07-15 18:42:15 · 260 阅读 · 0 评论 -
Android学习之Matrix
一、Matrix基础知识Matrix是一个3x3的矩阵,主要用于缩放、平移、旋转等操作其中:MSCALE_X和MSCALE_Y控制缩放MSKEW_X 和MSKEW_Y 控制错切MTRANS_X和MTRANS_Y控制平移 MSCALE_X、MSCALE_Y和MSKEW_X、MSKEW_Y控制旋转MPERSP用于处理透视(不常用)由此可以看出Matrix的对图像的处理可分为四类基本变...原创 2019-07-15 18:36:08 · 525 阅读 · 0 评论 -
Android开发之编译FFMPEG为动态库
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec接下来介绍一下分别在Windows和Linux下编译出android需要的动态库文件一、windows下编译1、准备工具MinGWAndroid NDK r14b wind...原创 2019-07-15 17:40:29 · 383 阅读 · 0 评论 -
Android学习之NDK开发
JNIJava Native Interface(Java 本地编程接口),一套编程规范.提供了若干的 API 实现了 Java 和其他语言的通信(主要是 C/C++)。Java 可以通过 JNI 调用本地的 C/C++ 代码,本地的 C/C++ 代码也可以调用 java 代码。Java 通过 C/C++ 使用本地的代码的一个关键性原因在于 C/C++ 代码的高效性。NDKNative ...原创 2019-07-15 17:27:55 · 297 阅读 · 0 评论 -
Android线程交互之IntentService
一、简介IntentService是一种特殊的Service,它可以进行一些后台的耗时操作,在任务执行结束后会自动停止。由于它是一种服务,所以它的优先级要高于普通的线程,不容易被系统杀死。内部封装了HandlerThread 和 Handler二,使用1、创建IntentService的子类,实现onHandleIntent(@Nullable Intent intent)方法和构造方法...原创 2019-07-15 12:22:26 · 268 阅读 · 0 评论 -
Android线程交互之HandlerThread
一、简介如果想要在子线程中使用handler,那么就需要在子线程中手动调用Looper.prepare()和loop方法。HandlerThread就直接提供给了我们这种形式。内部直接封装了Thread + looper的形式 可以实现任意线程间的通信。典型的案例IntentService本质是一个Thread内部有自己的Looper对象通过Looper创建handler,它的hand...原创 2019-07-15 12:16:04 · 187 阅读 · 0 评论 -
Android开发线程间的交互之Activity.runOnUIThread和view.post
一、简介Activity.runOnUIThread 和 view.post是Android提供的更新UI的方法,内部也是使用handler来处理消息的传递的二、使用new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(5000) ...原创 2019-07-15 10:00:02 · 524 阅读 · 0 评论 -
Android基础之广播
一、广播的定义四大组件之一在Android中,Broadcast是一种广泛运用的在应用程序之间传递信息的机制,发送广播使用Intent,intent可以携带数据有两个角色,广播的发送者和广播的接受者二、广播的使用场景<1>在Android不同组件之间的通信(应用内/不同应用之间)<2>多线程通信<3>与 Android 系统在特定情况下的通信 如:...原创 2019-07-16 10:55:21 · 204 阅读 · 0 评论 -
Android基础之fragment
一、fragment与Activity生命周期结合说明fragment f, Activity a:创建:f.onAttach()->f.onCreate->f.onCreateView()->f.onViewCreated()---->a.onCreate()->f.onActivityCreated()—>a.onStart()->f.onStar...原创 2019-07-16 11:05:18 · 179 阅读 · 0 评论 -
Android8.0之应用图标适配
一、简介参考Android应用图标微技巧,8.0系统中应用图标的适配文章当设置target=26及以上,在8.0不做适配,就会显示成一个圆圈包围着logo,不好看。比如:从Android 8.0系统开始,应用程序的图标被分为了两层:前景层和背景层。在设计应用图标的时候,需要将前景和背景部分分离,前景用来展示应用图标的Logo,背景用来衬托应用图标的Logo。二、适配Android St...原创 2019-09-12 15:59:16 · 471 阅读 · 0 评论 -
Android开源框架之glide (三)
glide的缓存处理一、内存缓存在之前的源码分析Engine的load()方法时候,会首先从两个缓存当中加载数据从弱引用中获取缓存数据和从内存缓存中获取缓存数据。public <R> LoadStatus load(/*各种参数*/) { // 根据请求参数得到缓存的键 EngineKey key = keyFactory.buildKey(model, sign...原创 2019-07-17 18:56:24 · 143 阅读 · 0 评论 -
Android开源框架之glide (二)
源码解析glide的使用就是:Glide.with(this) .load(IMG_PATH) .into(imageView);1、with()方法@NonNullpublic static RequestManager with(@NonNull Context context) { return getRetriever(context).get(contex...原创 2019-07-17 18:47:36 · 844 阅读 · 0 评论 -
Android开源框架之glide (一)
一、简介Glide是一个加载图片的库,作者是bumptech。是google推荐使用的图片加载库。特性:1、可以从多个源加载图片,如:网路,本地,Uri等。2、可以加载gif图片。Picasso不能加载git图片3、生命周期和Activity/Fragment一致。3、默认Bitmap格式是PREFER_ARGB_8888,Glide4.0之前是PREFER_RGB_565二、使用...原创 2019-07-17 15:57:19 · 908 阅读 · 0 评论 -
Android开源框架之Retrofit (二)
源码解析Retrofit通过使用大量的设计模式进行功能模块的解耦。Retrofit将各个功能模块进行了封装,只暴露了Retrofit核心类,只管配置Retrofit,然后做请求。剩下的事情就跟上层无关了,只需要等待回调,这就是外观模式的运用。1、Retrofit实例是使用建造者模式通过内部Builder类进行创建的。public static final class Builder { ...原创 2019-07-17 15:44:18 · 354 阅读 · 0 评论 -
Android开源框架之Retrofit (一)
一、简介Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。严格地说,Retrofit2并不是一个网络请求交易框架,它只是对网络请求框架的封装。底层把实现交给了okhttp3,由okhttp3做真正的网络请求。Retrofit2优势在于,它使用了大量的设计模式将功能模块解耦,这样做的好处在于可以让流程更加清晰,可塑性更强。支持各种格式转换以及RxJava。二、使用...原创 2019-07-17 09:51:21 · 168 阅读 · 0 评论 -
Android开源框架之EventBus(二)
理解了EventBus的源码之后,接下来就仿照实现一个自己的EventBus一、创建一个TestThreadModepublic enum TestThreadMode { MAIN, BACKGROUND}二、创建一个TestSubscribe注解类@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUN...原创 2019-07-16 18:50:30 · 111 阅读 · 0 评论 -
Android开源框架之EventBus(一)
一、简介EvenetBus是一种发布-订阅事件总线.代码简洁,开销小,并很好的实现了发送者和接收者的解耦.(是一种观察者模式)二、用到的设计模式1、单例模式:一个类有且仅有一个实例,并且自行实例化向整个系统提供。2、建造者模式:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。使用Builder3、观察者模式:定义了对象之间的一对多依赖,当一个对象改变状态时,它...原创 2019-07-16 17:51:20 · 206 阅读 · 0 评论 -
Android开源框架之Volley(二)
源码分析1、入口Volley.newRequestQueue(context),代码如下:public static RequestQueue newRequestQueue(Context context) { return newRequestQueue(context, null);}这个方法仅仅只有一行代码,只是调用了newRequestQueue()的方法重载,并...原创 2019-07-16 16:54:29 · 195 阅读 · 0 评论 -
Android开源框架之Volley(一)
一、简介Volley是Google在2003年的I/O大会上推出的通信框架。适用于数据量小、频率高的请求。不适合大数据加载二、volley的使用1、创建RequestQueue对象 RequestQueue queue = Volley.newRequestQueue(context);2、创建一个request对象,系统提供了几种StringRquest、JsonRequest...原创 2019-07-16 16:08:12 · 339 阅读 · 0 评论 -
Android学习之view滑动冲突
常见的滑动冲突的场景一般可分为三种:场景一、外部滑动方向与内部滑动方向不一致场景二、外部滑动方向与内部滑动方向一致场景三、上面两种情况的嵌套第一种场景:由于外部与内部的滑动方向不一致,那么可以根据当前滑动方向,水平还是垂直来判断这个事件到底该交给谁来处理。至于如何获得滑动方向,可以得到滑动过程中的两个点的坐标。一般情况下根据水平和竖直方向滑动的距离差就可以判断方向,当然也可以根...原创 2019-07-16 15:51:27 · 121 阅读 · 0 评论 -
Android学习之view事件分发
一、view的基础知识:1、view的坐标<1> 在onTouchEvent中event.getX():表示的是触摸点距离view左边界的距离event.getY():表示的是触摸点距离view上边界的距离event.getRawX():表示的是触摸点距离屏幕左边界的距离event.getRawY(): 表示的是触摸点距离屏幕上边界的距离<2> 在view中...原创 2019-07-16 15:46:48 · 196 阅读 · 0 评论 -
Android学习之view的绘制
一、view绘制流程view树 递归measure -> layout -> drawViewRootImpl是windowManager和DecorView的纽带View的绘制是从ViewRootImpl的performTranslate方法开始的,经过measure、layout、draw三个过程才绘制出来的。measure用来测量view的宽高,layout是用来确定v...原创 2019-07-16 15:19:22 · 120 阅读 · 0 评论 -
Android学习之ListView缓存机制分析
一、ListView的继承结构ListView是直接继承自的AbsListView,而AbsListView有两个子实现类,一个是ListView,另一个就是GridView,因此ListView和GridView在工作原理和实现上都是有很多共同点的。AbsListView又继承自AdapterView,AdapterView继承自ViewGroup二、Adapter的作用适配器List...原创 2019-07-16 12:33:57 · 356 阅读 · 0 评论 -
Android基础之Activity
一、activity生命周期1、activity的4中状态running/paused/stoped/killed2、activity的生命周期//--------------单个A启动---------------------A启动: onCreate---->onStart---->onResume 处于running状态点击HOME键: ...原创 2019-07-16 11:44:09 · 154 阅读 · 0 评论 -
Android基础之service
一、service 简述后台开启 程序退出后仍然可以人为进行操作运行是一种可以在后台执行长时间运行操作而没有用户界面的应用组件运行在UI线程不能做耗时操作二、service与Thread区别它们之间没有任何关系Thread 是运行相对独立 程序执行的最小单元 可以通过开启一个子线程来做耗时操作service运行依托于主线程 不能做耗时操作 否则会报ANR三、service启动方...原创 2019-07-16 11:23:18 · 141 阅读 · 0 评论 -
Android学习之ThreadLocal
一、简介ThreadLocal 是一个线程内部的数据存储类,通过它可以在 指定的线程中存储数据,数据存储以后,只有在指定线程中可以获取到存储的数据,对于其他线程来说则无法获取到数据。Android源码的Lopper、ActivityThread以及AMS、EventBus中都用到了ThreadLocal。二、使用//定义一个ThreadLocalThreadLocal<Boolean...原创 2019-07-15 09:20:51 · 115 阅读 · 0 评论 -
Android图片的高效加载与缓存策略
一、简介Bitmap在Android中指的是一张图片。BitmapFactory提供了四种方法来加载图片: decodeFile----------从文件加载一个Bitmap对象 decodeResource --从资源加载一个Bitmap对象 decodeStream -----从输入流加载一个Bitmap对象 decodeByteArray--从字节数组加载一个Bitmap对象...原创 2019-06-28 19:11:38 · 807 阅读 · 0 评论 -
Android开发底部点击按钮从屏幕底部滑出面板(一)
最近需要实现一个类似百度地图搜索美食上滑弹出一个覆盖面板。网上也有很多的开源项目像 [Android Sliding Up Panel]Android的Android Support Library 23.2里的 Design Support Library也有一个新的控件Bottom Sheets。用起来也比较简单。CoordinatorLayout作为父布局 子布局只需要设置layou原创 2018-01-26 17:31:21 · 9209 阅读 · 0 评论 -
Eclipse设置注释模板
设置注释模板的入口:Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元素文件(Files)注释标签:/** * @Title: ${file_name} * @Package ${package_name} * @Description: ${todo}(用一句话描述该文件做什么)原创 2017-10-26 13:53:59 · 198 阅读 · 0 评论 -
Android学习之shape属性与用法
经常在项目中使用shape在XML中绘制各种形状,简单整理了一下shape的属性与用法。 shape的图形选项有四种:rectangle(长方形)默认的形状,可以画出直角矩形、圆角矩形、弧形等oval(椭圆) 用得比较多的是画正圆line(线条) 可以画实线和虚线ring(圆环)可以画环形进度条 注意:定义ring圆环的时候需要用到shape的几个属性 android:inner原创 2017-07-20 15:30:59 · 555 阅读 · 0 评论