随笔分类 - Android
摘要:网络mac地址设定 mac地址设置adb shell ifconfig wlan2 hw ether 新的地址 adb查看焦点 查看麦克风使用情况 查看麦克风设置 :可以使用命令adb shell dumpsys audio查看设备的音频配置信息,其中会包含麦克风设置的相关条目,如microphon
阅读全文
摘要:Android ANR的trace文件基本信息解读 示例 "main" prio=5 tid=1 Native | group="main" sCount=0 dsCount=0 flags=0 obj=0x727c02f8 self=0xb400007a2f210800 | sysTid=339
阅读全文
摘要:kotlin定义泛型类 Kotlin中定义泛型类可以使用以下语法: kotlin class MyClass<T>(vararg items: T) { private val list = items.toMutableList() fun addItem(item: T) { list.add(
阅读全文
摘要:JNI开发中静态和动态注册 JNI(Java Native Interface)是Java平台提供的一种机制,用于在Java程序中调用本地代码(例如C/C++代码)。 JNI中涉及两种类型的方法注册:静态注册和动态注册。 静态注册是指将本地方法的名称和实现直接映射到Java类的静态方法。这可以通过在
阅读全文
摘要:单元测试 Android开发中如何进行单元测试和UI测试? 在 Android 开发中,单元测试和 UI 测试是非常重要的,可以保证代码的质量和稳定性。以下是 Android 开发中常用的测试框架和工具: 单元测试:在 Android Studio 中可以使用 JUnit 框架进行单元测试。通常会测
阅读全文
摘要:aidl 整理 AIDL(Android Interface Definition Language)是一种用于定义 Android 应用程序中进程间通信(IPC)的接口的语言。AIDL 允许 Android 应用程序中的不同进程之间进行通信,例如 Activity、Service 和 Broadc
阅读全文
摘要:添加kotlin混编支持 要在Android项目中添加Kotlin混编支持,需要进行以下步骤: 在项目的 build.gradle 文件中添加以下代码: kotlin android { ... // 添加kotlin支持 kotlin { experimental { coroutines "en
阅读全文
摘要:sco音频采集只支持单路音频采集 使用SCO采集音频时,如果有两个物理mic,则会采集到两个物理mic的音频信号,但由于SCO协议本身的限制,只能传输单路音频数据,因此最终拿到的单路音频数据中只包含其中一个物理mic的音频信号。 具体来说,当使用SCO协议进行音频采集时,系统会默认选择一个物理mic
阅读全文
摘要:Android中常见的延迟执行方法有哪些,各有什么优缺点。应用场景是什么 在 Android 中,常见的延迟执行方法有以下几种: Handler.postDelayed():在指定的时间后向 Handler 发送一个延迟执行的消息,通过 Handler 的 handleMessage() 方法来执行
阅读全文
摘要:Android中常见的线程池 Executors在Android中什么场景下使用 Executors 是 Java 平台的一个工具类,提供了方便的线程池管理功能,可以帮助开发者更加便捷地管理线程。在 Android 开发中,Executors 经常被用于异步处理任务,特别是在处理 IO 操作和网络请
阅读全文
摘要:LRUCache具体使用 LRU Cache是一种常见的缓存策略,通过最近最少使用的原则,在缓存满时考虑淘汰最近没有使用的数据。可以在Android中作为一个内存缓存工具使用,比如用于加载图片、网络请求等。 在Android中使用LRU Cache可以先创建一个继承自LruCache类的缓存类,重写
阅读全文
摘要:Android中Window的创建过程 在Android中,Window是与操作系统交互的最上层组件。当一个应用程序启动时,首先会创建一个Activity,并且将此活动附加到一个新的窗口上。 以下是Android中窗口的创建过程: ActivityManagerService(AMS)接收到一个启动
阅读全文
摘要:AMS启动过程 在Android应用启动流程中,AMS( Activity Manager Service )的启动是非常关键的。以下是AMS的启动过程: 1.进程启动 当我们启动一个应用时,系统会挂起Zygote进程。然后,Zygote生成新的应用进程,乘坐第一辆列车到达了Android的世界。这
阅读全文
摘要:Android中阻塞队列的应用有哪些 阻塞队列在 Android 中有很多应用,比如: 线程池:线程池任务的执行就是基于一个阻塞队列,如果线程池任务已满,则任务需要等待阻塞队列中的其他任务完成。 Handler 消息队列:Handler 的消息队列也是一种阻塞队列。handler发送消息时,首先将消
阅读全文
摘要:CAS(Compare-And-Swap) 是一种原子操作,用于实现多线程同步。在Java中,Atomic系列的类通过CAS实现了并发实现。 CAS操作包含三个参数:内存地址V、旧的预期值A、新的值B。当且仅当预期值A和内存地址V中的值相同时,才进行更新和替换。否则不执行任何操作。 CAS操作原理如
阅读全文
摘要:实现一个自定义控件 实现一个自定义控件可以通过以下步骤: 创建一个Java类,并继承已有的View或ViewGroup。 自定义视图需要覆盖一些方法,例如 onDraw()、onMeasure()和 onLayout(),以便控制视图在屏幕中所占的位置和呈现方式。 定义自定义属性,也就是在 attr
阅读全文
摘要:在 Android 中,音频采集常用的配置属性有以下几个: 音频源 Audio Source 属性,用于指定采集音频数据的来源。例如: MediaRecorder.AudioSource.MIC:从麦克风采集音频数据。 MediaRecorder.AudioSource.DEFAULT:使用默认的音
阅读全文
摘要:自定义注解可以用来在编译时期插入代码或者做一些特殊的操作,以下是自定义注解的几种用法: 生成文档等类似的说明: 这是自定义注解最常见也是最基本的应用场景,在Java中有原生的注解(如@Override, @Deprecated等)也是为了辅助生成文档而存在。 例如下面的注解用于描述类或方法的作用:
阅读全文
摘要:Optional 是一个 Java 8 引入的类,它的作用是表示一个可能为 null 的值。使用 Optional 可以让代码更加简洁,避免出现空指针异常。下面是一些 Optional 的用法示例: 创建一个包装了可能为 null 值的 Optional 对象: Optional<String> o
阅读全文
摘要:EventBus EventBus是一种开源的事件发布/订阅库,用于在Android应用程序的组件之间传递消息和事件。使用EventBus,您可以在应用程序内的不同部分之间进行松耦合的通信,而无需显式地编写代码来处理回调或接口实现。 实现原理是基于观察者设计模式,其主要的思想是订阅者订阅感兴趣的事件
阅读全文