自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(26)
  • 收藏
  • 关注

原创 专科咋了?5年时间从三流外包到阿里P6,逆袭成功终于肝出了这份大厂Android研发岗中高级面经

TCP 是面向连接的,UDP 是面向无连接的TCP数据报头包括序列号,确认号,等等。相比之下UDP程序结构较简单。TCP 是面向字节流的,UDP 是基于数据报的TCP 保证数据正确性,UDP 可能丢包TCP 保证数据顺序,UDP 不保证可以看到TCP适用于稳定的应用场景,他会保证数据的正确性和顺序,所以一般的浏览网页,接口访问都使用的是TCP传输,所以才会有三次握手保证连接的稳定性。而UDP是一种结构简单的协议,不会考虑丢包啊,建立连接等。优点在于数据传输很快,所以适用于..

2022-03-20 19:12:02 171

原创 Android图片加载框架最全解析(八),面试加分项

RequestOptions options = new RequestOptions() .skipMemoryCache(true); Glide.with(this) .load(url) .apply(options) .into(imageView);123456可以看到,只需要调用skipMemoryCache()方法并传入true,就表示禁用掉Glide的内存缓存功能。接下来我们开始学习硬盘缓存方面的内容。其实在刚刚学习占位图功能的时候,我们就使用

2022-03-20 14:00:16 2276

原创 Android优化——,分享两道阿里P7究极难度算法题

3.AOP打点 加入aspectjx库,打印出Application,Activity的耗时时间,进行针对优化根路径build.gradle中添加classpath ‘com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.0’app中build.gradle中添加apply plugin: ‘android-aspectjx’…implementation 'org.aspectj:aspectjrt:1.8.+’使用如下:@As

2022-03-20 13:57:03 158

原创 androidx viewpager2的使用详解,想进BTAJ

@param adapter The adapter to use, or {@code null} to remove the current adapter@see androidx.viewpager2.adapter.FragmentStateAdapter@see RecyclerView#setAdapter(Adapter)*/public void setAdapter(@Nullable @SuppressWarnings(“rawtypes”) Adapt...

2022-03-20 13:55:26 2161

原创 Android-开源框架总结,38岁的中年失业者怎么活下去

(4)  缓存(5)  多级别取消请求(6)  和Activity和生命周期的联动(Activity结束时同时取消所有网络请求)二、android-async-http(1) 在匿名回调中处理请求结果(2) 在UI线程外进行http请求(3) 文件断点上传(4) 智能重试(5) 默认gzip压缩(6) 支持解析成Json格式(7) 可将Cookies持久化到SharedPreferences三、Afinal框架主要有四大模块:(1) 数据库模块:and

2022-03-20 13:50:36 2010

原创 Android-GC原理探究(深度好文),太牛了

主流的大部分Davik采取的都是标注与清理(Mark and Sweep)回收算法,也有实现了拷贝GC的,这一点和HotSpot是不一样的,具体使用什么算法是在编译期决定的,无法在运行的时候动态更换。如果在编译dalvik虚拟机的命令中指明了"WITH_COPYING_GC"选项,则编译"/dalvik/vm/alloc/Copying.cpp"源码 – 此是Android中拷贝GC算法的实现,否则编译"/dalvik/vm/alloc/HeapSource.cpp" – 其实现了标注与清理GC算法。

2022-03-20 13:48:59 2203

原创 Android-Framework学习笔记(二)Zygote进程启动过程,关于Android程序员最近的状况

endIcuCachePinning();warmUpJcaProviders();Log.d(TAG, “end preload”);}启动SystemServer进程ZygoteInit#startSystemServer()private static boolean startSystemServer(String abiList, String socketName)throws MethodAndArgsCaller, RuntimeException {long capabil

2022-03-20 13:47:22 1924

原创 Android——TextView和EditText控件,kotlin脱糖

android:id="@+id/et1"android:layout_width=“match_parent”android:layout_height=“wrap_content”android:inputType=“textPassword”android:maxLength=“6”android:hint="@string/possword" />android:hint="@string/username"设置底纹(开始要到strings.xml中定义底纹文字,和定义文本一样)

2022-03-19 21:37:02 748

原创 Android—— GridView简单使用详解,androidjni开发书籍

android:layout_width=“match_parent”android:layout_height=“match_parent”android:orientation=“vertical” ><ImageViewandroid:id="@+id/image"android:layout_width=“100sp”android:layout_height=“150sp”android:scaleType=“fitXY” /><TextViewandro

