一.Activity简介
Activity是Android应用的关键组件,用于与客户交互。
有助于完成系统和应用程序之间的以下重要交互:
- 跟踪用户当前关注的内容(屏幕上的内容),以便系统继续运行托管 Activity 的进程。
- 了解先前使用的进程包含用户可能返回到的已停止 activity,并更高地确定这些进程的优先级,以确保这些进程保持可用。
- 帮助应用处理终止其进程的情况,以便用户能够返回 Activity 并恢复其先前的状态。
- 提供一种方式,让应用实现彼此之间的用户流,并让系统协调这些流。这方面的一个主要示例是分享。
二.Activity的基本用法
(1)为了确保能够使用 activity,必须在AndroidManifes清单中声明这些 activity 及其某些属性。
1.如需声明 activity,需在清单文件中添加 <activity> 元素,其唯一必需属性是 android:name,用于指定 activity 的类名称,此外可以自行添加定义标签、图标或界面主题等 activity 特性的属性。
2.在 <activity> 元素中声明 <intent-filter> 属性可指定activity 可以响应的 intent 类型。此元素的定义包括 <action> 元素,以及可选的 <category> 元素和/或 <data> 元素。以下两句生明表示将该activity指定为程序的主activity.
<activity
android:name=".MainActivity"
android:exported="true"
android:label="@string/app_name"
android:theme="@style/Theme.ActivityTest">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
3.使用<uses-permission> 标签来声明权限,防止对用户比较敏感的操作,如获取隐私等导致程序崩溃,以下是在社交媒体上分享帖子的权限
android:permission=”com.google.socialapp.permission.SHARE_POST”
(2) Activity绑定布局
1.借用kotlin-android-extensions插件
在阅读《第一行代码》中,里面大量使用到了kotlin-android-extensions插件的findViewById(),
我也没在意,因为个人因素,读了半本之后才去实践,发现以下代码报错才已经被废除了
import kotlinx.android.synthetic.main.fragment_place.view.*
以下是《第一行代码》中Activity实现绑定布局,用作对比
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
Log.d("data", "onCreate execute")
}
}
不过,作者也发布了转换使用ViewBinding的方法,学起来也不难,大家可以直接去搜作者文章,我毕竟只是自己总结(kotlin-android-extensions插件也被废弃了?扶我起来-CSDN博客)
2.借用ViewBinding绑定布局
首先,需要在build.gradle中添加依赖,找到buildFeatures,添加以下代码
bulidFeatures
{
viewbinding = true
}
然后,androidstudio会自动生成布局文件对于的Binding类,记得导入
import com.example.包名.databinding.ActivityMainBinding
首先调用activity_main.xml布局文件对应的Binding类ActivityMainBinding的inflate()函数去加载该布局,inflate()函数接收一个LayoutInflater参数,在Activity中是可以直接获取到的。
接下来调用Binding类的getRoot()函数可以得到activity_main.xml中根元素的实例,调用getTextView()函数可以获得id为textView的元素实例。
把根元素的实例传入到setContentView()函数当中,这样Activity就可以成功显示activity_main.xml这个布局的内容了。然后获取TextView控件的实例,并给它设置要显示的文字即可。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.textView.text = "Hello World"
}
}
三.Activity的生命周期
(1)Activity的四种状态
1.运行状态。此时Activity位于栈顶。
2.暂停状态。此时Activity不处于栈顶,但仍然可见,如对话框形式的Activity。
3.停止状态。此时Activity不处于栈顶,且完全不可见,此时系统仍会为Activity保存状态和成员变量。
4.销毁状态。此时Activity已被移除栈,被系统回收。
(2) Activity的七个回调方法
1.OnCreate()。在Activity第一次创建时调用,完成Activity的初始化步骤,加载布局,绑定事件等等。此方法会接收参数 savedInstanceState
,是包含 activity 之前保存状态的 Bundle
对象,通常为空,可以借用该对象与onSavedInstanceState()方法来保存数据,来解决Activity被回收后重新创建时临时数据丢失的问题。
2.OnStart()。在Activity由不可见变为可见时调用,此时 activity 准备进入前台并实现互动。
3.OnResume()。在Activity准备好与用户交互时调用,此时一定处于栈顶,是运行状态。
4.OnPause()。系统准备启动或恢复另外一个Activity时调用。
5.OnStop()。在Activity完全不可见时调用。如果启动对话框形式的Activity,不会执行该方法。
6.OnDestory()。在Activity被销毁前调用。
7.OnRestart()。在Activity由停止状态变为运行状态时调用。