Activity启动模式
Activity有四种启动模式你可以在AndroidManifest.xml中通过给<activity>标签指定android:launchMode来选择启动模式
standard他是默认的启动模式,在不进行显示指定的情况下,会自动使用这种启动模式。他的操作就是,每次启动一个新的activity都会直接调用onCreate()创建一个新的实例,然后置于返回栈栈顶。这样的确定是,即便是同一个页面,也可能会产生很多个,然后叠加,产生资源的浪费。
singleTop解决标准模式的部分问题:他的操作为:在启动Activity时,如果发现该Activity已经处于栈顶时,系统将会直接使用它,而不是创建新的Activity实例。当然,如果栈顶换了新的activity时,他就会是标准模式。
singleTask这里的启动模式意味着,该Activity是一个单例模式,在整个返回栈中都只会有这一个。操作:当启动这个Activity时,系统会检查返回栈中是否存在这个Activity的实例,如果不存在,将会创建该实例,如果存在,那么系统会将返回栈中这个Activity之上的所有activity都 ...
Activity被回收
一般情况下,只有activity被销毁后才hi被回收。可是,当系统内存不足时,他会将处于停止状态的activity也回收了。如果停止状态的activity没被回收,那么再次启动时,将会执行onRestart()方法,然后恢复数据,但是如果被回收后,他会执行onCreate()方法,也就导致,如果这个activity有文本输入框的话,这些数据都会直接消失。
因此为了解决这个问题,Activity提供了一个onSaveInstanceState()回调方法。他在回收前一点会调用该方法。该方法需要一个Bundle参数,也可以用put之类的保存键值对参数。如下代码:
12345override fun onSaveInstanceState(outState: Bundle){ super.onSaveInstanceState(outState) val tempData = "Something you just typed" outState.putString("data_key",tempData)}
数据已经保存了,然后恢 ...
Activity生命周期
返回栈
Activity是可层叠的,每启动一个新的Activity,都会覆盖在原Activity中。然后每次点击返回时,都会销毁掉最上面的Activity。下面的Activity就会重新显示是出来。
Activity状态
运行状态当一个Activity位于返回栈的栈顶时,Activity就处于运行状态。系统最不愿意回收的就是处于运行状态的Activity,因为这会带来非常差的用户体验。
暂停状态当一个Activity不再处于栈顶位置,但仍然可见时,Activity就进入了暂停状态。你可能会觉得,既然Activity已经不在栈顶了,怎么会可见呢?这是因为并不是每一个Activity都会占满整个屏幕,比如对话框形式的Activity只会占用屏幕中间的部分区域。处于暂停状态的Activity仍然是完全存活着的,系统也不愿意回收这种Activity(因为它还是可见的,回收可见的东西都会在用户体验方面有不好的影响),只有在内存极低的情况下,系统才会去考虑回收这种Activity。
停止状态当一个Activity不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。系统仍然会为这种Activ ...
Activity的跳转
activity的销毁只要调用finish()方法即可销毁activity。
Intentintent是Android程序中各组件之间进行交互的一种重要方式,不仅可以指定当前组件要执行的动作,也可以在不同组件传递数据。
activity的跳转
显式跳转,直接确定跳转的类,然后进行跳转
隐式跳转,设定好被跳转activity的响应事件和类别,然后通过触发对应的intent和category进行跳转。
显示跳转Intent有很多构造参数,这里我们选用一个Intent(Context packageContext,Class<?> cls)第一个参数需要一个启动的上下文,而我们的Activity实例就是一个context。第二个参数就是要跳转的目的类(他需要接受一个java的类)例如:123456button1.setOnClickListenner{ val intent = Intent(this,SecondActivity::class.java) //先构造一个intent startActivity(intent) //通过这个intent启动一个Act ...
Activity更替(视图绑定)
kotin已经是google官宣的第一android开发语言。在android开发中,经常需要在activity中去获取某个具体的View属性,一般可以通过findViewById(R.id.button1)的方法来获取View,从而实现具体的逻辑变化。
但是一直使用findViewById()非常不利于代码的整洁性和可观性,因此可以采用视图绑定的方法来简化操作。
在原先的kotlin开发中,他可以通过插件apply plugin: 'kotlin-android-extensions'已经被弃用来实现简单的视图绑定。现在这个插件已经被废除,需要使用其他方法
视图绑定在app目录下的build.gradle配置文件中填入一下内容
1android { ... viewBinding { enabled = true } }
然后就可以便携的在activity中使用视图绑定
123456789override fun onCreate(savedInstanceState: Bundle?) { su ...
Activity的使用(1)
Activity的概念他是一种可以包含用户组界面的组件。他就是一个app的门面,所有可见的内容都是在activity中定义的。
相关配置每个Activity都需要绑定一个布局文件layout以及必须在AndroidManifest注册。
在layout布局文件中,每个元素都应该有一个唯一的id作为标识符。例如:1<Button androd:id="@+id/button1"></Button>
这种特殊的id命名方法,当去掉+号,即@id/button1,就是在xml中引入资源的语法。如果你需要在xml中定义一个id就需要使用@+id/id_name这中语法。
在activity中绑定这个layout文件,只需要使用12setContentView(R.layout.first_layout)//R.layout.first_layout是activity实例调用xml资源的书写方法,他采用.的方式来获取
通过setContenView来绑定这个布局文件
在AndroidManifest中注册这个activity1234567& ...
Android入门(0)
IDEA是一款非常强大的编译器,而且大家常用的AndroidStudio就是基于IDEA开发出来的,因此无论是使用Android Studion还是IDEA都会非常的熟练,他们的快捷键等都几乎保持一致。因此无论是使用idea或者android studio都没有问题。这里我选择使用idea。就不多再下载一个编译器了。使用过程
首先需要安装android SDK他会要求你进行下载,当你下载完成后,你就可以使用idea开发android了
如果是旧UI的话,就可以在开发Android时自己选择模拟的设备了,如图而如果更换了新UI就不会显示这个,你需要通过更多工具获得选择这些工具后,他们就会出现在右栏或者底栏,就可以方便的使用了。
logcat的使用最重要的是他的筛选工具,他可以筛选log的等级,和包名
NVM的安装和使用
#nvm
node:是一个基于 Chrome V8 引擎的 JS 运行环境。
npm:是 node.js 默认的包管理系统(用 JavaScript 编写的),在安装的 node 的时候,npm 也会跟着一起安装,管理 node 中的第三方插件。
npx:npm 从 v5.2.0 开始新增了 npx 命令,>= 该版本会自动安装 npx,附带:npx 有什么作用跟意义?为什么要有 npx?什么场景使用?。
nrm:是一个 npm 源管理工具,使用它可以快速切换 npm 源,默认是官方源,当 npm 下载包过慢时,可能需要切换到第三方源(例如:淘宝、科大…),还有公司私有源地址等等。
nvm:node 版本管理器,也就是说:一个 nvm 可以管理多个 node 版本(包含 npm 与 npx),可以方便快捷的 安装、切换 不同版本的 node。
安装nvm的安装只需要执行以下一条命令linux下
1curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
window ...
kotlin接口和控制继承,可见修饰符
接口在kotlin中,也是使用interface来定义接口的。接口中,可以定义属性和方法,方法可以实现,也可以不实现。但是他们都是默认为open的,也就是可以被继承和重写的。
属性不能赋值,而且实现了这个接口的方法必须重写该属性,添加上get,set方法
未实现的方法在被之后的类实现时,必须把这个方法也同时实现了。
实现的方法(即带方法体的方法)可以不重写,而是直接使用。1234567891011121314151617fun main(){ B().showA() B().showB()}interface A{ val sb:String fun showA(){ println(123) } fun showB(){ println("234") }}class B(): A { override val sb: String get() = sb}
接口的使用还有一个问 ...
kotlin处理集合:可变参数,中缀调用
可变参数在kotlin中创建一个集合,可以往其中传递任意数量的参数进去。
1fun listOf<T>(vararg values:T):List<T>{...}
在kotlin中,是直接使用vararg来说修饰可变参数的。而且kotlin和java的另一个区别就是java中,你可以按照原样传递某个数组进去,而kotlin需要你显式的对这个数组进行解包操作。例如
123val list1 = listOf("1","2")val list2 = listOf(*list1,"3")//最后list2的结果为["1","2","3"]
这个功能被称为展开运算符
中缀调用和解构声明在kotlin中,创建一个map
1val map = mapOf(1 to "One",2 to "Two")
这里的to就是不是一直欧冠你内置的结构,而是一种特殊的函数调用,被称为中缀调用。在kotlin ...