自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 解决FragmentPagerAdapter方法过时

用到ViewPager和TabLayout时,发现FragmentPagerAdapter()方法过时class MyAdapter(fm: FragmentManager?, fragmentList: List<Fragment>): FragmentPagerAdapter(fm!!){ .......}解决办法:class MyAdapter(fm: FragmentManager?, fragmentList: List<Fragment>):

2021-08-10 21:42:38 7916 1

原创 OkHttp源码解析

1.OkHttp使用方法okhttp是一个第三方类库,用于android中请求网络。implementation("com.squareup.okhttp3:okhttp:4.9.0") val url = "https://www.baidu.com/" val client = OkHttpClient() val request : Request = Request.Builder() .url(url) .build() c

2021-08-10 09:06:16 290 2

原创 6.计算机网络——TCP可靠传输,流量控制,拥塞控制,四种计时器

1.TCP可靠传输可靠传输就是保证接收方收到的字节流和发送方发出的字节流是完全一样的网络层是没有可靠传输机制的,尽自己最大的努力进行交付。而传输层使用 TCP 实现可靠传输,TCP 保证可靠传输的机制有如下几种:校验和 Checksum(稍作了解即可)序列号和确认应答机制(重要)重传机制(重要)流量控制(滑动窗口协议)(非常重要)拥塞控制(重要)1.1校验和由发送端计算待发送 TCP 报文段的校验和,然后接收端对接收到的 TCP 报文段验证其校验和(TCP 的校验和是一个端到端的校验和

2021-08-02 14:59:02 816

原创 5.计算机网络——Session,Cookie,Token

1.CookieHTTP 是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息。每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求发送者和这一次的发送者是不是同一个人。所以服务器与浏览器为了进行会话跟踪,就必须主动的去维护一个状态,这个状态用于告知服务端前后两个请求是否来自同一浏览器。而这个状态需要通过 cookie 或者 session 去实现什么是CookieHttp Cookie 是服务器发送到用户浏览器并保存到本地的一

2021-07-30 16:37:30 297 2

原创 4.计算机网络——HTTP缓存

HTTP的缓存属于客户端缓存,分为强制缓存和协商缓存http缓存机制主要在http响应头中设定,响应头中相关字段为Expires、Cache-Control、Last-Modified、Etag。1.强制缓存当缓存数据库中已有所请求的数据时。客户端直接从缓存数据库中获取数据。当缓存数据库中没有所请求的数据时,客户端的才会从服务端获取数据。缓存方案:服务器响应的header中会用两个字段来表明——Expires和Cache-ControlExpiresExprires的值为服务端返回的数据到期

2021-07-29 16:48:08 172

原创 3.计算机网络——加密,数字签名,数字证书

对称加密:指用来加密和解密的是同一个秘钥。其特点是加密速度快,但是秘钥容易被黑客截获,所以安全性不高。非对称加密:用来加密和解密的是不同的秘钥,它们是成对出现的,称为公钥和私钥,知道其中一个秘钥是无法推导出另外一个秘钥的。用公钥加密的内容需要用私钥才能解密,用私钥加密的内容需要用公钥才能解密。非对称加密的特点是安全性高,缺点是加密速度慢RSA算法属于非对称加密算法,非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据

2021-07-28 11:00:37 432

原创 2.计算机网络——DNS解析

当浏览器输入一个url的时候,第一步,会DNS解析1.定义DNS 即 Domain Name System,字面上理解,其实就是一个域名的名字系统,用来管理域名:ip的对应关系。通俗来讲,就是一个键值对的列表。将服务器名称和 IP 地址进行关联,但它还可以将邮件地址和邮件服务器进行关联,以及为各种信息关联相应的名称。是一种组织成域层次结构的计算机和网络服务命名系统,用于TCP/IP网络,提供的服务是用来将主机名和域名转换成IP地址的工作。在网络世界中真正发挥作用的是 IP,而一般情况下我们访问的都是

2021-07-28 10:56:28 814

原创 1.计算机网络——http

1.OSI参考模型介绍OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,将服务、接口和协议这三个概念明确地区分开来,:服务说明某一层为上一层提供一些什么功能,接口说明上一层如何使用下层的服务,而协议涉及如何实现本层的服务OSI 分层 (7 层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层TCP/IP 分层(4 层):网络接口层、 网际层、运输层、 应用层。五层协议 (5 层):物理层、数据链路层、网络层、运输层、

2021-07-23 11:45:31 204 5

原创 5.Kotlin协程

文章目录1.协程的基本用法1.1 先添加依赖库1.2 开启一个协程1.3 创建多个协程之前的线程非常重量级,需要依靠操作系统的调度才能实现不同线程之间的切换。协程:一种轻量级的线程,仅在编程语言的层面就能实现不同协程之间的切换,从而大大提升了并发编程的运行效率,允许在单线程模式下模拟多线程编程的效果,代码执行时的挂起与回复完全由编程语言来控制。1.协程的基本用法1.1 先添加依赖库 implementation "org.jetbrains.kotlinx:kotlinx-coroutine

2021-06-22 21:20:09 281

原创 4.Kotlin的泛型和委托

1.泛型的基本用法泛型,一般我们需要给任何一个变量指定一个具体的类型,泛型允许我们在不指定具体类型的情况下进行编程两种定义方式:定义泛型类和定义泛型方法定义泛型类class MyClass<T>{ fun method(param : T):T{ return param }}//MyClass是一个泛型类//调用时val myClass = MyClass<Int>()val result = myClass.method(123)定义泛型方法

2021-06-20 18:12:39 174 2

原创 3.Kotlin高阶函数

文章目录高阶函数——一个函数接收另一个函数作为参数,或者返回值的类型是另一个函数,这个函数是高阶函数。作用:允许让函数类型的参数来决定函数的执行逻辑例子:

2021-06-03 22:40:44 386 1

原创 2.初识Kotlin

1.Kotlin标准函数1.1 with函数两个参数:任意类型的对象和Lambda表达式会在Lambda表达式中提供第一个参数对象的上下文,使用Lambda表达式中的最后一行代码作为返回值返回val result = with(object) { //obj的上下文 "value" //with函数的返回值}1.2 run函数在某个对象的基础上调用,只接收一个Lambda参数,在Lambda表达式中提供调用对象的上下文,最后一行代码作为返回值返回val result = obj.run

2021-05-24 16:39:16 118

原创 1.初识Kotlin

概述:编程语言分为两种:编译型语言和解释型语言编译型语言:编译器将编写的源代码一次性编译成计算机可识别的二进制文件,然后计算机直接执行。解释型语言:有一个解释器,程序运行时解释器一行行读取编写的源代码,实时将这些源代码解释成计算机可识别的二进制数据后再执行java代码编译之后生成一种特殊的class文件,只有Java虚拟机才能识别,这个Java虚拟机担当的是解释器的角色,Java属于解释型语言。Kotlin工作原理:开发了一门新的编程语言,然后自己做了编译器,让它将这门新语言的代码编译成同样规

2021-05-09 10:05:25 219 3

原创 Android艺术开发探索——15 Android的性能优化

15.1 布局优化思想:尽量减少布局文件的层级若布局中既可以使用LinearLayout,也可以使用RelativeLayout,那么就采用LinearLayout。RelativeLayout功能比较复杂,布局过程需要花费更多的CPU时间FrameLayout和LinearLayout一样都是一种简单高效的ViewGroup若需要通过嵌套方式实现效果,建议采用RelativeLayout,因为ViewGroup的嵌套就相当于增加了布局的层级,同样会降低程序的性能。采用< include

2021-04-28 22:44:43 267

原创 Android艺术开发探索——11.线程和线程池

1.概述操作系统中,线程是操作系统调度的最小单位,当系统中存在大量的线程时,系统会通过时间片转轮的方式调度每个线程,所以线程不可能做到绝对的并行。采用线程池,一个线程池中会缓存一定数量的线程,通过线程池可以避免因为频繁创建和销毁线程带来的系统开销java中默认情况下一个进程只有一个线程,是主线程。主线程:处理界面交互相关逻辑,必须有较高的响应速度子线程:也叫工作线程,除了主线程以外的线程在Android中,几乎完全采用了Java中的线程机制主线程:也叫UI线程,运行四大组件以及处理

2021-04-27 21:07:47 115

原创 Java多线程的三种实现方式

Java多线程实现的三种方式继承Thread类,实现Runnable接口,使用ExectorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。1. 继承Thread类实现多线程Thread本质上也是实现了Runnable接口的一个实例,它代表一个线程的实例,并且,启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法这

2021-04-24 15:35:08 553

原创 Android艺术开发探索——10.Android的消息机制

1.Handler是Android消息机制的上层接口,通过它可以轻松的将一个任务切换到Handler所在的线程中去执行。2.更新UI仅仅是Handler的一个特殊使用场景:有时候需要在子线程中进行耗时的I/O操作,可能是读取文件或访问网络,当耗时操作完成以后需要在UI上进行一些改变,这时通过Handler就可以将更新UI的操作切换到主线程中去执行。3.Android的消息机制主要是指Handler的运行机制,Handler运行需要底层的MessageQueue和Looper的支撑。MessageQue

2021-04-23 21:12:58 562 6

原创 Retrofit的使用

由于Retrofit是基于OkHttp,所以还需要添加OkHttp库依赖

2021-04-20 16:19:53 2137 1

原创 Android艺术开发探索——4.自定义View

1.自定义View的分类1.继承View重写onDraw方法主要用来实现一些不规则的效果,这种效果不方便用布局组合的方式达到,通常需要静态或者动态地显示一些不规则的图形,需要绘制来实现,需要自己支持wrap_content,并支持padding。2.继承ViewGroup派生特殊的Layout这种方式主要用于实现自定义布局,当某种效果看起来很像几种Veiw组合在一起的时候,可以采取这种方式来实现。这种方式复杂些,需要合适的处理ViewGroup的测量布局这两个过程,并同时处理子元素的测量和布局过程。

2021-04-15 16:33:00 138 1

原创 Android艺术开发探索——4.View的工作原理和工作流程

1.初识ViewRoot 和 DecorView1.1ViewRootViewRoot对应的是ViewRootImpl类,它是连接WindowManager和DecorView的纽带,View的三大流程都是通过ViewRoot来完成。在ActivityThread中,当Activity对象被创建时,会将DecorView添加到Window,同时会创建ViewRootImpl对象,并将ViewRootImpl对象和DecorView对象建立关联View绘制流程从ViewRoot的performTrave

2021-04-13 16:13:51 123

原创 Android艺术开发探索——3.View的滑动冲突

1.1 View的滑动冲突常见的滑动冲突场景可以简单分为以下3种:场景1——外部滑动方向和内部滑动方向不一致场景2——外部滑动方向和内部滑动方向一致场景3——上面两种情况的嵌套场景1:主要是将ViewPager和Fragment配合使用组成的页面滑动效果,左右滑动切换页面,每个页面内部往往又是一个ListView。ViewPager内部处理了这种滑动冲突,ScrollView会出现滑动冲突,需要手动处理,否则会造成内外两层只能一层滑动。场景2:当内外两层都在同一个地方滑动,当手指开始滑动时,系

2021-04-08 19:52:27 131

原创 Android艺术开发探索——3.View事件分发机制

1.点击事件的传递规则点击事件的事件分发就是对MotionEvent事件的分发过程,当一个MotionEvent产生了以后,系统需要把这个事件传递给一个具体的View,这个传递过程就是分发过程。当一个点击事件产生后,一般顺序事件先传递到Activity,再传递到ViewGroup,最终传到View。点击事件的分发过程由三个很重要的方法共同完成:...

2021-04-07 19:40:09 127 2

原创 Android艺术开发探索——3.View基础

3.1 什么是ViewView是Android中所有控件的基类,是一种界面层的控件的一种抽象,本身可以是单个控件也可以是由多个控件组成的一组控件。3.2 View的位置参数这些坐标都是相对于view的父容器来说的,是一种相对坐标后来增加了x,y,translationX,translationY,x,y是view左上角的坐标,translationX,translationY是view左上角相对于父容器的偏移量,默认值为0,x = left + translationXy = top + tr

2021-03-28 17:24:55 135 1

原创 Android开发艺术探索——1.Activity的生命周期和启动模式

1.1 Activity的生命周期1.1.1典型情况的生命周期onCreate: Activity正在被创建,可以做一些初始化工作,比如调用setContentView加载界面布局资源,初始化Activity所需的数据。onRestart: Activity正在重新启动,一般情况,当前Activity从不可见变为可见3.onStart: Activity正在启动,这时Activity可见,但是还没有出现在前台,无法和用户进行交互,还在后台onResume: Activity已经可见了,并且出现在

2021-03-03 17:45:14 175 1

原创 ViewPager,Fragment,TabLayout结合使用

效果图为了实现如上效果,使用ViewPager,Fragment,TabLayout。1.ViewPager直接继承了ViewGroup类,是一个容器,需要在里面添加我们想要显示的内容,类似于ListView,ViewPager类需要PagerAdaoter适配器类提供数据。ViewPager左右切换当前的view,实现滑动切换的效果。2.Tablayout继承自HorizontalScrollView,用作页面切换指示器。3.ViewPager,Fragment,TabLayout结合使用,实现

2020-12-06 21:30:36 1578

原创 Android——服务

1.多线程编程1.1线程的基本用法服务是Android中实现程序后台运行的解决方案。服务依赖于创建服务时所在的应用进程,当某个应用进程被杀掉时,所有依赖于该进程的服务也会停止运行。服务的所有的代码都是默认运行在主线程中,我们需要在服务的内部手动创建子线程,并在这里执行具体任务,否则就有可能出现主线程被阻塞。Android是不允许在子线程中进行UI操作的,为此,提供了一套异步消息处理机制,解决在子线程中进行UI操作的问题。新建AndroidThreadTest项目<LinearLayout x

2020-09-20 22:02:38 125

原创 Android——使用网络技术

WebViewWedView控件,借助它可以在我们自己的应用里嵌入一个浏览器,从而展示各种网页。

2020-09-16 17:18:36 387

原创 Android——使用通知,运用手机多媒体

通知Notification,当某个应用希望向用户发送一些提示信息,而该应用不在前台运行,就借助通知来实现。发出一条通知,手机上方的状态栏中会显示一个通知图标,下拉状态栏后可以看到通知的详细内容。通知可以在活动,广播接收器,服务里创建,一般程序进入后台的时候我们才使用通知。步骤:需要一个NotificationManager来对通知进行管理,可以调用Context的getSystemService()方法得到,接收一个字符串参数用于确定获取系统的哪个服务。传入Context.NOTIFICATION_SE

2020-09-14 16:53:15 247

原创 Android——跨程序共享数据,探究内容提供器

内容提供器主要用于在不同应用程序之间实现数据共享功能,提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性,内容提供器是Android实现跨程序共享数据的标准方式。不同于文件存储和SharedPreferences存储中的两种全局可读写操作模式内容提供器可以选择只对哪一部分数据进行共享。1 运行时权限1.2 在程序运行时申请权限新建一个RuntimePermissionTest项目,使用CALL_PHONE这个权限作为本小节的示例<LinearLayout

2020-09-10 15:49:11 353 1

原创 Android——数据存储持久化技术

Android系统提供了三种方式用于简单地实现数据持久化功能1 文件存储1.1将数据存储在文件中所有数据都是原封不动地保存在文件当中,比较适合用于存储一些简单的文本数据或二进制数据。Context类提供了一个openFileOutput()方法,将数据存储在指定文件中,参数是文件名,文件操作模式,两种操作模式,MODE_PRIVATE,MODE_APPEND,openFileOutput()方法返回的是一个FileOutStream对象,得到这个对象就可以使用Java流的方式将数据写入到文件中了。

2020-09-07 15:29:30 206

原创 Android——详解广播机制

1.1广播机制简介为了便于进行系统级别的广播通知,Android引入了一套广播消息机制,Android的每个应用程序都可以对自己感兴趣的广播进行注册,这样该程序只会接收到自己所关心的广播内容,这些广播可能是来自系统的,也可能是来自其他应用的,Android提供了一套完整的API,允许应用程序自由地接受和发送广播。接受广播的方法引入一个新概念——广播接收器(Broadcast Receiver)。广播主要分为两种类型,标准广播,有序广播。标准广播:是一种完全异步执行的广播,在广播发出后,所有的广播几乎

2020-08-30 18:42:58 963

原创 Android——探究碎片

1碎片是什么碎片(Fragment) 是一种可以嵌入在活动当中的UI片段,能让程序更加合理和充分地利用大屏幕的空间,因而在平板应用十分广泛。2碎片的使用方式2.1 碎片的简单用法写一个最简单的碎片示例,在一个活动当中添加两个碎片,并让这两个碎片平分活动空间 。先创建一个平板模拟器,新建一个项目。新建一个左侧碎片布局left_fragment.xml<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android

2020-08-27 16:29:00 195

原创 Android——UI开发的点点滴滴2

1.2详解四种布局1.2.1线性布局LinearLayoutLinearLayout又称线性布局,这个布局会将它所包含的控件在线性方向上依次排列。android:orientation 属性指定排列方向,vertical是垂直方向,horizontal是水平方向。注意:如果LinearLayout的排列方向是horizontal。内部控件就绝对不能将宽度指定为math_parent,这样的话单独一个控件就会将水平方向占满,同样,若是vertical,就不能将高度指定为math_parent.补充:

2020-08-27 16:26:31 193

原创 Android——UI开发的点点滴滴1

1.1常用控件的使用方法1.1.1 TextView主要用于在界面上显示一段文本信息。补充:android:gravity指定文字的对齐方式,可选值有top,bottom,left,right,center等,可用" | "来同时指定多个值,这里的center相当于center_vertical | center_horizontal.Android中字体的大小使用sp作为单位。1.1.2 Button补充:我们在布局文件里设置的是"button",显示结果却是"Button",这是由于系统会对

2020-08-19 20:11:49 295

原创 Android——探究活动2

Android——探究活动21.3活动的生命周期1.3.1返回栈android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动的集合,这个栈也被称作返回栈(Back Stack),默认情况下每当我们启动一个新活动,他会在返回栈中入栈,并处于栈顶位置,每当我们按下Back键或调用finish()方法去销毁一个活动时,处于栈顶的活动会出栈,这时前一个入站的活动会重新处于栈顶的位置,系统总是会显示处于栈顶的活动给用户。1.3.2活动状态1.运行状态    当一个活动处于栈顶时

2020-08-18 19:54:29 145

原创 Android——探究活动1

Android—探究活动1.活动活动是一种可以包含用户界面的组件,主要用于和用户交互。1.1 Toast可以使用它将一些小信息通知给用户,这些信息会在一段时间后自动消失,并且不会占用任何屏幕空间。protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button butt

2020-08-17 10:58:15 112

原创 初步学习栈,队列

c语言中的栈,队列之前只是简单了解了栈和队列,栈后进先出,先进后出,就像乘坐电梯,最先进来的人是最后一个出去的。之前也用栈的思想做过简单的题,例如括号配对,回文字符串。而队列是先进先出,就跟排队一样,这些都是之前了解到。这次初步学习栈和队列。栈栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。栈中有...

2020-05-03 01:58:09 157

原创 复习链表

无表头链表总结把之前学的链表简单地复习了一下,创建,打印,删除,插入,排序,合并的,是关于没有表头的#include <stdio.h>#include <stdlib.h>#include <string.h>//定义结构体 typedef struct stud{ int data; struct stud *next;}LNode,*...

2020-05-02 23:00:38 135

原创 strlen与sizeof

自己对面试题的理解1、sizeof ,strlen#include<stdio.h> int i;int main(int argc, char *argv[]){ i--; printf("%d %x\n",sizeof(i),i); if (i > sizeof(i)) { printf(">\n"); } else { printf("&l...

2019-11-24 23:04:20 101

空空如也

空空如也

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

TA关注的人

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