1.Activity
1.1Activity生命周期
- onCreate()会在Activity第一次被创建的时候调用。
你应该在这个方法中完成Activity的初始化操作 - onStart()这个方法再Actity由不可见的时候调用
- onResume() 这个方法再Activity准备好和用户进行交互时调用
此时Activity一定位于栈顶,并处于运行状态 - onPause()这个方法再系统准备启动或恢复另一个Actity的时候调用。
我们通常会再这个方法中将一些消耗cpu的资源释放掉,以及保存一些关键数据
但这个方法执行速度一定要快,不然会影响到新的栈顶 - onStop()这个方法在Activity完全不可见的时候调用
它和onPause()的区别在于,如果启动的新的Activity是一个对话框式的Activity,那么onPause()会执行,而onStop()不会执行 - onRestart()这个方法在Activity由停止变为运行状态之前调用,也就是Activity被重新启动了
以上7个方法又可以分为以下3种生存期
完整生存期 onCreate()和onRestart()
可见生存期 onStart()和onStop()
前台生存期 onResum()和onPause()
1.2Activity启动模式
1.standard 默认启动模式 每当启动一个新的Activity,它就会在返回栈种入栈,并处于栈顶每次启动都会
创建一个该Activity的新实例
2.singleTop 在启动Activity时如果发现返回栈的栈顶已经是该Activity,则直接使用它,不会创建Activity
的新实例
3.singleTask 每次启动该Activity时,系统都会在返回栈种检查是否存在该Activity实例,如果发现有
则直接使用 ,并把这个Activity上所有其他Activity统统出栈
4.singleInstance 会有一个单独的返回栈来管理这个Activity。不管哪个应用程序调用这个Activity,
都会共用一个返回栈
在 中添加android:launchMode来选择启动模式
示例
<activity android:name=".MainActivity" android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
1.3Activity传递数据
class SecondActivity : AppCompatActivity() {
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when(requestCode){
1 -> if(resultCode == Activity.RESULT_OK){
//
val returnedData = data?.getStringExtra("extra_return")
Toast.makeText(this,returnedData,Toast.LENGTH_SHORT).show()
}
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
web.setOnClickListener {
val intent=Intent(Intent.ACTION_VIEW)
intent.data= Uri.parse("http://www.rshome.xn--ses554g/")
startActivity(intent)
}
phone.setOnClickListener {
val intent=Intent(Intent.ACTION_DIAL)
intent.data = Uri.parse("tel:10086")
startActivity(intent)
}
tranf.setOnClickListener {
val intent = Intent(this,ThirdActivity::class.java)
intent.putExtra("extra_data","爷问你话呢!?")
// startActivity(intent)
startActivityForResult( intent,1)
}
}
//Activity被回收前调用,用来保存数据
override fun onSaveInstanceState(outState: Bundle, outPersistentState: PersistableBundle) {
super.onSaveInstanceState(outState, outPersistentState)
val TempData = "用来保存被销毁前的数据的"
outState.putString("data_key",TempData)
}
修改onCreate()添加以下代码
...
if(savedInstanceState!=null){
val tempData = savedInstanceState.getString("data_key")
//获得Activity被销毁前保存到数据
}
...
/*
Activity最佳实践
1.知道自己在哪个Activity中
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
Log.d("BaseActivity",javaClass.simpleNaame)
}
kotlin中BaseActivity::Class.java相当于获取BaseActivity类的class对象 相当于BaseActivity.class
javaClass表示获取当前实例的Class对象,simpleName获取当前实例的类名
2.随时随地退出程序
新建一个单例类ActivityCollector
object ActivityCollector{
private val activitys = ArrayList<Activity>()
fun addActivity(activity : Activity){
activitys.add(activity)
}
fun removeActivity(activity : Activity){
activitys.remove(activity)
}
fun finishAll(){
for(activity in activities){
if(!activity.isFinishing){
activity。finish()
}
}
}
}
}
*/
1.4启动Activity最佳写法
解决需要传入参数标准问题
class SecondActivity : BaseActivity(){
companion object{
fun actionStart(context : Context,data1 : String,data2 : String){
val intent=Intent(context,SecondAActivity::class.java)
intent.putExtra(“param1”,data1)
intent.putExtra(“param2”,data2)
context.startActivity(intent)
}
}
Kotlin课堂 标准函数和静态方法
Kotlin课堂 标准函数和静态方法
1.1. with
val result = with(obj){
//这里时obj上下文
"value"// with 函数的返回值
}
1.2 run
val result = obj.run{
//这里时obj上下文
"value"// run 函数的返回值
}
1.3 apply
val result = obj.apply{
//这里时obj上下文
}
// result == obj
** 定义静态方法**
kotlin弱化了静态方法,提供了更好的解决方法,单例类
1.1注解
在单例类或companion object中加入@JvmStatic注
class Util{
companion object{
@JvmStatic
fun do(){
println("do static")
}
}
}
1.2顶层方法
创建一个Kotlin文件,在次文件定义任何方法都是顶层方法。都会编译成静态方法