首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

static修饰函数什么特点(static可以修饰所有的变量)

static修饰函数叫做静态函数,静态函数两种,根据其出现地方来分类: 如果这个静态函数出现在类里,那么它是一个静态成员函数; 静态成员函数作用在于:调用这个函数不会访问或者修改任何对象...其实很好理解,类静态成员(变量和方法)属于类本身,在类加载时候就会分配内存,可以通过类名直接去访问;非静态成员(变量和方法)属于类对象,所以只有在类对象产生(创建类实例)时才会分配内存,然后通过类对象...如果它不是出现在类中,那么它是一个普通全局静态函数。 这样static函数与普通函数区别是:用static修饰函数,限定在本源码文件中,不能被本源码文件以外代码文件调用。...而普通函数,默认是extern,也就是说它可以被其它代码文件调用。   在函数返回类型前加上关键字static,函数就被定义成为静态函数。...因此定义静态函数以下好处:    其他文件中可以定义相同名字函数,不会发生冲突。    静态函数不能被其他文件所用。

1.5K20

再谈协程之viewmodel-livedata难兄难弟

但这样创建ViewModel个小问题,我们可以看下它源码,在ViewModelProvider中,它默认NewInstanceFactory是使用反射来创建VIewModel无参构造函数,如下所示...image-20210909172649839 但这种情况下,只适合不带参数ViewModel,如果我们ViewModel初始化需要传入参数呢?例如下面这样。...,通过getConstructor和newInstance函数反射调用带参数构造函数,返回ViewModel实例。...实例来使用,参考系统ComponentActivityviewModels拓展,创建一个自定义viewModel拓展函数,将自定义Factory实现代码传递进来即可。...而且该协程构造器返回一个不可变LiveData,可以直接暴露给对应UI层使用,在作用域中,可以通过emit()函数来更新LiveData数据。 这样整体流程就通了,而且,非常简单不是

1K40
您找到你想要的搜索结果了吗?
是的
没有找到

安卓开发中Model-View-Presenter(MVP模式)

因此,我们可以将视图和服务理解为发出事件和接收信息黑盒(通过输入和输出“电缆”),我们Presenter 将负责将组件输入电缆连接到另一个组件输出电缆,反之亦然。...View 在Android中,我们视图实现将对应于一个活动或一个片段(在示例/项目中是片段),但它可以一个ViewModel,甚至是一个可视化组件。...这里不讨论视图是由N个片段组成活动情况,因为每个片段都有M个演示者,我们可以假设视图是这些片段一个,尽管它们随后被分组到一个片段中(甚至在另一个片段中)。...由于在这个体系结构中,我们组件是接收事件和发出信息黑盒,因此很容易验证在接收X事件时发出了信息Y。...改进 许多事情可以改进,例如: ViewModel: 可以在视图和表示器之间添加一个额外层,表示器负责保存视图状态。

1.6K30

Android Jetpack - LiveData

