自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MPAndroidChart 教程:设置数据,设置颜色,androidjni开发书籍

// 设置上面右图的字体Typeface tf2 = Typeface.createFromAsset(getAssets(), “OpenSans-LightItalic.ttf”);dataSet.setValueTypeface(tf2);setValueFormatter(ValueFormatter f) : 为DataSets 数据对象包含的数据设置自定义的 ValueFormatter 。2. Getters / ConveniencegetDataSetByIndex(in

2021-11-20 16:06:52 1555

原创 Linux之X11+OpenGL+EGL绘制(二十),android热修复缺点

varying mediump vec2 pos; \uniform mediump float phase; \\void main() \{ \gl_FragColor = vec4( 1., 0.9, 0.7, 1

2021-11-20 16:03:39 367

原创 LeetCode题解(十)0900-0999,flutter自定义弹窗

Any ping with time in [t - 3000, t] will count, including the current ping.It is guaranteed that every call to ping uses a strictly larger value of t than before.Example 1:Input: inputs = [“RecentCounter”,“ping”,“ping”,“ping”,“ping”], inputs = [[],[1],[

2021-11-20 16:00:35 235

原创 Kotlin协程(一)——之语言特性,Android开发者该学习哪些东西提高竞争力

初步印象协程是线程之下更小的处理单元,本质上协程是轻量级的线程。本文章先把协程的简单用法梳理一遍,至于细节再在以后的文章里结合网络请求、IO操作在进行深入研究。协程比较轻量协程是基于线程的封装,底层还是依赖于线程协程可以简化异步编程相关概念kotlinx.coroutines 是由 JetBrains 开发的功能丰富的协程库。它包含本指南中涵盖的很多启用高级协程的原语,包括 launch、 async 等等。协程基本使用创建协程方式一: GlobalScope.lau

2021-11-20 15:57:27 745

原创 Kotlin你不知道的秘密(二),Github标星25K+超火的Android实战项目

KotlinParsing ktParsing = KotlinParsing.createForTopLevel(new SemanticWhitespaceAwarePsiBuilderImpl(psiBuilder));String extension = FileUtilRt.getExtension(psiFile.getName());if (extension.isEmpty() || extension.equals(KotlinFileType.EXTENSION) || (psiFi

2021-11-20 15:54:13 1089

原创 Kotlin 的协程用力瞥一眼,webrtc音视频开发

这里并不会比较 RxJava 和协程哪个好,或者讨论谁取代谁的问题,我这里只给出一个建议,你最好都去了解下,因为协程和 Rx 的设计思想本来就不同。下面的例子是使用协程进行网络请求获取用户信息并显示到 UI 控件上:????️launch({val user = api.getUser() // ???? 网络请求(IO 线程)nameTv.text = user.name // ???? 更新 UI(主线程)})这里只是展示了一个代码片段,launch 并不是一个顶层函数,它必须在一个对

2021-11-20 15:51:01 691

原创 Kotlin 底部弹出的列表对话框(单选),android开发案例教程与项目实战

private var x :Int = 0override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)tv1.text = “宿舍”;tv2.text = “小红”//默认initDatas()//点击底部弹出的列表对话框ll.setOnClickListener {for (i in 0 until l

2021-11-20 15:48:18 448

原创 kotlin 实战之面向对象特性全方位总结,2021年Android开发突破20k有哪些有效的路径

kotlin 为我们提供了一种混用冲突的解决方案,当继承的类和接口拥有相同签名方法时子类必须重写父类相同签名方法,否则无法编译通过,此外需要显式通过<>语法指定使用哪个基类的方法。案例如下:interface Nb {fun test() {println(“nb”)}}open class Tt {open fun test() {println(“tt”)}}class ChildNb: Nb, Tt() {//当继承的类和接口拥有相同签名方法时子类必须重写父类相同签

2021-11-20 15:45:30 263

原创 Kotlin 在Android开发中那些让人舒适的地方,移动金融应用开发

print("${canNullInt?.toShort()}")// 避免空值 为空给与一个默认值val age = canNullInt ?: 18// 为空返回val time = canNullInt ?: return3延迟加载================================================================这一点可以说是对不可空类型的更进一步优化,开发中总有一些变量是在某些时机才会被初始化,而不是类加载的时候就加载。延迟加载是很好的东西

2021-11-20 15:42:08 1045

原创 Koltin35,搭建android开发环境实验

package com.example.takeout.ui.fragmentimport android.os.Bundleimport android.view.LayoutInflaterimport android.view.Viewimport android.view.ViewGroupimport androidx.fragment.app.Fragmentimport androidx.recyclerview.widget.LinearLayoutManagerimport

2021-11-20 15:39:18 642

原创 Kotlin-编程核心基石—高阶函数,Android开发面试解答之Handler

2. 为什么要引入 Lambda 和 高阶函数?刚接触到高阶函数和 Lambda 的时候,我就一直有个疑问:为什么要引入 Lambda 和 高阶函数?这个问题,官方文档里没有解答,因此我只能自己去寻找。2-1 Lambda 和 高阶函数解决了什么问题?这个问题站在语言的设计者角度会更明了,让我们看个实际的例子,这是 Android 中的 View 定义,我省略了大部分代码:// View.javaprivate OnClickListener mOnClickListener;private .

2021-11-19 17:14:44 459

原创 Kotlin(2) 泛型与集合,android适配问题

t;}}以上是java代码。Java泛型是伪泛型,在编译之后,所有的泛型写法都会被移除,而会用实际的类型去替换。mian函数运行的时候,<T> 被移除。而原来的T,就变成了Object。所以,Plate的字节码反编译过来就应该是class Plate{Object t;Plate(Object t){this.t = t;}Object get(){return t;}void set(Object t){this.t = t;}}那《Android学习

2021-11-19 17:11:45 279

原创 Kotlin Jetpack 实战 _ 09,flutter环境搭建

2. 线程 & 协程有的人会将协程比喻成:线程的封装框架。从宏观角度看,这有一定道理,当然,Kotlin 官方并没有这么宣传过。从微观角度上看,协程有点像轻量级的线程。协程能轻量到什么程度?就算你在一个线程中创建1000个协程,也不会有什么影响。从包含关系上看,协程跟线程的关系,有点像“线程与进程的关系”,毕竟,协程不可能脱离线程运行。协程虽然不能脱离线程而运行,但可以在不同的线程之间切换。看到这,大家应该能理解本文最开始放的那张动图的含义了吧?说了这么多协程的好,但就凭它的”高效“

2021-11-19 17:09:01 211

原创 Kotlin ExpandableListView可扩展二级列表,2021最新Android笔试题目

…3.MainActivity.kt…var nodeAdapter = StatisticsAdapter()mRecyclerView.adapter = nodeAdapternodeAdapter.setList(nodelist)…var groups = getGroups()groups.forEach {//设置item nodesetItemNode(it)}…private fun setItemNode(groupName: String) {val ite

2021-11-19 17:05:37 245

原创 JS Bridge实现,近期想跳槽的程序员必看

==============JS Bridge实际上就是一段JS代码,里面封装好H5访问原生的方法,原生访问H5的方法,即可作为一个“桥”架在 H5 和 原生 中间。2 JS Bridge技术实现要实现JS Bridge,我们需要按以下步骤进行:(注:本篇文章基于Android6以上,以阐述原理为主)第一步:定义一个Native与JS交互的全局桥对象第二步:JS调用Native第三步:Native接收JS传递过来的参数第四步:Native返回数据给JS第五步:JS接收原生传递过来的参

2021-11-19 17:02:38 781

原创 Jetpack系列(三) — LiveData,醍醐灌顶

}companion object {private lateinit var sInstance: StockLiveData@MainThreadfun get(symbol: String): StockLiveData {sInstance = if (::sInstance.isInitialized) sInstance else StockLiveData(symbol)return sInstance}}}观察StockLiveDataStockLiveData.g

2021-11-19 16:59:24 135

原创 IOC架构设计之ButterKnife源码&原理(二)中篇,android开发艺术探索pdf百度云

其它的注解都是一样的。至此查找并解析成员变量的流程就完了。接下来是处理控件事件的监听的流程。注解事件源码流程分析(OnClick,OnItemClick等)我们回到findAndParseTargets方法。//… 省略成员变量的注解// Process each annotation that corresponds to a listener.//处理方法的比如一些OnClick,OnItemClick等for (Class<? extends Annotation> list

2021-11-19 16:56:19 314

原创 httpclient 上传、下载文件,美团Android研发岗二面

// 把一个普通参数和文件上传给下面这个地址 是一个servletHttpPost httpPost = new HttpPost(“http://localhost:8080/xxx/xxx.action”);// 把文件转换成流对象FileBodyFile file = new File(filePath);FileBody bin =&nb..

2021-11-19 16:53:30 92

原创 HTTP1-0、HTTP1-1和HTTP2-0的区别,android移动开发技术与应用

HTTPS可以有效的防止运营商劫持,解决了防劫持的一个大问题。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Rn44PLQV-1637311835413)(//upload-images.jianshu.io/upload_images/138606-0360ca017b6f5eb7.png?imageMogr2/auto-orient/strip|imageView2/2/w/700/format/webp)]五、SPDY:HTTP1.x的优化2012年googl.

2021-11-19 16:50:51 704

原创 Google挖坑后人埋-ViewBinding(下),androidstudio创建项目教程

val binding by inflate()override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding.title.text = “XXX”}}好像这样还可以,不能再省了,毕竟T这个是死的,必须要单独设置。如果是Dialog,同样也可以创建类似的拓展函数:inline fun Dialog.inflate() = lazy {inflateViewBi

2021-11-19 16:48:07 543

原创 IT从业15年,给后辈的一点建议,flutter真机调试闪屏

2、 推荐从C语言入门,不单是因为很多操作系统、网络协议栈开源代码由C/C++实现,更多是因为C语言自身的特性:作为高级语言用户无需关注底层细节,同时能直观的看到数据流向。而且C相对语法规则较为简单,可以短时间的上手应用。最重要的是,遵循C/C++、python的学习方式,比直接学习python更能清晰的知道自己程序的内存等性能状况。3、 不要过于追求第一份工作的工资,甚至可以说不要过于看重前两年的工资(虽然我工作也没满五年,这里的意思是,前两年不要因为多出来的一两千月薪转换自己的行业),也不需要过于学

2021-11-18 13:31:24 91

原创 Http与TCP区别,6年老Android面经总结

在C#编写代码,很多时候会遇到Http协议或者TCP协议,这里做一个简单的理解。TCP协议对应于传输层,而HTTP协议对应于应用层,从本质上来说,二者没有可比性。Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。 所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一

2021-11-18 13:28:26 139

原创 hook(3)实现无清单启动Activity,研发4面真题解析(Android岗)

Instrumentation.ActivityResult ar = mInstrumentation.execStartActivity(…);mMainThread.sendActivityResult(…);第一句,execStartActivity 是 对一些参数的合法性校验,如果不合法,那就会直接抛出异常,比如之前的第二句,sendActivityResult才是真正的跳转动作执行者先进入第一句Instrumentation.ActivityResult ar = mInstrum

2021-11-18 13:25:42 405

原创 GreenDao 3,安卓移动开发基础案例教程

}}db.setTransactionSuccessful();} finally {db.endTransaction();}}save 和 insertOrReplace 区别save it will be inserted (key is null) or updated (key is not null)有key的对象执行更新,无key的执行插入当对象有key但并不在数据库时会执行失败.适用于保存本地列表/**“Saves” an entity to the

2021-11-18 13:22:18 1009

原创 Gradle生命周期&project&task,androidstudio开发环境配置

/**配置当前结点工程和其subproject的所有project(module)*/allprojects {group ‘com.fuyao’version ‘1.0.0’}println project(‘module_use’).group//com.fuyao不包括当前结点工程,只包括它的subproject(子module)/**不包括当前结点工程,只包括它的subproject(子module)*/subprojects {if (project.plug

