一、手动创建Activity
1. 创建 Activity
选择文件夹 ---> 点击右键 ---> New ---> Activity ---> Empty Views Activity
2. 创建 layout 布局文件
选择res文件夹 ---> 点击右键 ---> New ---> Directory ---> 创建layout文件夹 ---> 选择layout文件夹 ---> 点击右键 ---> New ---> Layout Resource File
3. 打开main_activity.xml ---> 加入一个文本
4. 打开MainActivity ---> 设置页面视图
5. 在 AndroidManifest 中配置主启动器
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
二、用法
1. 提示 Toast
tips:打开ViewBinding功能更方便获取xml里面的元素
2. 菜单 Menu
2.1 创建 menu 文件
选择res文件夹 ---> 点击右键 ---> New ---> Android Resource Directory ---> 创建menu文件夹 ---> 选择menu文件夹 ---> 点击右键 ---> New ---> menu Resource File
2.2 创建菜单
2.3 在 MainActivity 中 显示菜单 启用菜单
3. 销毁 finish()
4. 切换
4.1 显式 Intent
val intent = Intent(this,FirstActivity::class.java)
startActivity(intent)
4.2 隐式 Intent
4.2.1 内部切换
val intent02 = Intent("com.example.appactivity.START_ACTION")
intent02.addCategory("com.example.appactivity.MY_CATEGORY")
startActivity(intent02)
<action android:name="com.example.appactivity.START_ACTION" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.example.appactivity.MY_CATEGORY" />
4.2.1 外部切换
val intent03 = Intent(Intent.ACTION_VIEW)
intent03.data = Uri.parse("https://www.baidu.com")
startActivity(intent03)
4.3 传递数据
4.3.1 向下传递数据
4.3.2 向上传递数据
三、生命周期
1. Activity 状态
1.1 运行状态:在栈顶,全部可见,一般不会回收
1.2 暂停状态:不在栈顶,但是看得见,内存极地才会回收
1.3 停止状态:不在栈顶,页面已经看不见,内存不够就会回收
1.4 销毁状态:已经出栈了,直接回收
2. Activity 生存期
2.1 onCreate() 每个Activity中都重写了这个方法,它会在 调用,应该在这个方法中完成Activity的初始化操作,比如加载布局、绑定事件等。
2.2 onStart() 在Activity由不可见变为可见的时候调用。
2.3 onResume() 在Activity准备好和用户进行交互的时候调用。此时的Activity一定位于返回栈的栈顶,并且处于运行状态。
2.4 onPause() 在系统准备去启动或者回复另一个Activity的时候调用。通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶Activity的使用。
2.5 onStop() 在Activity完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动新Activity是一个对话框式的Activity,那么onPause() 方法会得到执行,而onStop() 方法并不会执行。
2.6 onDestroy() 在Activity被销毁之前调用。
2.7 onRestart() 在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。
四、启动模式
1. standard:可以创建无数个Activity实例,每次启动都会创建一个该Activity的新实例 。(默认的启动模式)(邮件)
2. singleTop:如果当前Task的top是已经正在启动的这个Activity,那么就不能重复启动。(登录、推送通知栏...)
3. singleTask:这个Activity只能有一个,且作为它所在的Task的root Activity(检查返回栈中是否有该Activity的实例,有则直接使用并且将该Activity之上的其它Activity统统出栈)。(主页面、扫一扫、购物、确认订单、付款...)
4. singleInstance:这个Activity只能有一个,且它所在的Task也只能有它这一个Activity,是一个单独的返回栈管理。(来电显示、锁屏键等系统应用)
5. singleInstancePerTask :是singleTask的扩展,这个Activity可以有多个实例,但是每个都是所在的Task的root Activity。
五、小技巧
1. 查看在哪个Activity
创建 BaseActivity.kt 文件 --> 需要打印的文件中的类继承 BaseActivity
2. 随时随地退出程序
添加ActivityCollector.kt文件来管理Activity
3. 启动Activity的最佳写法
3.1 在需要打开的.kt文件中添加以下代码,
companion object{
fun actionStart(context: Context,data1: String,data2: String){
val intent = Intent(context,MainActivity::class.java)
intent.putExtra("param1",data1)
intent.putExtra("param2",data2)
context.startActivity(intent)
}
}
3.2 使用 actionStart 方法打开 Activity
MainActivity.actionStart(this,"","")