![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 75
7-brain
成长是一篇等待谱写的乐章,等待着我们谱写出一个个扣人心弦的乐符。
展开
-
Android 11 Unable to start service Intent 问题(包可见性,resolveIntent返回null)
今天在Android11上发现了一个的问题,如果目标Service的进程没有启动,那么无论是bindService还是startService都没有办法拉起指定的Service。网上查了很多资料如下:1.目标Service 设置 android:exported="true"2.目标Service需要声明自定义权限。客户端需要声明权限。3.目标Service需要添加<intent-filter></intent-filter>上面的方法都试过了**然并卵**,还是报Unab原创 2021-10-25 12:32:30 · 13325 阅读 · 5 评论 -
分析Android Framework源码--彻底了解Android AudioFocus机制,肯定有你不知道的知识点(基于Android10.0)
一.引言今天我们来说说Android Audio系统中一套十分重要的机制-AudioFocus机制。AudioFoucs机制的设计主要是为了解决每个音源之间播放冲突的问题。下面呢让我们从源码的角度深度剖析一下AndroidFocus机制。二.AudioService在说AudioFocus机制之前有必要先了解一下AudioManager和AudioService这两个类。了解Android服务的朋友都知道,Android自带的系统服分为native服务和Java层服务,Java层服务我们了解最深的应该原创 2021-07-11 01:11:57 · 4854 阅读 · 2 评论 -
Activity页面的绘制流程
一.引言很多朋友都认为Activity的页面绘制是在Activity的onResume方法执行完成就被成功绘制成功了,认为这个时候我们就可以看到我们写的页面了。那真的是这样嘛?其实并不然,Activity的页面它制是在Activity的onResume方法执行完成后才会被绘制,且绘制完成的时长与我们主线当时的状态和布局的层级以及CPU内存都是有一定的关系,这些也是我们分析Activity启动黑屏...原创 2020-04-11 13:28:18 · 5320 阅读 · 0 评论 -
源码角度聊聊BlockCanary的原理
今天我们来说说BlockCanary的核心原理,BlockCanary是一个能检测主线程是否卡顿的框架。那么它为什么可以检测主线程卡顿呢?我们都知道Android是一个消息驱动型的系统。每当我们创建一个进程的时候,在ActivityThread内部都会为我们去创建一个主线程的Handler,然后开启消息的队列的轮询。**1.ActivityThead.main()** public...原创 2020-03-29 16:12:30 · 4534 阅读 · 0 评论 -
Android性能优化-内存篇(其实内存优化也就这回事)
一.引言今天来聊一聊Android中内存优化的一些手段。首先问问自己为什么要内存优化呢?(1):App消耗内存过大,导致手机内存低于内存警戒线的时候,Low Memory Killer机制就会触发,App占用内存越多,被处理掉的机会就越大。(2):受虚拟机堆内存限制,出现OOM,内存溢出,程序出现crash。(3):频繁的GC会导致内存抖动,并发GC伴随着stop-the-world。G...原创 2020-01-05 14:48:19 · 3282 阅读 · 0 评论 -
Activity跳转你所不知道的生命周期
大部分的Android的开发者都会下意识的认为当一个ActivityA跳转到另一个ActivityB的时候,生命周期会是这样的onPause(ActivityA) - onCreate(ActivityB) - onResume(ActivityB) -onStop(ActivityA)。其实以上说的生命周期只有在同一个进程内部跳转,才会去遵循。今天我们就来说一说一种特殊情况。如果Activit...原创 2019-12-30 20:08:02 · 3194 阅读 · 1 评论 -
LeakCanary原理解析,理解起来超简单!
一.引言LeakCanary我相信大家都不会陌生的,在我们的开发过程中,为了避免内存泄漏的问题,我们可以在我们的项目中集成LeakCanary,来观察我们的应用程序是存在内存泄漏的问题。今天我们就来看看LeakCanary的原理,了解它是怎么去判断我们的应用程序是发生了内存泄漏的。二.源码解析在LeakCanary的源码中使用到了一个非常关键的数据结构,这个数据结构是LeakCanary判断...原创 2019-08-17 00:17:02 · 14803 阅读 · 5 评论 -
带着问题分析Framework层源码(一):按键音声音太小,我们该如何增大?
作为一名Android开发人员,对源码的阅读是必不可少的。但是Android源码那么庞大,从何开始阅读,如何开始阅读,很多人都会感觉无从下手,今天我来带着问题,去带大家分析一下Android源码,并解决问题。源码并不可怕,耐着性子看就好了。今天我们来看一下如何增大按键音量呢,下面贴一下调用播放按键音方法的代码: AudioManager audioManager = (Audio...原创 2019-08-14 12:05:28 · 2424 阅读 · 4 评论 -
RxJava2.x源码解析(一)
一.引言说到RxJava,我相信现在每个Android开发者对他都有一定的了解。怎么使用,不是我们今天要讨论的,本着知其然必知其所以然的态度,我们来挖一挖RxJava背后的实现。今天我们就从一个最简单的例子入手,不涉及线程调度,线程调度的实现我们留着下次去了解。下面我们来举一个RxJava最简单的实现代码: Observable.create(new ObservableOnSubscr...原创 2019-04-11 12:32:59 · 463 阅读 · 0 评论 -
在Android中为啥建议你用Message.obtain()方法获取Message对象,而不是使用new关键字?
大家都知道Android应用程序是通过消息来驱动的。每开启一个应用进程,我们都会在当前应用进程的主线程成创建一个消息队列,和Handler来处理应用程序中的消息。不管是刷新界面,或者是启动组件等等,都和消息相关。所以Message对象在我们的应用程序中使用时很频繁的。一般情况下,我们会通过Handler去发送一个消息,而这个消息(即Message对象)我们可以通过关键字new进行创建,也可以通过...原创 2019-03-27 17:14:43 · 1782 阅读 · 0 评论 -
通过设置不同的inPreferredConfig值真的能减少Bitmap加载时占用的内存么?
我相信大部分Android开发都知道在解析Bitmap到内存的时候都知道,需要设置inPreferredConfig来减少Bitmap占用的内存,那么配置inPreferredConfig这个属性真的能减少Bitmap占用的内存么?其实并不然,这个就是我们今天要讨论的东西。大家都知道,Android中Bitmap占用的内存大小与两个因素相关:1.Bitmap的宽高(和图片的像素,图片放置的位置...原创 2019-04-04 10:31:53 · 1509 阅读 · 0 评论 -
从Android开发者的角度看一看IOS和Flutter中的列表实现
引言:大家都知道,目前IOS和Android是当前移动操作系统的主流,而Flutter作为Google推出的跨平台的UI框架,并且在未来作为Google新系统Fuchsia的开发框架,它采用dart语言编写,前景在目前是被很看好的。如果我们在Android领域已经有了一定深入的了解,去了解IOS平台和Flutter的开发是大有裨益的,可以增强我们对移动端的理解。List作为我们在开发中最常用的控件...原创 2019-03-21 23:25:55 · 566 阅读 · 0 评论 -
HashMap,ArrayMap,SparseArray 源码角度分析,Android中的数据结构你该如何去选择?
引言:Map集合,以key-value形式存储的数据结构,是我们在Android开发过程中经常需要用到的。除了java.util包下,为我们提供的HashMap是我们开发中经常使用的,Android也为我们提供了,两种以key-value形式存储的数据结构,一个是ArrayMap,一个是SparseArray。那么这三种Map集合我在日常的开发过程中该去如何抉择呢。下面让我来从源代码的...原创 2019-01-26 22:04:19 · 1421 阅读 · 1 评论 -
NDK开发新增cpp文件,cpp目录下看不到 报This file is not part of the project. Pelase include it in the appropriate
找到项目目录最下方。修改CMakeList.txt文件配置添加file(GLOB native_srcs "src/main/cpp/*.cpp") 和 ${native_srcs}如下图所示:重新build,问题就能解决了。原创 2019-01-27 00:20:25 · 8293 阅读 · 3 评论 -
跨进程通讯Binder的onTransact方法一定在binder线程池的binder线程中执行吗?
一.引言在大多数人的印象中,在Android中用Binder机制进行跨进程通讯,Binder会在onTransact方法中处理Binder驱动发送过来的消息,这个方法会运行在Binder驱动的Binder线程池中。其实这么说是不对的,片面的,在大多数情况下,onTransact()方法的确是在Binder线程中处理Binder驱动发送过来的消息。除了一种情况,在两个进程中都存在Binder实体...原创 2019-02-28 22:06:13 · 2826 阅读 · 3 评论