首页 > 其他分享 >20240201

20240201

时间:2024-02-02 09:44:20浏览次数:21  
标签:val tempData 20240201 intent Activity Intent data

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

通过在标签下配置的内容,可以指定当前Activity能够响应的action和category
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中,再启动。

标签:val,tempData,20240201,intent,Activity,Intent,data
From: https://www.cnblogs.com/sugar-refinery/p/18002597

相关文章