2022-03-19 21:35:26 686

原创 Androidx-下-Fragment-懒加载的新实现,新老方案对比,你喜欢哪种呢-

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-54ROfsN3-1647696809581)(//upload-images.jianshu.io/upload_images/2824145-1567d443a5150d6e.png?imageMogr2/auto-orient/strip|imageView2/2/w/954/format/webp)]观察上图我们可以发现,同级的Fragment_1、Fragment_2、Fragment_3 都调用了 onAttach.

2022-03-19 21:33:48 1001

原创 AndroidJetpack Livedata最详尽的使用场景分析,移动app软件开发

}}override fun onActive() {super.onActive()coundManager.setListener(listener)}override fun onInactive() {super.onInactive()coundManager.removeListener(listener)}companion object {private lateinit var globalData: GlobalLivedatafun getInstance():

2022-03-19 21:32:12 206

原创 Android6,android学习网站

2.1 怎么适配● 在6.0所有权限都需要申请?曰:当然不是。只有属于危险权限的才需要申请。危险权限看下表1-2● 那危险权限也很多啊,也要一个个申请?曰:当然不是。你看看下面的表,都分好组了(9组),对于同一组内的权限,只要有一个被同意,其他的都会被同意。● 谁最帅曰:当然是子信。2.2 列举权限的分组表1-2危险权限分组分组名字分割线PHONEandroid.permission.READ_PHONE_STATEandroid.permission.C

2022-03-19 21:30:35 161

原创 Android-音视频学习系列-(八)基于-Nginx-搭建(rtmp、http)直播服务器

云服务器: 腾讯云系统: centos直播服务器: nginx拓展模块: nginx-http-flv-module (支持 rtmp、http-flv、http-hls 等)如果 NGINX 要支持正则表达式,需要安装 PCRE库。如果 NGINX 要支持加密访问,需要安装 OpenSSL库。如果 NGINX 要支持压缩,需要安装 zlib库。测试环境:电脑 : MAC推流软件: obs-studioMAC 拉流软件: VLCAndroid 拉流软件: 前几天写的一个 Andr.

2022-03-19 21:28:58 3078

原创 Android-_巧_仿蚂蚁森林水滴动效,2021最新版

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zCIBCCBP-1647696422663)(//upload-images.jianshu.io/upload_images/1744409-e818d7cbbc01189e.gif?imageMogr2/auto-orient/strip%7CimageView2/2/w/360/format/webp)]也许看到这个图,你就不想再继续看下去了,心想这个动画很简单啊,不就是创建循环创建view,再给每个view的动画,每个

2022-03-19 21:27:21 307

原创 Android-Shortcuts,让你在系统桌面上为所欲为,2021年最新腾讯Android面经

虽然对于一个应用程序一般可以创建五个快捷方式,其中包括静态和动态的,但是但多数的设备上只能展示** 四个**。但是桌面快捷方式是不做限制的,不过桌面快捷方式非用户主动删除的话,是没法移除的,只能通过禁用的方式让该桌面快捷方式失效。##使用快捷方式可以帮助用户快速访问常用的路径和页面,从而为用户提供特定类型的内容。Shortcuts 类型选择那该如何选择快捷方式类型,这取决你的快捷方式是应用驱动还是用户驱动。虽然静态快捷方式意图不可更改,动态的可更改,但是这两种都是属于应用驱动。如果用户想

2022-03-19 21:24:08 975

原创 MemoryFile匿名共享内存使用,vsandroid开发

e.printStackTrace();}return null;}public static MemoryFile openMemoryFile(ParcelFileDescriptor pfd,int length,int mode){if(pfd == null){throw new IllegalArgumentException(“ParcelFileDescriptor 不能为空”);}FileDescriptor fd = pfd.getFileDescriptor();re

2022-03-17 23:29:45 754

原创 Linux平台上直接运行Android应用,手机移动开发技术

选择安装/卸载当然选择同意了下一步下一步很快安装成功安装体验和大多数Windows平台的应用一致。不过最好安装之前更新一下系统,不然安装过程中也会执行的,偶尔还会出错。####安装过程中偶尔也会出错![Linux平台上直接运行Android应用](https://upload-images.jianshu.io/upload_images/15233854-e06629882f2c67a2.png?imageMogr2/auto-orient/strip%7CimageVie.

2022-03-17 23:26:54 2022

原创 Leetcode面T4(1-9)树,flutter虚线边框

p = p.next;if (poll.left != null) {//当前出队的节点有左孩子,则左孩子入队queue.add(poll.left);}if (poll.right != null) {//当前出队的节点有右孩子,则右孩子入队queue.add(poll.right);}}//for循环走完后就遍历完了一层,将存储该层节点的链表第一个有实际值的节点入队list.add(head.next);}//将可变长的数组转化成定长数组(因为函数的返回值要求了返回一个定长数组

2022-03-17 23:25:28 123

原创 Kotlin学习手记——单例,大厂内部资料

companion object {@JvmField var x: Int = 2@JvmStatic fun y(){ }}}注意,加的注解@JvmField和@JvmStatic只针对java平台的可用,其他平台并不可行。单例的object类仍可以继承类:object Singleton: Runnable{override fun run() {}}内部类:在kotlin中类内部的class前面不写修饰符默认就是静态内部类,class前面写 inner修饰符才是java中

2022-03-17 23:24:03 198

原创 Kotlin-+-协程-+-Retrofit-,flutter插件第三方库

object RetrofitClient {val BASE_URL = "https://wanandroid.com/"val reqApi by lazy {val retrofit = Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).addCallAdapterFactory(CoroutineCallAdapterFactory()).build()r

2022-03-17 23:22:38 171

原创 JNI原理学习,美团Android面试题

1.3 Native方法注册Native方法注册分为两种:静态注册多用于NDK开发动态注册多用于Framework层开发下面我们用实际的例子对两种注册做区分及了解。1.静态注册我们在Android Studio一个项目中右键本项目->new->module->Java LibraryLibraryName = mediaJava class name = MediaRecorder.java,创建成功后,打开MediaRecorder.class,并学着Me

2022-03-17 23:21:12 1165

原创 Jetpack之Startup快速掌握,移动开发框架

声明Manifest两点注意:要在Manifest中声明其原理中真正使用的ContentProvider类androidx.startup.InitializationProvider,注意author要携带${applicationId}来避免与其他App产生冲突记得一定要在这个provider下声明meta-data第一点不做解释了,其基本原理就是依靠ContentProvider的onCreate会在应用初始化时被自动调用这一点。关于第二个需要解释:Startup会去找自己Pr

2022-03-17 23:19:47 1639

原创 Jetpack之Room的使用,结合Flow,android原生开发

//按类型 查询所有搜索历史@Query(“SELECT * FROM t_history WHERE type=:type”)fun getAll(type: Int = 1): Flow<List>@ExperimentalCoroutinesApifun getAllDistinctUntilChanged() = getAll().distinctUntilChanged()//添加一条搜索历史@Insertfun insert(history: History)//删除

2022-03-17 23:18:22 249

原创 Jetpack之LiveData修炼秘籍:文章+视频,细数Android开发者的艰辛历程

文章看的脑壳晕?视频教学上传在bilibili,看完记得三连:https://www.bilibili.com/video/BV1xf4y1m7Gk使用LiveData步骤1.创建持有某种类型的LiveData对象。通常在ViewModel类来实现该对象。2.定义一个具有onChanged()方法的Observer对象,当LiveData持有数据变化是回调该方法。通常在UI控制器类中实现创建该Observer对象,如Activity或Fragment。3.通过使用observe()方法,将上述的Li

2022-03-17 23:16:56 83

原创 【android】深入理解在Android

说完原理,再来看看线程的创建和复用的相关代码(基于 JDK 1.8),如下:±—ThreadPoolExecutor.Worker.javaWorker(Runnable firstTask) {setState(-1);this.firstTask = firstTask;// 调用线程工厂创建线程this.thread = getThreadFactory().newThread(this);}// Worker 实现了 Runnable 接口public void run() {r

2022-03-06 22:02:19 2387

原创 [Android进阶】Handler机制原理解析

}mQueue = mLooper.mQueue;//通过Looper对象获取消息队列mCallback = callback;mAsynchronous = async;}//获取Looper对象public final Looper getLooper() {return mLooper;}从Handler的构造函数中我们可以发现,Handler在初始化的同时会通过Looper.getLooper()获取一个Looper对象,并与Looper进行关联,然后通过Looper对象获取消息队

2022-03-06 22:00:54 3228

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除