Android 之 Activity

一、手动创建Activity

1. 创建 Activity

选择文件夹  --->  点击右键  --->  New  --->  Activity   --->   Empty Views Activity

1.1
1.2

2. 创建 layout 布局文件

选择res文件夹 --->  点击右键  --->  New  --->  Directory  --->  创建layout文件夹  --->  选择layout文件夹  --->  点击右键  --->  New  --->  Layout Resource File

2.1


2.2
2.3
2.4

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>

手动创建的activity

二、用法

1. 提示 Toast

Toast

tips:打开ViewBinding功能更方便获取xml里面的元素

2. 菜单 Menu

2.1 创建 menu 文件

选择res文件夹 --->  点击右键  --->  New  --->  Android Resource Directory  --->  创建menu文件夹  --->  选择menu文件夹  --->  点击右键  --->  New  --->  menu Resource File

创建menu文件夹
创建menu文件夹
创建 menu 文件
创建 menu 文件

2.2 创建菜单

创建菜单

2.3 在 MainActivity 中 显示菜单 启用菜单

显示菜单 启用菜单
菜单
菜单

3. 销毁 finish()

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

查看在哪个Activity

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,"","")

启动Activity的最佳写法
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。