自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 ViewPager翻页特效(2_特效关键代码,含答案解析

公式的推导很简单,就是让右边的子view向左平移 -position个自身宽度.效果为:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QaUBfqa0-1630942121638)(手把手讲解ViewPager翻页特效(全文).assets/改造1.gif)]滑动之后,不再出现其他子view。让多个子view之间呈现x轴上的位置差虽然重叠在了一起,但是我还需要让右边的子view呈现位置偏差. 并且,越往右,偏差越大。上代码:[外链图片转存失败,源站可能有

2021-09-06 23:28:53 293

原创 ViewPager翻页特效(1_向源码学习,图文详解

} }}上面代码中,对 `count` 进行了两轮循环,其中第一轮是针对 `lp.isDecor` 为 `true`的,意为:如果当前view是一个 decoration 装饰,并不是adapter提供的view 则返回 true显然,我们要探讨的是 adapter提供的View 是如何摆放的,所以忽略这一块。而在下面的循环中,可以看到 ```javachild.layout(childLeft, childTop, ...

2021-09-06 23:27:12 279

原创 ViewPager中使用Fragment时防止数据预加载,安卓app开发教程

if (mCurTransaction == null) { mCurTransaction = mFragmentManager.beginTransaction();}final long itemId = getItemId(position);// Do we already have this fragment?String name = makeFragmentName(container.getId(), itemId);Fragment fragmen.

2021-09-06 23:25:33 319

原创 ViewPager2+Fragment操作笔记,【面试总结】

} else { this.parent?.requestDisallowInterceptTouchEvent(false) } } else { // TODO: 2021/4/8 目前没有实现上下滑动和 [androidx.viewpager2.widget.ViewPager2]上下滑动的冲突 } } else { handleDefaul...

2021-09-06 23:24:02 617

原创 ViewModel原理,大牛深入讲解

viewModel = ((KeyedFactory) (mFactory)).create(key, modelClass); } else { viewModel = (mFactory).create(modelClass); } mViewModelStore.put(key, viewModel); return (T) viewModel;} 调用get方法后,会调用第二个get方法,传递key(DEFAULT\_KEY ...

2021-09-06 23:22:14 557

原创 View-事件分发看了那么多还是不懂?这回让你一次明白,GitHub标星8k

**1.**每次完整的事件分发流程,都包含自上而下的 “递”,和自下而上的 “归” 2 个流程。**2.**每次完整的事件分发流程,都是针对一个事件(MotionEvent)完成的递归,而一个事件只对应着一个 ACTION,例如 ACTION_DOWN。**3.**一次用户触摸操作,我们称之为一个事件序列。一个事件序列会包含 ACTION_DOWN、ACTION_MOVE … ACTION_MOVE、ACTION_UP 等多个事件。(其中 ACTION_MOVE 的数量是从 0 到多个不等)也即一个事

2021-09-06 23:20:26 81

原创 Tomcat长生不老之术,字节Android面试必问

import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.File;import java.io.IOException;import java.io.Writer;import org.ap

2021-09-06 23:18:49 76

原创 JVM-面试-4-连炮,你能顶住么?,轻松拿下offer

**3、堆内存结构是怎么样的?**可以借助一些工具来了解JVM的内存内容,具体到特定的内存区域,应该用什么工具去定位呢?图形化工具。图形化工具的优点是直观,连接到Java进程后,可以显示堆内存、堆外内存的使用情况,类似的工具有JConsole,VisualVm等。命令行工具。这类工具可以在运行时进行查询,包括jstat,jmap等,可以对堆内存、方法区等进行查看。定位线上问题时也多会使用这些工具。jmap也可以生成堆转储文件(Heap Dump)文件,如果是在linux上,可以将堆转储文件拉到本地来,

2021-09-05 21:53:32 82

原创 JVM 面试 4 连炮,你能顶住么,附面试题

第七,直接内存(Direct Memory),直接内存并不属于Java规范规定的属于Java虚拟机运行时数据区的一部分。Java的NIO可以使用Native方法直接在java堆外分配内存,使用DirectByteBuffer对象作为这个堆外内存的引用。下面这张图,反映了运行中的Java进程内存占用情况:2、OOM可能发生在哪些区域上?根据javadoc的描述,OOM是指JVM的内存不够用了,同时垃圾收集器也无法提供更多的内存。从描述中可以看出,在JVM抛出OutOfMemoryError之前,垃圾收集

2021-09-05 21:52:03 60

原创 JNI开发之 静态注册与动态注册(一,一文搞懂

利用 RegisterNatives 方法来注册 java 方法与 JNI 函数的一一对应关系;实现流程:利用结构体 JNINativeMethod 数组记录 java 方法与 JNI 函数的对应关系;实现 JNI_OnLoad 方法,在加载动态库后,执行动态注册;调用 FindClass 方法,获取 java 对象;调用 RegisterNatives 方法,传入 java 对象,以及 JNINativeMethod 数组,以及注册数目完成注册;优点:流程更加清晰可控;效率更高;jst

2021-09-05 21:50:23 184

原创 Jetpack系列(七) — Hilt,高级Android开发技术

// 方式二: 字段注入class Car {lateinit var engine: Enginefun start() { engine.start()}}fun main(args: Array) {val car = Car()car.engine = Engine()car.start()}依赖项容器类容器类中实现类的创建,类似于Spring框架中的效果Hilt 目前支持以下 Android 类Application(通过使用 @HiltAn.

2021-09-05 21:48:49 158

原创 Jetpack之Room的使用,结合Flow,app架构师

testImplementation “androidx.room:room-testing:$room_version”}[]( )主要组件===============================================================* `数据库`:包含数据库持有者,并作为应用已保留的持久关系型数据的底层连接的主要接入点。 使用 `@Database`注释的类应满足以下条件: * 是扩展 `RoomDatabase` 的

2021-09-05 21:47:07 102

原创 Jetpack--Lifecycle使用介绍及源码分析,三年Android开发

新建观察者其实可以直接实现他的父类,他的父类不要实现任何方法,而且这个方法对我们当前没有用我们想要观察activity生命周期需要怎么做呢?我们需要编写一个方法,方法名随意绑定activityactivity实现了Lifecycle接口,接口中有一个方法获取Lifecycle,调用他,获取lifecycle,然后绑定观察者过一下源码先看在activity里面是怎么实现的?ComponentActivity实现了LifecycleOwner接..

2021-09-05 21:45:37 79

原创 [译] 我与 Flutter 的一年,Android入门你值得拥有

译文出自:掘金翻译计划本文永久链接:github.com/xitu/gold-m…译者:ssshooter校对者:shixi-li, MirosalvaSun[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FITvxYSY-1630675775755)(https://user-gold-cdn.xitu.io/2019/2/6/168c32805b92dcfe?imageView2/0/w/1280/h/960/ignore-error/1)]这是 Flut..

2021-09-03 21:29:46 2320

原创 [译] 同时使用多的相机流,阿里巴巴安卓面试题答案

// 在我们的样例中,SurfaceView 会自动更新。// ImageReader 有自己的回调,我们必须监听,以检索帧// 所以不需要为捕获请求设置回调session.setRepeatingRequest(combinedRequest.build(), null, null)如果你正确配置了目标 surfaces,则此代码将仅生成满足 [StreamComfigurationMap.GetOutputMinFrameDuration(int, Size)]() 和 [StreamCom

2021-09-03 21:28:13 205

原创 [译] 使用 Flutter 制作 3D 翻转动画,赶紧收藏备战金三银四

children: [ ClipRect( child: Align( alignment: Alignment.topCenter, heightFactor: 0.5, child: child, )), Padding( padding: EdgeInsets.only(top: 2.0), ), ClipRect( child: Align( alignment:...

2021-09-03 21:26:42 6699

原创 [译] Android 生命周期备忘录 — 第一部分,自学编程找工作

第三部分: Fragments — activity 和 fragment 的生命周期它们的图表也提供了 PDF格式备忘录,以方便查阅。除非特别说明,接下来的这些场景展示了这些组件的默认行为。如果你发现有错误或者遗漏了什么重要的东西,请在下方评论。第一部分: Activities单一 Activity — 场景 1:应用被结束并且重启触发原因:用户按下了 返回键,或者是Activity.finish() 方法被调用这个最简单的场景说明了一个单一 activity 的应用被用户开启,结

2021-09-03 21:24:56 333

原创 YUV,全网疯传

4:4:4 表示完全取样。每一个 Y 对应一组 UV 分量。4:2:2 表示 2:1 的水平取样,垂直完全采样。每两个 Y 共用一组 UV 分量。4:1:1 表示 4:1 的水平取样,垂直完全采样。每四个 Y 共用一组 UV 分量。4:2:0 表示 2:1 的水平取样,垂直 2:1 采样。每四个 Y 共用一组 UV 分量。YUV 存储格式YUV 存储分成两种格式:压缩格式(packed formats):将Y、U、V值存储成Macro Pixels数组,和RGB的存放方式类似。每个像素点.

2021-09-03 21:23:25 168

原创 WorkManager详解,【面试总结】

override fun doWork(): Result {val A = inputData.getInt("A",0)val B = inputData.getString("B")val data = Data.Builder() .putBoolean("C",true) .putFloat("D",0f) .build()outputData = data//返回值return Worker.Result.SUCCESS}doW

2021-09-03 21:21:40 298

原创 [译] 充分利用多摄像头 API,写的太详细了

多摄像头是在 Android Pie 中引入的,自几个月前发布以来,现现在已有多个支持该 API 的设备进入了市场,比如谷歌 Pixel 3 和华为 Mate 20 系列。许多多摄像头用例与特定的硬件配置紧密结合;换句话说,并非所有的用例都适配每台设备 — 这使得多摄像头功能成为模块 动态传输 的一个理想选择。一些典型的用例包括:缩放:根据裁剪区域或所需焦距在相机之间切换深度:使用多个摄像头构建深度图背景虚化:使用推论的深度信息来模拟类似 DSLR(digital single-lens refle

2021-09-02 21:17:17 787

原创 [译] Kotlin Clean 架构,【工作感悟】

Domain 层: 将执行独立于任何层级的业务逻辑,并且只是一个没有 Android 相关依赖的纯 kotlin 包。Data 层: 通过实现 Domain 层的公开接口,将应用所需的数据分配给 Domain 层。Presentation 层: 将包括 Domain 层和 Data 层,并且是 Android 特定的,用于执行 UI 逻辑。什么是 Domain 层?这将是三个层级中最通用的一个。它将 Presentation 层和 Data 层连接起来,并执行应用相关的业务逻辑。用例用例是应.

2021-09-02 21:15:45 119

原创 [译] Java,安卓开发面试书籍

首先使用 Java 来开始这次实验,使用 Java 开发 Android 算是最常规也是最简单的一种方式。正如前面描述的那样,由于我们仅仅使用了 Java 和 Android 框架来创建这个应用程序,所以它将是最小的,唯一的依赖是 Android 支持库,在这里你可以看到它占用了整个 Apk 内相当多的空间。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eEvT6xhB-1630588428819)(https://user-gold-cdn.xitu.io/2018/3.

2021-09-02 21:14:00 75

原创 zookeeper原理篇-Zookeeper选举过程分析,计算机专业必看

选举过程概述经过前面的zookeeper相关的文章,我们也对zookeeper有一定的了解,知道在zookeeper中存在三种服务器角色,分别是Leader,Follower以及Observer,其中Observer仅仅作为一个监控协调者的作用,并不参与zookeeper对外提供服务以及zookeeper的选举,而zookeeper的选举我们从前面的内容也知道,总共可以分为两种,第一种是当整个zookeeper的集群启动后,进行的选举过程,第二种则是在zookeeper运行期间,当出现Leader崩溃的过

2021-09-02 21:10:41 281

原创 android-bitmap的缓存策略,搞懂这些直接来阿里入职

如何避免消耗过多的流量呢?当程序第一次从网络加载图片后,就将其缓存到移动设备上,这样再次使用这个图片时,就不用再次从网络上下载为用户节省了流量。目前常用的一种缓存算法是lru(least recently used),它的核心思想是当缓存满了,会优先淘汰近期最少使用的缓存对象。采用lru算法的缓存有两种:lrucache和disklrucache,lrucache主要用于实现内存缓存,disklrucache则用于存储设备缓存。###1.lrucachelrucache是api level 12提供.

2021-09-01 12:04:21 93

原创 Android 进阶性能优化,面试必问篇,面试经历分享

一、APP启动优化===========================================================================1、 你对 APP 的启动有过研究吗? 有做过相关的启动优化吗?之前做热修复的时候研究过 Application 的启动原理。项目中也做过一些启动优化。面试官:哦,你之前研究过热修复? (这个时候有可能就会深入的问问热修复的原理,这里咱们就不讨论热修复原理) 那你说说对启动方面都做了哪些优化?程序员:我发现程序在冷启动的

2021-09-01 12:02:51 221

空空如也

空空如也

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

TA关注的人

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