Activity相关知识笔记
Activity的基本用法
手动创建Activity的方法
创建和加载布局xml文件
在AndroidMainifest中注册Activity,这一步通常是自动完成的。
主Activity,启动器Activity
在Activity中添加Menu,添加Toast通知
销毁Activity
使用Intent在Activity之间穿梭
显式Intent
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
隐式Intent
通过在
action和category同时匹配时相应Intent
例
button1.setOnClickListener {
val intent = Intent("com.example.activitytest.ACTION_START")
intent.addCategory("com.example.activitytest.MY_CATEGORY")
startActivity(intent)
}
<activity android:name=".SecondActivity" >
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.example.activitytest.MY_CATEGORY"/>
</intent-filter>
</activity>
隐式Intent更多用法
启动其他应用的Activity,共享功能
同样,自己应用也能相应其他应用的Intent
向下一个Activity传递数据
//In First Activity
putExtra("key",data)
//In Second Activity
val extraData = intent.getStringExtra("key")
//如果传递的是整型数据,则使用getIntExtra()方法;如果传递的是布尔型数据,则使用getBooleanExtra()方法,以此类推
返回数据给上一个Activity
//1
startActivityForResult(intent, 1)
//2
val intent = Intent()
intent.putExtra("data_return", "Hello FirstActivity")
setResult(RESULT_OK, intent)
//3
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
1 -> if (resultCode == RESULT_OK) {
val returnedData = data?.getStringExtra("data_return")
Log.d("FirstActivity", "returned data is $returnedData")
}
}
}
Activity 的生命周期
返回栈
一组存放在栈里的Activity的集合
Activity 状态
运行状态,暂停状态(不在栈顶但是可见),停止状态(不在栈顶不可见),销毁状态。
Activity 生存期
完整生存期(onCreate(),onDestroy()中间)
可见生存期(onStart(),onStop())
前台生存期(onResume(),onPause())
Activity 被回收时的临时数据保存
//保存
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
val tempData = "Something you just typed"
outState.putString("data_key", tempData)
}
//恢复
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d(tag, "onCreate")
setContentView(R.layout.activity_main)
if (savedInstanceState != null) {
val tempData = savedInstanceState.getString("data_key")
Log.d(tag, "tempData is $tempData")
}
...
}
Activity的启动模式
<activity
...
android:launchMode="singleTask"
...>
...
standard:默认,每次启动入栈
singletop:在栈顶就不重复创建新的实例
singleTask:若存在,就把上面其他Activity全部出栈
singleInstance:启用一个新的返回栈来管理这个Activity
Activity的最佳实践
创建BaseActivity,让其他Activity继承,打印Activity名
新建一个单例类ActivityCollector作为Activity的集合,管理Activity的关闭
在companion object中定义一个actionStart()方法,完成Intent的构建,接收所有需要的数据为参数,存在Intent中,再启动。