- 博客(56)
- 资源 (1)
- 收藏
- 关注
原创 多媒体音频焦点浅析
而Android为了避免多个音源同时播放,就引入了音频焦点的概念,所有音频应用都统一按照音频焦点的规定执行,就可以避免该现象发生。当应用需要播放音频时,需要主动申请音频焦点,获取音频焦点后,再进行播放操作;同时在播放过程中,也可能存在其他音源请求焦点,此时当前应用就会收到音频焦点的丢失,当前应用应暂停播放或者降低音量,方便用户听其他音源。如上面所述,我们发现在Android 8.0之前,请求音频焦点的时候,只会返回两种结果,要么请求成功(可让您的应用异步处理焦点请求。请求焦点时,系统可以在不调用应用的。
2023-07-12 18:06:48 1386 5
原创 Android多渠道打包及资源指定
由于项目涉及多个车型,使用的是同一个base代码,不同车型都有差分项,所以需要进行多渠道打包,编译不同的资源进行编译处理。
2023-07-11 13:18:54 968
原创 Android Studio Gradle编译异常
Android Studio Gradle编译异常:Address already in use: Cannot bind
2022-12-08 18:16:38 790
转载 Http协议
Http协议Android与互联网交互的三种方式Http协议实际开发中我们和服务端打交道一般用得都是基于Http协议的通信,所以学好Http协议是非常 重要的,当然,我们不用过于考究一些细节的东西,有个大体的了解即可!都是一些概念性的东西!什么是Http协议?hypertext transfer protocol(超文本传输协议),TCP/IP协议的一个应用层协议,用于 定义WEB浏览器与WEB服务器之间交换数据的过程。客户端连上web服务器后,若想获得web服务器 中的某个web资源,需遵守一
2022-05-17 18:46:39 68
原创 Android 音频可视化 Visualizer
音频可视化 Visualizer效果图Visualizer官方语录:The Visualizer class enables application to retrieve part of the currently playing audio for visualization purpose. It is not an audio recording interface and only returns partial and low quality audio content. Howev
2022-05-07 10:50:49 4171 1
原创 Java对象引用
Java对象引用强引用Java中通过new来创建的对象都是强引用类型,在回收的时候,GC会抛出OOM的异常,并且不会回收;软引用SoftReference<String> stringSoftReference = new SoftReference<>("SoftReference");在内存足够时,不进行回收,内存不够时,进行回收;这也是缓存中通常使用的弱引用WeakReference<String> weakReference = new WeakR
2021-09-29 19:25:07 85
原创 LiveDataBus学习
LiveDataBus学习LiveDataBus组成消息:消息类型可以是任意类型的Object,也可以是自定义类型的消息消息通道:是通过LiveData来实现的,这是由于LiveData的生命周期感知和可观察性消息总线:多个消息通道组成消息总线发布者发布:发布消息,被观察订阅者订阅:订阅消息,并进行观察LiveDataBus的优势实现简单:相比于EventBus的复杂实现,LiveDataBus只需要一个类即可实现减少APK大小:相比于RxJava和RxAndroid需要2-3M的依
2021-09-22 20:06:01 260
原创 音视频学习
音视频学习Camera2Camera的学习与使用通过Camera.open()创建Camera实例再通过camera.unlock来进行释放锁,否则无法使用然后通过MediaCorder.setCamera来进行设置使用由于Camera已经过时了,谷歌如今推出的是Camera2以及CameraXCamera2的学习与使用通过context.getSystemService(Context.CAMERA_SERVICE) 获取CameraManager.获取当前选中的Came
2021-09-15 20:05:51 127
原创 SpannableStringBuilder实现文字处理
创建对象SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();把需要处理的字符创添加到SpannableStringBuilder处理spannableStringBuilder.append(findFavoriteText)通过builder的setSpan方法实现事件处理,onClick处理处理文字的点击事件,updateDrawState处理文字效果,通过setUnderlineText来取消下.
2021-09-15 20:00:42 216
原创 Binder学习
Binder1. Binder初识2. 进程空间2.1 进程空间划分进程空间分为用户空间和内核空间区别:进程间,用户空间的数据不可共享,所以用户空间不是可共享空间进程间,内核空间的数据可共享,所以内核空间是可共享空间所有进程共用一个内核空间进程内用户空间和内核空间进行交互需通过系统调用copy_from_user():将用户空间的数据拷贝到内核空间copy_to_user():将内核空间的数据拷贝到用户空间2.2 进程隔离&跨进程通信(IPC)进程隔离
2021-08-31 13:21:35 117
原创 自定义FM刻度尺
自定义FM刻度尺Scroller学习Scroller:Android里面专门处理滚动的工具类,比如ViewPager、ListView等。scrollTo:设置View的滚动位置,并且会刷新View。scrollBy:移动View的滚动位置,并且会刷新View。无论scrollTo还是scrollBy都是移动父布局里的内容,但是scrollTo再调用后再次调用就没有效果了,这是因为scrollTo()方法是让View相对于初始的位置滚动某段距离;而scrollBy则可以继续调用,这是因为scro
2021-08-27 20:12:44 234
原创 自定义View
自定义View自定义View初学首先我们要先继承View这个类了解onDraw和canvasonDraw是绘制方法canvas是绘制的实现Paint:画笔的使用Paint.setStyle(Style style) 设置绘制模式FILL 填充模式STROKE 画线模式FILL_AND_STROKE 并用既画线又填充,使用setStrokeWidth来设置线条宽度Paint.setColor(int color) 设置颜色Paint.setStr
2021-08-20 20:26:16 72
原创 Room学习
Room添加依赖 def room_version = "2.3.0" implementation "androidx.room:room-runtime:$room_version" //Room的API的支持 annotationProcessor "androidx.room:room-compiler:$room_version" //Room注解处理器添加表//表@Entitypublic class Student { //主键 @Pri
2021-08-19 21:29:53 98
原创 Glide使用
GlideGlide依赖导入 implementation 'com.github.bumptech.glide:glide:4.12.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'Glide简单使用需要注意的通过网络请求需要添加配置 <uses-permission android:name="android.permission.INTERNET"/>同时网络请求有时会请
2021-08-16 21:14:26 172
原创 OKHttp&Retrofit
OkHttp&RetrofitOkHttp的使用导入依赖 implementation("com.squareup.okhttp3:okhttp:4.9.0")使用Get同步请求:注意在Android开发中同步请求会等待请求执行完毕,再往下走,同时,同步网络请求需要在子线程中使用,同步调用的execute方法。new Thread(()->{ Request request = new Request.Builder().url("
2021-08-16 21:05:10 222 1
原创 MVC、MVP、MVVM
MVC&MVP&MVVMMVCMVC (Model-View-Controller, 模型-视图-控制器),标准的MVC是这个样子的:模型层 (Model):业务逻辑对应的数据模型,无View无关,而与业务相关;视图层 (View):一般使用XML或者Java对界面进行描述;控制层 (Controllor):在Android中通常指Activity和Fragment,或者由其控制的业务类。MVC通信方式,所有的通信都是单向的:MVPMVP (Model-View-Pres
2021-08-16 20:46:41 118
原创 ViewPager学习
public class MainActivity extends AppCompatActivity {private List mFragmentList;private ViewPager mViewPager;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main
2021-08-11 18:44:23 126
原创 Navigation入门
NavigationNavigation入门概念Navigation:实现应用内页面之间的切换NavHost:容器,存放每一个页面,同时也是一个控制器Fragment:碎片NavController:控制导航的逻辑NavGraph:工具,设置导航的路线使用创建两个Fragment:public class HomeFragment extends Fragment { public HomeFragment() { // Required empty pub
2021-08-11 15:49:10 543 1
原创 Android动画学习
Animation帧动画准备素材在Drawable中添加布局文件wifi_animation:使用animation-list来进行文件加载其中drawable为帧动画图片duration为显示时间单位为毫秒<?xml version="1.0" encoding="utf-8"?><animation-list xmlns:android="http://schemas.android.com/apk/res/android"> <ite
2021-08-10 10:42:43 89
原创 AIDL学习
AIDLAIDL概述 AIDL全称是Android Interface Definition Language,即Android接口定义语言。学习一门计算机技术语言,就需要了解该语言的基本知识:设计AIDL的目的是什么 设计这门语言的目的是为了实现进程间通信,尤其是在涉及多进程并发情况下的进程间通信。AIDL语法文件类型:用AIDL书写的文件的后缀是 .aidl,而不是 .java。.aidl文件大致可以分为两类,一类是用来定义parcelable对象,以供其他AIDL文件使用AID
2021-07-22 08:43:49 370
原创 Broadcast
BroadcastBroadcast概念1. 定义 Broadcast(广播)是一个全局的监听器,属于Android四大组件之一,是一种广泛运用的在应用程序(APP)之间传输信息的机制。而BroadcastReceiver(广播接收器)是对发送出来的 广播进行过滤接受并响应的一类组件。2. 应用场景Android不同组件间的通信(同一应用内 / 不同应用间)多线程通信与 Android 系统在特定情况下的通信接收系统的状态信息3. 生命周期 BroadcastReceive
2021-07-19 17:06:00 242
原创 Android--Service
ServiceService简介Service提供了两个主要的功能:可以让程序在后台一直做它想要做的事情,即使当前没有与用户进行交互。(对应context.startService()的启动方式)。实现了某些功能已供其他程序调用的工具,并可保持长期连接进行交互。(对应context.bindService()的启动方式)。Service生命周期启动服务启动服务:startService()单次创建:onCreate()->onStartCommand()多次创建:onCrea
2021-07-16 15:52:38 64
原创 Java多线程
多线程程序:是为完成特定任务、用某种语言编写的一组指令的集合。即指一 段静态的代码,静态对象。进程(process):是程序的一次执行过程,或是正在运行的一个程序。是一个动态 的过程:有它自身的产生、存在和消亡的过程。——生命周期进程作为资源分配的单位线程(thread):进程可进一步细化为线程,是一个程序内部的一条执行路径。线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器(pc),线程切换的开 销小Thread类构造器Thread():创建新的Thre
2021-07-09 22:45:38 68
原创 程序流程控制
程序流程控制三种基本流程控制顺序结构分支结构if…elseif(条件表达式){ 执行代码块; }else{执行代码块;}switch-caseswitch(表达式){case 常量1:语句1;// break;case 常量2:语句2;// break;… …case 常量N:语句N;// break;default:语句;// break;} 循环结构for循环for (①初始化部分; ②循环条件部
2021-07-09 22:44:58 67
how2j_offline_2020.01.31.zip
2021-04-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人