自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

王温暖的博客

这货太懒了

  • 博客(28)
  • 资源 (6)
  • 收藏
  • 关注

原创 Android解析Asset目录下的json文件

在app module中的src/main/assets目录下我们准备了两个json文件:destination.json如下:{ "main/tabs/sofa": { "isFragment": true, "asStarter": false, "needLogin": false, "pageUrl": "main/tabs/sofa", "className": "com.test.ppjoke.ui.notifications.Notif

2021-01-31 09:14:21 1083 2

原创 Android自定义注解生成文件

步骤一:新建注解的java module:新module的gradle配置文件如下:plugins { id 'java-library'}dependencies { implementation fileTree(dir: 'libs', include: ['*.jar'])}java { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersio

2021-01-30 20:56:22 635

原创 面试收集:Android 中关于内存泄露有哪些注意点

内存泄露概述内存泄漏的根本原因是一个长生命周期的对象持有了一个短生命周期的对象,造成短生命周期对象没有办法被回收所导致的。在Android程序开发中,当一个对象已经不需要再使用了,本该被回收时,而另外一个正在使用的对象持有它的引用从而导致它不能被回收,这就导致本该被回收的对象不能被回收而停留在堆内存中,内存泄漏就产生了。内存泄露的危害:只有一个,那就是虚拟机占用内存过高,导致OOM(内存溢出),程序出错。对于Android应用来说,就是你的用户打开一个Activity,使用完之后关闭它,内存泄露

2021-01-30 12:33:38 387 1

原创 Android onSaveInstanceState和onRestoreInstanceState调用时机、及大小限制

对于 Activity 的 onSaveInstanceState 方法大家都不会陌生,当 Activity 在不正常销毁的情况下,就会调用 onSaveInstanceState 方法,并将 Activity 中需要保存的数据(比如 View 状态 或者我们自己的数据)保存到这个方法的参数 Bundle 中。一、onSaveInstanceState(Bundle outState)的调用时机onSaveInstanceState(Bundle outState)会在以下情况被调用:1、当用户按下

2021-01-29 17:01:56 3020 1

原创 kotlin中CoroutineScope CoroutineContext的理解

简单来说,CoroutineScope是启动协程的作用域,所有协程都需要在作用域中启动,并且作用域内部创建子协程则会自动传播给子协程;而CoroutineContext则是在协程作用域中执行的线程切换。1、首先我们来看下Scope作用域的理解,示例代码:import kotlinx.coroutines.launchimport kotlinx.coroutines.runBlockingfun main() { runBlocking { val scope0

2021-01-28 17:35:51 3287 1

原创 kotlin SupervisorJob使用

1、更安全地处理async{}中的异常async构建器启动的协程中发生非CancellationException异常,会向外抛出,让其父协程及其他子协程停止。如下,其中一个子协程(即two)失败,并且它抛出了一个异常,第一个async以及等待中的父协程都会被取消, 所有在作用域中启动的协程都会被取消。import kotlinx.coroutines.*fun main() = runBlocking<Unit> { try { failedCo...

2021-01-28 16:12:07 4978

原创 kotlin flow使用

上例中flow2间隔15毫秒发射一个值,而flow需要500毫秒,那么第45毫秒时flow2已经发射到了第三个值是c,此时combine的第一次合并需要等到flow发射第一个值500毫秒时合并为1c,1秒时合并为2c,1500毫秒时为3c。运行结果即是,每隔1秒钟,打印出来一个数字,emit 方法用于发射值,collect方法是收集值,这里需要注意的是,我们可以看到 在main方法协程中,我们可以直接调用loadData的方法,这是因为flow构建块中的代码 就是一个suspend函数。

2021-01-28 13:51:49 3549

原创 kotlin小结

一、协程相关1-1、协程使用官网例子(组合挂起函数):https://www.kotlincn.net/docs/reference/coroutines/composing-suspending-functions.html1、顺序调用: suspend fun doSomethingUsefulOne(): Int { delay(1000L)// 假设我们在这里做了一些有用的事 return13 } suspend ...

2021-01-16 11:14:18 354

原创 kotlin的协程写法

默认顺序调用假设我们在不同的地方定义了两个进行某种调用远程服务或者进行计算的挂起函数。我们只假设它们都是有用的,但是实际上它们在这个示例中只是为了该目的而延迟了一秒钟: private suspend fun jobOne(): Int { delay(2500) return 1 } private suspend fun jobTwo(): Int { delay(1500) return 2 }

2021-01-13 19:42:09 444

转载 Kotlin协程中的异常

【译】Kotlin协程中的异常一个协程突然失败了!现在该怎么办?????当协程因出现异常失败时,它会将异常传播到它的父级,然后,父级将进行如下三步:1)取消其余的子协程,2)取消自身,3)将异常在传播给它的父级。异常将最终到达当前层次结构的根,在当前协程作用域启动的所有协程都将被取消。协程中的异常将在整个协程层次结构中传播虽然在某些情况下传播异常是有意义的,但是大多数情况下这样做是不可取的。设想一个处理用户交互的与UI相关的协程作用域,如果一个子协程抛出了异常,UI的作用域将

2021-01-10 11:38:47 897

翻译 Kotlin协程的取消

【译】Kotlin协程的取消原文:Cancellation in coroutines作者:Florina Muntenescu译者:luckykelan取消正在进行的协程当启动多个协程时,逐个跟踪或取消它们可能会很麻烦,但是我们可以依靠取消父协程或协程作用域,因为这将取消它创建的所有协程。//假设我们已经为以下代码定义了一个作用域scopeval job1 = scope.launch {...} val job2 = scope.launch {...} scope.

2021-01-10 11:37:11 1492

原创 Kotlin异步流

异步流挂起函数异步返回一个值, 而 Kotlin 的异步流返回多个值, 与 RxJava 中的流类似.序列 (Sequences)首先介绍一个数据类型, 序列(Sequences)表示一个延迟计算( lazily evaluated )的集合. 这里延迟即意味着异步, 或者惰性求值. 要取得它的值, 迭代它即可, 它有返回一个迭代器 (Iterator) 的方法, 所以可以在迭代器上进行各种方便的操作, 如filter,take,map等. 因为它是惰性求值的, 所以这个集合的元素可能是无限..

2021-01-10 11:25:57 1160

原创 kotlin协程教程

Kotlin 协程教程什么是协程协程就像非常轻量级的线程。线程是由系统调度的,线程切换或线程阻塞的开销都比较大。而协程依赖于线程,但是协程挂起时不需要阻塞线程,几乎是无代价的,协程是由开发者控制的。所以协程也像用户态的线程,非常轻量级,一个线程中可以创建任意个协程。协程的创建线程的创建方式主要有两种, 继承Thread, 或者实现Runnable接口, 而协程而是通过构建器(coroutine builder方法), 有点类似工厂方法, 调用一个静态工厂方法就可以返回一个协程.corout

2021-01-10 11:22:47 1446

原创 kotlin协程的生命周期与jetpack组件绑定

Android 如何使用协程安卓上, 协程可以帮忙解决两大问题:管理长时间运行的任务, 这些任务可能阻塞主线程, 导致 UI 卡顿. 在主线程上安全地调用网络或磁盘操作.安卓上使用协程的最好方式是使用官方的架构组件, 它们提供了对协程的支持. 目前ViewModel,Lifecycle,LiveData,Room组件提供了对协程一等的支持.ViewModelScope对ViewModel的支持主要是在ViewModel上提供了一个称为ViewModelScope的...

2021-01-10 11:18:00 1055

原创 Jetpack LifeCycle极简使用

使用方式一:继承自AppCompatActivityclass MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) lifecycle.addObserver(object

2021-01-09 16:18:48 159

转载 Jetpack Lifecycle使用

Lifecycle 的作用Lifecycle 是具有生命周期感知能力的组件,也就是说,我们能在 Activity 或者 Fragment 的生命周期发生变化的时候得到通知。我们往往会在 Activity 的各种生命中周期方法里执行特定的方法,比如,进行广播的注册和解绑、Eventbus 的注册和解绑等:public class TestActivity extends AppCompatActivity { @Override protected void onCreate(Bu

2021-01-09 15:58:56 186

原创 依赖注入框架Koin(二)快速上手

一、集成Koin依赖包的添加//1、在project的build.gradle下,buildScript的dependencies添加 classpathbuildscript { repositories { jcenter() } dependencies { classpath "org.koin:koin-gradle-plugin:$koin_version" }}//2、应用koin插件apply plugin:

2021-01-03 17:13:58 766

原创 依赖注入框架Koin(一)知识预览

一、基础概念依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概念。具体含义是:当某个角色(可能是一个Java实例,调用者)需要另一个角色(另一个Java实例,被调用者)的协助时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在Spring里,创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者实例的工作通常由Spring容器来完成,然后注入调用者,因此也称为依赖注入。DI依赖注入框架的优点:

2021-01-03 16:22:49 2140

原创 Jetpack Room数据库(三)源码简析

一、源码架构 room-common、room-runtime、room-ktx三个依赖library CRUD实质使用原生sqlite操作 room内生支持liveData&coroutines 源码概览 Room-Ktx 扩展函数 1. CoroutinesRoom.createFlow/execute//支持协程flow 数据流操作​//支持协程调度器2. CoroutinesRoomKt:>>RoomDat.

2021-01-03 15:15:10 380 2

原创 Jetpack Room数据库(二)进阶使用

一、原有表中添加另外对象--嵌套类使用嵌套类:在原有的表中需要添加另外一个实体类时,可以使用嵌套类。@embedded,将额外对象的内容字段,添加到当前entry的表内,所以,其字段不可与当前entry字段重复例如原来的数据实体类叫DBUser,此时我们需要将另外一个实体类Child的相关属性也添加到原来DBUser表中。首先定义一个Child类,需要注意的是Child类中的属性字段不能够和原来的DBUser中的字段重复,因为最后Child的字段是和DBUser插入到同一个表中的,.

2021-01-03 13:08:09 672 3

原创 Jetpack Room数据库(一)快速上手

一、基础知识1、依赖库 implementation 'androidx.room:room-runtime:2.2.5' implementation 'androidx.room:room-common:2.2.5' implementation 'androidx.room:room-ktx:2.2.5' kapt "androidx.room:room-compiler:2.2.5"2、特性 SQL语句高亮 简单入门 功能强大...

2021-01-03 11:52:13 366

原创 Jetpack lifeCycle快速上手

Lifecycle的好处是什么?通过使用可感知生命周期的组件,可以将生命周期方法中关于这些组件的代码,移动到组件的内部。Lifecyle基础使用使用时不需要添加额外的依赖库,默认创建project的时候,core\appcompat的androidx依赖库即包含对应lifecycle的依赖 。使用时直接继承ComponentActivity的子类即可使用LifeCycle。下面我们通过对比来看下使用lifecycle和原始书写方式之间的差别。我们模拟一个播放器的例子,我们知道播放器需

2021-01-02 16:47:31 153

原创 Jetpack dataBinding(三)上手指南 RecyclerView使用DataBinding

RecyclerView中使用DataBinding下面我们看下在RecycerView中的数据绑定如何使用,整体效果如图:1、在data标签中定义variable <data> <variable name="adapter" type="androidx.recyclerview.widget.RecyclerView.Adapter" /> <variable

2021-01-02 12:23:47 977

原创 Jetpack dataBinding(二)快速上手

一、添加依赖,启用dataBinding库//在module的build.gradle中apply plugin: 'kotlin-kapt'//必须android{ //AS 4.0 以下, dataBinding{ enabled true } //AS 4.1之后 bindingFeature{ dataBinding = true // for view binding : // viewBinding = true }}二、UI改造为使用

2021-01-02 12:02:08 209

原创 Jetpack dataBinding(一)知识速览

一、基础用法1、启用dataBinding//在module的build.gradle中apply plugin: 'kotlin-kapt'//必须android{ //AS 4.0 以下, dataBinding{ enabled true } //AS 4.1之后 bindingFeature{ dataBinding = true // for view binding : // viewBinding = t...

2021-01-02 11:25:08 266

原创 Jetpack ViewModel的创建

viewModel属于lifecycle组件库的一部分一、引入依赖: implementation 'androidx.lifecycle:lifecycle-viewmodel:2.3.0-alpha05' implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.0-alpha05'二、继承viewmodel/或androidViewModel//不带application参数class VmOne

2021-01-01 22:29:49 1091

原创 Jetpack LiveData使用(二)

Jetpack LiveData使用(一)简要介绍了liveData最简单的使用方式。下面我们看看livedata的数据格式转换map、livedata多源监听MediatorLiveData 、livedata多源切换和控制SwitchMap的使用。一、数据转化map由于数据的来源多样,赋值于UI需要将原始数据转换为UI对应的数据类型或者数据bean,此时可以使用map:原始代码仍然基于,这里只需添加变化的map操作,activity的map: //map转

2021-01-01 19:00:30 333

原创 Jetpack LiveData使用(一)

目录LiveData有哪些优势?LiveData 使用LiveData有哪些优势?LiveData 是一个可以被观察的数据持有类,它可以感知 Activity、Fragment或Service 等组件的生命周期。LiveData 是可被观察的数据持有类。具有生命周期(Activity/Fragment/Service)感知的(确保active状态下接受data更新)简单来说,他主要有一下优点。它可以做到在组件处于激活状态的时候才会回调相应的方法,从而刷新相应的 UI。 不用担心.

2021-01-01 18:11:11 312

matjava1.8.rar

MAT旧版本可以用java1.8打开

2021-09-14

PixelRulers.rar

PixelRulers.rar

2021-01-20

Windows环境下32位汇编语言

2016-06-09

登陆成功界面

登陆成功界面

2015-07-21

bootstrap首页制作

bootstrap首页制作,酷炫效果,可以学习使用。

2015-07-21

空空如也

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

TA关注的人

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