2021-11-18 13:19:18 174

原创 Glide load源码、缓存机制分析,移动架构师成长路线

…EngineJob<?> current = jobs.get(key, onlyRetrieveFromCache);if (current != null) {current.addCallback(cb);if (VERBOSE_IS_LOGGABLE) {logWithTimeAndKey(“Added to existing load”, startTime, key);}return new LoadStatus(cb, current);}…通过 Jobs去拿

2021-11-18 13:16:04 253

原创 Git下载及配置环境变量,android新语言kotlin

和Node.js一样,大部分设置都只需要保持默认,但是出于我们操作方便考虑,建议PATH选项按照下图选择:Git PATH设置这是对上图的解释,不需要了解请直接跳过 Git的默认设置下,出于安全考虑,只有在Git Bash中才能进行Git的相关操作。按照上图进行的选择,将会使得Git安装程序在系统PATH中加入Git的相关路径,使得你可以在CMD界面下调《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》开源分享完整内容戳这里用Git,不用打开Git Bas.

2021-11-18 13:12:59 284

原创 Framework学习(一)Android-系统架构,2021年冲刺年薪40w

系统运行库层系统运行库层分为两部分,分别是C/C++程序库和Android运行时库。(1)C/C++程序库C/C++程序库能被Android系统中的不同组件所使用,并通过应用程序框架为开发者提供服务。C/C++程序库包括九个子系统,分别是图层管理、媒体库、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。(2)Android运行时库运行时库又分为核心库和ART(5.0系统之后,Dalvik虚拟机被ART取代)。核心库提供了Java语言核心库的大多数

