![](https://img-blog.csdnimg.cn/20210225172245812.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Android基础篇
文章平均质量分 60
欢迎加入微信公众号
SunshineBoy的博客
欢迎微信搜一搜“Android技术O2M分享”加入微信公众号!
展开
-
如何解决MediaPlayer播放音频时,出现“无法播放该文件”、“播放失败”等错误消息的问题?
MediaPlayer是Android平台上用于播放音频和视频文件的类,它提供了各种功能和方法,可以方便地实现多媒体播放功能。如何使用的基础功能功能在这里就不讲了可以移步到,在本篇博客中,我们讲如何解决MediaPlayer播放音频时,出现“无法播放该文件”、“播放失败”等错误消息的问题。原创 2023-06-03 13:29:06 · 3576 阅读 · 0 评论 -
解决项目中遇到重复引用依赖冲突问题
The application could not be installed: INSTALL_FAILED_CONFLICTING_PROVIDERCan't install because provider name ****原创 2022-06-01 22:06:34 · 3383 阅读 · 3 评论 -
AndroidStudio gradle 编译发现阿里云镜像找不到对应jar包https://maven.aliyun.com/nexus/content/repositories/jcenter
https://maven.aliyun.com/nexus/content/repositories/jcenter原创 2021-12-15 20:51:17 · 4138 阅读 · 0 评论 -
Android开发 算法一个数组向右平移K
题目描述一个数组向右平移k后得到一个新的数组,例如:数组[1,2,3,4,5,6,7]向右平移k为1,得到新数组[7,1,2,3,4,5,6];向右平移k为3得到新数组[5,6,7,1,2,3,4];今天又面试了算法题这么简单的算法离开开发工具,裸写竟然如此丢人,各种错误,先看正确代码:int[] ns = {1, 2, 3, 4, 5, 6, 7};List ls = Arrays.stream(ns).boxed().collect(Collectors.toList());System.原创 2021-03-16 16:04:07 · 216 阅读 · 0 评论 -
Android开发 美团算法面试判断给定的链表中是否有环
题目描述判断给定的链表中是否有环。如果有环则返回true,否则返回false。 你能给出空间复杂度O(1)的解法么? 这道算法题在面试的时候,我居然没整出来,真是悲剧,今天我就来把他写出来,大家一起看看。 先来看看怎么写出一个循环链表吧,只有知道怎么来的才知道怎么解决这个算法对吧,首先是准备好class类:static class ListNode { public ListNode next; public int val; public ListNode(int原创 2021-03-16 15:30:02 · 152 阅读 · 1 评论 -
Android开发 如何选择线程类来提升性能
线程其实是Android开发的一个重要模块,我相信大家可能平时用到多选线程情况并不多或者都用的是别人的第三方框架,当然都说了这是一个非常重要的模块所以大家还是需要掌握的毕竟面试也会被考的,我在Android开发 面试题2021年干货汇总解答(一)和Android开发 面试题2021年干货汇总解答(二)中都提到过线程相关的考点,今天我们来看看谷歌为我们提供了哪些实现线程类。HandlerThread 类 我之前在Android开发 面试题2021年干货汇总解答(一)的线程栏目中提到过谷歌推荐我们使用原创 2021-03-05 16:17:16 · 176 阅读 · 0 评论 -
Android开发 面试题2021年干货汇总解答(二)
上一篇Android 常见面试题详细解答(一)1.AsyncTask异步加载 上一期讲了可以用Handler消息机制实现子线程刷新UI,当然处理这一复杂场景Google为我们提供了更好的解决方案就是扩展 AsyncTask类,此类可简化与界面进行交互所需执行的工作线程任务。private class MyAsyncTask extends AsyncTask<Params, Progress, Result> { @Override protected Result doInBac原创 2021-03-03 14:01:26 · 210 阅读 · 2 评论 -
Android开发 AndroidStudio数据库可视化
相信大家做Android开发或多或少会遇到一些项目中需要用到数据库,过去咱们用了数据库想要实时查看自己创建的数据库中数据比较费劲,要从Device File Explorer中导出数据库文件再第三方软件中查看这样也行不过就是不能立即查看需要导出文件:...原创 2021-02-25 11:20:46 · 4401 阅读 · 0 评论 -
Android开发 面试题2021年干货汇总解答(一)
“ 金三银四,又是一年跳槽季,关注我也许面试中你遇到的难题在这里有你想要的解答。”1.什么是Activity Activity是四大组件之一,其他三大组件:service、BroadcastReceiver、ContentProvider;2.Activity的生命周期 onCreate()——》onStart()——》onResume()——》onPause()——》onStop()(——》onRestart()——》onStart())——》onDestroy()3.Service两种启动原创 2021-02-23 14:32:11 · 2586 阅读 · 4 评论 -
Android开发 面试必问的Handler消息机制
最近项目提测了也闲了下来看到Handler就想起面试必问,Handler机制相信大家每个人面试的时候都被问到吧,就来总结一下看看,话不多说先看流体图:这个流体图应该已经把整个Handler消息机制的流程都涵盖了,应该算是很直观了吧,首先最外层我写了Thread.currentThread(),这说明了一个线程里有且仅有一个Handler消息机制,所以大家应该注意如果在子线程中使用Handler应该要如下写法: @Override public void run() {原创 2021-02-19 15:26:31 · 2568 阅读 · 6 评论 -
Android开发 View的生命周期结合代码详解
咱们以TextView控件为例:/** * Created by SunshineBoy on 2020/9/23. */public class TestTextView extends android.support.v7.widget.AppCompatTextView { public TestTextView(Context context) { super(context); Log.e("TestTextView","TestTextView原创 2020-09-23 17:56:05 · 2030 阅读 · 0 评论 -
一张流体图带你完全搞懂Android的View事件分发机制并结合源码详解
首先咱们先看一下流程图:首先Activity中点击事件其实就是触发触摸事件,会调dispatchTouchEvent(MotionEvent ev),咱们先看一下Activity的源码: public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_DOWN) { onUserInteraction(); }原创 2020-09-25 18:02:42 · 2046 阅读 · 1 评论 -
DCL(双重锁定检查)中Volatile的作用,如何防止反射实例化单例对象
介绍DCL单例模式之前,我们先了解一下volatile关键字:Volatile修饰符修饰的变量在编译器编译时确保本条指令不会因编译器的优化而省略。主要特征:保证了不同线程同时对变量修改时实时可见性,即一个线程修改了该变量,其他线程实时可见; 禁止指令重排序(尤为重要);DCL单例指令流程:为对象分配内存; 初始化实例对象; 为对象的引用分配内存;由于JVM为了优化指令,提高程序运行效率,允许指令重排序,如果JVM优化指令为1、3、2顺序执行,那么多线程同时执行任务时,如果指令3刚好原创 2020-09-08 15:32:11 · 610 阅读 · 0 评论 -
Android开发 如何使用差分算法实现diffpatch增量更新依赖库支持新建四大组件
在当代App应用大小不断增大的情况下增量更新代替全量更新已是趋势,可以节省许多用户流量;傻瓜试实现增量更新,一键依赖diffpatch增量更新库直接使用超级简单,无需自己实现。实现原理,首先使用差分算法bsdiff计算出差分包,感兴趣的可以自己点击进去下载源码,然后就是使用bzip2压缩工具打包生成补丁差分包文件和合并补丁包文件;由于这里提供的都是C语言程序所以我们需要借助NDK/JNI实现增量更新了。原创 2020-12-14 16:24:13 · 1879 阅读 · 4 评论 -
Android开发 自定义底部可拖拽滑动浮层控件及原理解析
先看效果图:了解完Android开发 View的生命周期结合代码详解和一张流程图带你完全搞懂Android的View事件分发机制并结合源码详解完全可以实现本篇自定义底部可滑动浮层控件。实现步骤:1.xml中写入SlideNormalView自定义控件: <com.example.floatlistview.slide.SlideNormalView android:id="@+id/slide_float_view" android:layo原创 2020-11-25 14:13:27 · 3576 阅读 · 7 评论 -
Android组件化设计与实现结合代码详解并总结优缺点
ARouter简介组件化其实就是一个主组件连接着其他多个组件组合成一个APP实现高类聚低耦合开发。项目比较大时使用组件化可根据功能划分模块独立开发减少对原有代码改动量可避免改动影响其他功能,各个组件独立开发可以减少代码冲突量,项目比较大运行项目时经常出现重新编译时比较耗时短的三到五分钟跑一次项目,使用组件化独立运行可以大大减少开发等待时间。组件化开发推荐目前比较流行的ARouter框架,ARouter是由阿里开发团队开源的组件化框架,目前应用比较多,ARouter经过多年广大开发者测验并改进已经原创 2020-10-20 14:56:08 · 1407 阅读 · 6 评论 -
Android开发MVVM设计模式的实现及ButterKnife兼容结合源码详解并总结优缺点
MVVM设计模式主要是view通过中间件viewModel与model数据模型交互, 采用谷歌自带DataBinding 组件只需要在app.gradle开启就行:dataBinding { enabled = true}View布局文件xml:<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android" x原创 2020-10-15 15:34:47 · 1839 阅读 · 9 评论 -
Android系统应用Launcher的启动流程结合源码详解
这篇主要讲解的是Launcher程序的启动流程至于Launcher前面的系统进程启动流程大家可以看看我的Android应用跟系统之间通信什么时候用Socket什么时候用Binder结合源码详解有介绍。好了进入咱们今天的主题Launcher,注意本篇系统源码是基于Android4.4版本(也就是下面AMS、PMS的源码),先看看Launcher启动入口在哪里其实就在SystemServer中: public static void main(String[] args) { new原创 2020-10-14 10:53:20 · 2160 阅读 · 5 评论 -
Android动画View的setX跟setTranslationX区别结合源码解析
以TextView为例我们看看,先看一下我的xml: <TextView android:id="@+id/tv_test" android:layout_width="200dp" android:layout_height="50dp" android:layout_marginLeft="20dp" android:text="Test"/>看一下原图:然后我们调一下setX看看:原创 2020-10-12 17:17:31 · 5431 阅读 · 4 评论 -
Android应用跟系统之间通信什么时候用Socket什么时候用Binder结合源码详解
讲解这个问题之前我们先来看看这个问题“为什么进程间不能直接进行通信,而需要借助Binder或者Socket通信”, 其实这个问题只要了解过虚拟机的同学大概都会明白怎么回事:由于在安卓系统中一个进程对应一个虚拟机对象,而在Java虚拟机对象中只存在一个堆区和一个方法区,并且被所有线程共享,所以能够直接通信的只有在虚拟机内部堆区和方法区,进程间通信属于虚拟机对象间通信不能直接通信,当然大家还应该明白一个机器只有一个虚拟机创建多个虚拟机对象来实现多进程也就是多应用。至于栈区、堆区、方法区各自存储的是什么,这就原创 2020-09-08 18:32:18 · 1916 阅读 · 2 评论