例如,后台活动在返回前台后立即接收最新数据 配置更改友好 如果由于配置更改(例如设备轮换)而重新创建活动或片段,则会立即接收最新可用数据 资源共享 你可以使用单例模式扩展 LiveData 对象以包装系统服务...LiveData 对象连接到系统服务一次,然后任何需要该资源观察者都可以只观看 LiveData 对象 使用 LiveData 使用 LiveData 常规步骤如下,我们按照下面这些步骤写一个简单例子...你可以通过 removeObserver(Observer) 方法删除观察者 1、创建一个 LiveData LiveData 是一个包装器,可以包装任何数据,包括实现集合对象,例如 List。...对象中接收最新值 class MainActivity : AppCompatActivity() { // 创建 ViewModel private val viewModel by...传递给 switchMap() 函数必须返回一个 LiveData 对象,如以下示例所示: private fun getUser(id: String): LiveData { ..

1.9K30

JetpackNote---基于Jetpack学习笔记APP

Jetpack源码解析—LiveData使用及工作原理 5. Jetpack源码解析—ViewModel基本使用及源码解析 6. Jetpack—Paging你知道怎样上拉加载?...背景 在我Jetpack_Note系列中,对每一篇分析都有相对应代码片段及使用,我把它做成了一个APP,目前功能还不完善,代码我也上传到了GitHub上,参考了官方Demo以及目前网上一些文章...,兴趣小伙伴可以看一下,别忘了给个Star。...4.4 ViewModelViewModel模块,屏幕中央为一个计时器,通过使用ViewModel存储计时器值,将屏幕方向发生改变后,数据仍然存在不会销毁。...通过点击 查看Fragment共享Demo 可以查看两个Fragment共享了同一个ViewModelSeekBar值。 5. Jetpack源码解析—ViewModel基本使用及源码解析 ?

95730

30 道 Vue 面试题,内含详细讲解(中)

11、父组件可以监听到子组件生命周期?...keep-alive 是 Vue 内置一个组件,可以使被包含组件保留状态,避免重新渲染 ,其以下特性: 一般结合路由和动态组件一起使用,用于缓存组件; 提供 include 和 exclude 属性...13、组件中 data 为什么是一个函数? 为什么组件中 data 必须是一个函数,然后 return 一个对象,而 new Vue 实例里,data 可以直接是一个对象?...且 JS 里对象是引用关系,如果组件中 data 是一个对象,那么这样作用域没有隔离,子组件中 data 属性值会相互影响,如果组件中 data 选项是一个函数,那么每个实例可以维护一份被返回对象独立拷贝...改变 store 中状态唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态变化。 16、你使用过 Vuex

1.2K30

【译】LiveData三连

尽管你可以一个函数作为参数而不是UI组件本身传递,但在这里你也应该知道UI组件生命周期,因为该函数通常会操作该组件UI元素。...我希望你能从这篇文章中获得一些关于LiveData知识,了解它在哪些情况下可以提供帮助,如何使用它,以及为什么它可能是一个比其他现有方法更好解决方案。其他想法更好解决方案?...易于理解和实现,使用干净代码架构。 小型API以减少使用ViewModel所需知识。 可能提供参数ViewModel很多时候需要接受参数来加载其数据。...整个公共API是一个方法 contacts() ➕我们可以提供参数ViewModel甚至可以同时处理多个参数。 ➖仍然在ViewModel中保留一些可变状态。...整个公共API是一个方法 contacts() ➕ViewModel在构造函数中接受参数,不可改变,可测试性强。 这需要额外代码来钩住ViewModelFactory,以便我们可以传递动态参数

1.6K20

写给初学者Jetpack Compose教程,使用State让界面动起来

mutableStateOf()函数就是用于创建一个可变State对象,参数中传入是初始值。...唯一区别就是,第一个函数count是由State对象赋值,而第二个函数count则是传递进来参数。...基于这点区别,我们就可以将第一个函数称之为状态Composable函数,而第二个函数则是无状态Composable函数。...刚才也说了,状态Composable函数通常在复用性方面会存在一些问题。而现在Counter函数已经无状态了,它复用性会更加出色?我们来试试吧。...通常在Activity中接收来自ViewModel数据变更,LiveData和Flow这两种方式。这两种方式我们都会进行介绍。

54820

MvvmCross 框架中 ViewModel 之间导航以及生命周期

ViewModel 生命周期 基于依赖注入创建 (Construct) Mvx 提供了一个依赖注入容器, 它在初始化 ViewModel 时就使用了依赖注入, 比如 ViewModel 构造函数是这样...基于约定初始化 (Init) ViewModel 构造函数执行完成之后, Mvx 接下来会调用 ViewModel Init 方法, 这个方法接收 ShowViewModel 传递参数, Init...方法参数可以以下几种形式: 多个简单类型参数 使用多个简单类型参数, 签名如下所示: public void Init(int a, string b, float c) 要调用这种签名类型参数...一个复杂类型参数 Init 方法还可以使用一个复杂类型参数, 并且只能有一个参数参数成员只能包含简单类型, 如下所示: public void Init(Parameter param) 要调用这种类型参数...上面的三种形式 Init 方法可以同时出现在一个 ViewModel 中, 不过推荐是在一个应用中只是用一种风格 Init 方法。

77430

Jetpack Hilt 依赖注入框架上手指南

并在运行时候通过从相关容器中获取出来 B 对象并注入到 A 类中 字段中。 这样做好处是什么? 如果有很多个类需要使用 B 类。难道都要在各自类中进行 new B() 。...在使用时候可以指定使用范围,事情作用在对应生命周期当中。...使用 @Module 注解类,需要使用 @InstallIn 注解指定 module 范围 增加了 @Module 注解类,其实代表就是一个模块,并通过指定组件来告诉在那个容器中可以使用绑定安装...使用 @Binds 进行接口注入 Binds:必须注释一个抽象函数,抽象函数返回值是实现接口。通过添加具有接口实现类型唯一参数来指定实现。...同样,如果一个仅包含片段库并托管在应用程序活动中,那可能会遇到类似的情况,您希望库片段是独立,单让 FragmentComponent 对象作为 ActivityComponent 并没有意义。

1.4K20

Kotlin 和 JetPack 项目实战(一)

()" 空括号代表函数参数," -> T "代表函数将会返回 泛型 T 对使用函数 lock 的人来说 //大括号内就是所填入 body 函数 lock(body = { "" })...//kt 约定,只有一个 Lambda 表达式方法应该将大括号移到小括号外侧,于是变成以下 lock() { "" } // 其实空小括号也可以省略,尖括号内泛型也由于 kt 语言自动推断功能...,会根据大括号内返回值自动变化,故又可以省略 lock { "" } 回到 initTitleBar 这个方法,返回一个 kt 扩展函数 /** * 创建类型安全构建器方法 */ fun...这意味着我 们需要向函数传递⼀个 T 类型实例,并且我们可以函数内部调⽤该实例成员。...就传递到了类 DownloadViewModel(val novelId : String) 中啦 --- 以上是一个我在项目中构思简易 MVVM 框架,为了便于介绍,删除了不少代码,如果按照这些步骤什么觉得不好

95610

Hilt-依赖注入框架上手指南

片段 。...注意:在Kotlin中,仅包含@Provides函数模块可以是object类。这样,提供程序就可以得到优化,并且几乎可以内联在生成代码中。...Binds作用就在于此。 需要注意以下使用条件: Binds 必须注释一个抽象函数,抽象函数返回值是我们为其提供实现接口。通过添加具有接口实现类型唯一参数来指定实现。...,继续代码演示 接着一个具体实现类 BookImpl ,这里我们使用构造函数注入 并且注入了 BookDao 用来处理具体数据存储。...这里我们用到了挂起函数,对于这块不怎么熟系同学,可以理解为,其相当于一个标记位,提示编译器这块可能会有耗时操作,挂起函数即逻辑上一个处理。具体理解可参考扔物线等大佬解释,这里不做过多解释。

1.6K10

Google推荐在Compose中使用collectAsStateWithLifecycle替代collectAsState

collectAsStateWithLifecycle collectAsStateWithLifecycle 是一个可组合函数,它从流中收集值并以生命周期感知方式将最新值表示为 Compose State...您可以在 minActiveState 参数中配置此生命周期状态。  ...以下代码片段演示了如何使用 collectAsStateWithLifecycle 来收集可组合函数 ViewModel 已暴露 StateFlow uiState 字段: @OptIn(ExperimentalLifecycleComposeApi...UI 可以通过使用 collectAsStateWithLifecycle 收集 UI 状态来帮助释放资源。 ViewModel 可以通过以收集器感知方式生成 UI 状态来执行相同操作。...运行 Android 应用时,一些重要因素会影响用户体验和设备系统健康: CPU 使用率:在所有设备组件中,CPU 电池消耗量最高。电池寿命是用户长期关注问题。

2.9K20

会写「18.dp」只是个入门——Kotlin 扩展函数和属性(Extension FunctionsProperties)

那这……和成员函数什么区别?这种奇怪又绕脑子知识什么用?听我继续讲。...同样,跟普通函数引用一样,扩展函数引用也可以被调用,直接调用或者用 invoke() 都可以,不过要记得把 Receiver 也就是接收者或者说调用者填成第一个参数: (String::method1...Receiver 也就是接收者或者调用者作为第一个参数填进去。...最终 Kotlin 给我们方案就是:在这种调用方式下,增加一个函数参数,让我们把第一个参数位置填上调用者。这样,我们就可以函数引用来调用成员函数和扩展函数了。...但同时,又有一个问题我不知道你们发现没有:既然 Receiver 函数可以以无 Receiver 方式来调用,那……它可以赋值给无 Receiver 函数类型变量

89610

flutter全局数据共享通知方案

StoreProvider 这里是他构造函数,这里参数比较简单,可以直接就了解一下 const StoreProvider({ Key key, @required Store...转换为了ViewModel,转了之后,实际上就是可以更好将数据交给builder去构建view,是?...难道不是?我们前面提到了store可以接受到一个改变里面数据action,那么这些action是谁给处理呢?...回过头来看Store构造函数,里面的第一个参数是reducer,reducer英文翻译为减速器,还原剂,反正就是听着挺别扭,他不就是一个状态转换器嘛,数据有一个状态,经过action处理,变成另外一个状态...这种需求到处都有啊,大名鼎鼎okhttp,处理一个http请求也可以说成是一个一系列请求参数json请过action后端服务器处理变为另外一串json,对么,那么对请求头,请求参数校验一些处理,

6K191

knockout + easyui = koeasyui

要让一个后端开发者来理解vue或者是reactVNode、状态器、组件等,都是那么一点点为难(反正我转型时,对这些都是很有困惑)。...此方法接受一个字符串名称,以及一个对象(至少包含一个template或viewModel属性),其中viewModel可以一个对象,也就是一个function。...根据easyui组件名动态创建一个function,然后赋值给viewModel,代码片段如下: let plugins = this.easyui.plugins; //动态生成一个...但这个时候又出现了另一个问题,什么时候进行绘制重绘呢? 2.3 配置参数改变后,如何即使反馈给easyui 这一步就是解决绘制和重绘问题。...这里我们要了解一个koloader概念,他相当于是组件渲染器向外提供勾子,可以自定义一些内容。

1.4K30

《Vue入门》| 一记敲门砖,敲近你我它!

1、v-text 两个 h1 标签,一个默认值,一个无默认值,我们都使用了 v-text 指令,来看结果 值得高兴是,v-text 如我们所愿生效了,但是又有些许不对劲,第二个 h1 自己默认值...(@) 我们在上面方法函数中出现了 e 这个参数,不知道细心小伙伴有没有注意到~ 在原生 DOM 事件绑定中,可以在事件处理函数形参处,接收事件参数对象 event,同样,在 v-on 指令所绑定事件处理函数中...,我们一样可以通过上述方式获取到 事件参数对象 event 这个时候如果调用函数没有形参还好,但是在存在形参情况下我们又该如何解决?...我们先试一试 可以发现这种方法不得行,我们事件参数对象被覆盖了!那这就可以说到 vue 为我们提供一个 特殊变量 event,该变量用来表示原生事件参数对象 event。...为了给 vue 一个提示,以便它能跟踪每个节点身份,从而在保证状态列表被正确更新前提下,提升渲染性能。此时,需要为每项提供一个唯一 key 属性!

3.7K20

Jetpack新成员,一篇文章带你玩转Hilt和依赖注入

但是到了仓库层,一个尴尬事情出现了,谁应该去负责创建仓库实例呢?ViewModel?...不对,ViewModel只是依赖了仓库而已,它不应该负责创建仓库实例,并且其他不同ViewModel也可能会依赖同一个仓库实例。Activity?...第三,抽象函数返回值必须是Engine,表示用于给Engine类型接口提供实例。那么提供什么实例给它呢?抽象函数接收了什么参数,就提供什么实例给它。...但是我们注意到,provideRetrofit()函数接收一个OkHttpClient参数,并且我们在创建Retrofit实例时候还依赖了这个参数。...,provideMyApplication()函数接收一个Application参数,这个参数Hilt是自动识别的,然后我们将其向下转型成MyApplication即可。

2.5K30

七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递

关于实验4 可以传递ViewData,接收时获取ViewBag? 答案是肯定,反之亦然。...如果能够设置Controller和View之间参数传递数据类型,那么上述问题就会得到解决,因此从得出强类型View。 接下来,我们看一个简单例子,如果工资大于15000则显示黄色,低于显示绿色。...是否能将View设置为多个Model使用强类型? 不可以,实际项目中在一个View中想要显示多个Model时以点结束。该问题解决方法将在下一节讨论。...关于实验6 是否意味着,每个Model都有一个ViewModel? 每个View其对应ViewModel。 Model与ViewModel之间存在关联是否是好实现方法?...最好是Model与ViewModel之间相互独立。 需要每次都创建ViewModel?假如View不包含任何呈现逻辑只显示Model数据情况下还需要创建ViewModel

2.2K90
领券