2021-11-18 13:07:32 185

原创 Flutter开发之——数据库,kotlin数组初始化

}}return path;}五 RawData数据库操作5.1 创建数据库rawDBTableCreate() async {var path = await initDb(‘raw_simple.db’);var db = await openDatabase(path);try {await db.execute(‘CREATE TABLE Test (id INTEGER PRIMARY KEY, name TEXT)’);} finally {await db.close

2021-11-18 13:04:47 885

原创 Android自定义View——从零开始实现可展开收起的水平菜单栏

private int menuBackColor;//菜单栏背景色private float menuStrokeSize;//菜单栏边框线的sizeprivate int menuStrokeColor;//菜单栏边框线的颜色private float menuCornerRadius;//菜单栏圆角半径public HorizontalExpandMenu(Context context) {super(context);this.mContext = context;init();}

2021-11-17 16:42:22 679

原创 Android组件内核之间组件间通信方案(四)下篇,flutter页面跳转动画

EMPTY_LAST_NAME,EMPTY_CITY,INVALID_URI}LiveData 没有提供任何开箱即用的方法,但在 Google 的官方示例中,有一个 SingleLiveEvent 的实现,可以解决这个问题。一个生命周期感知的被观察者,仅在订阅后发送新的更新,常用于导航和 Snackbar 消息等事件。这可以避免一些常见问题:在配置变更(如屏幕旋转)期间,如果观察者处于活动动态,SingleLiveEvent 将会发送更新事件。它继承于 MutableLiveData,是一个

2021-11-17 16:39:29 133

原创 Android组件内核之间组件间通信方案(四)下篇(1),2021华为Android高级面试题及答案

interface presenter {fun saveProfile(firstName: String, lastName: String, bio: String, email: String, city: City, gender: String)}}但是,在 MVVM 架构中,ViewModel 不再持有 View 的引用,而是通过 LiveData 或 RxJava 向 View 层暴露数据。一旦 View 订阅了 ViewModel,它就开始接收数据更新。这看似很完美,但当 View

2021-11-17 16:36:53 147

原创 Android系统架构开篇(深度好文,值得收藏,kotlin线程安全

二、Android架构Google提供的5层架构图很经典,但为了更进一步透视Android系统架构,本文更多的是以进程的视角,以分层的架构来诠释Android系统的全貌,阐述Android内部的环环相扣的内在联系。系统启动架构图图解: Android系统启动过程由上图从下往上的一个过程是由Boot Loader引导开机,然后依次进入 -> Kernel -> Native -> Framework ->&n

2021-11-17 16:30:38 423

原创 Android系统架构与系统源码目录,android开发api中文文档

1.1、应用层系统内置的应用程序以及非系统级的应用程序都是属于应用层。负责与用户进行直接交互,通常都是用Java进行开发的。1.2、应用框架层(Java Framework)应用框架层为开发人员提供了可以开发应用程序所需要的API,我们平常开发应用程序都是调用的这一层所提供的API,当然也包括系统的应用。这一层的是由Java代码编写的,可以称为Java Framework。下面来看这一层所提供的主要的组件。Activity Manager(活动管理器)管理各个应用程序生命周期以及通常的导航回.

2021-11-17 16:28:03 268

原创 Android用Canvas画一个真正能跑的跑马灯,死磕原理

p.setColor(Color.WHITE);RectF oval2 = new RectF(0, 0, canvasWidth, canvasHeight);// 设置个新的长方形,扫描测量canvas.drawRect(oval2,p);//开始绘制跑马灯Paint p1=new Paint§;Shader mShader = new LinearGradient(canvasWidth/2-canvansMax,canvasHeight/2-canvansMax , 2canvansMax

2021-11-17 16:25:12 530

原创 Android点将台:颜值担当[-Activity-],项目实践

在onStop之前,会调用onSaveInstanceState 其中有一个Bundle对象可以用来储存数据该对象便是onCreate中的Bundle对象savedInstanceState,下图旋转屏时使用onSaveInstanceState[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OlZygS4x-1637137339039)(https://user-gold-cdn.xitu.io/2019/4/23/16a4a95c5f3796cf?imageView.

2021-11-17 16:22:34 211

原创 Android源码解析——Handler,flutter瀑布流布局

public final boolean sendMessage(Message msg){return sendMessageDelayed(msg, 0);}public final boolean post(Runnable r){return sendMessageDelayed(getPostMessage®, 0);}public final boolean sendMessageDelayed(Message msg, long delayMillis){if (delayMi

2021-11-17 16:19:40 93

原创 Android源码分析:LruCache 缓存机制实现原理,7天拿到阿里Android岗位offer

this.accessOrder = accessOrder;}其中accessOrder设置为true则为访问顺序,为false,则为插入顺序。以具体例子解释,当设置为true时:public static final void main(String[] args) {LinkedHashMap<Integer, Integer> map = new LinkedHashMap<>(0, 0.75f, true);map.put(0, 0);map.put(1, 1

2021-11-17 16:16:31 294

原创 Android大三提前批的钉钉和抖音面筋,阿里挂了HR面,抖音通过收获Offer

–这一次的话,主要就是只投了钉钉和抖音两个部门,然后为了保险起见,让指导老师给我推荐了一个小公司,因为实在太想实习了,想着如果面试不上,总要有一个保底的机会。当然那家公司也挺nice的,我跟老总说了来意之后,老总直说让我全力冲,位置给我留着,所以在这里非常感谢吴总您对我的支持。阿里巴巴 – 钉钉部门阿里钉钉一面(面试时长80min)自我介绍,对自己项目的介绍,架构图呈现因为说自己以后的发展方向是音视频,所以问了我用过哪些现有框架项目中的一些优化问题,MVC -> MVP,Ha

2021-11-16 12:34:50 326

原创 android各种提示Dialog 弹出框

messageTv.setVisibility(View.VISIBLE);}return dialog;}public static Dialog getCustomDialog(final Activity activity, View view, boolean dismissTouchOutside,boolean cancelable, int theme) {//Dialog dialog = theme > 0 ? new FullScreenDialogHUD(activi

2021-11-16 12:32:35 544

空空如也

空空如也

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

TA关注的人

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