一、什么是Acticity:
- Acticity是用户与应用程序交互的接口。
- 在应用中通常是一个单独的屏幕页面,用于显示可视化用户界面,并接收与用户交互所产生的事件。
- 由视图控件组成,并对事件作出响应。
二、Acticity类的继承结构:
Acticity在用户看来是一个界面,而在程序开发者看来是一个java程序。
- java.lang.Object
- android.content.ContextWrapper
- android.view.ContextThemeWrapper
- android.app.Activity
- android.view.ContextThemeWrapper
- android.content.ContextWrapper
三、Activity的子类:
四、Acticity生命周期:
- 在android.app.Activity类中,Android定义了一系列方法,在应用程序中通过对这些方法的重写来完成对Activity的创建和使用。
public class Activity extends ApplicationContext {
//Activity启动后第一个被调用的函数,常用来进行Activity的初始化,例如创建View、绑定数据或恢复信息等。
protected void onCreate(){}
//当Activity显示在屏幕上可见时,该函数被调用。
protected void onStart(){}
//当Activity获得焦点,能够与用户交互,接受用户输入时,该函数被调用。此时的Activity位于Activity栈的栈顶。
protected void onResume(){}
//当Activity失去焦点,进入暂停状态时,该函数被调用。一般用来保存持久的数据或释放占用的资源。
protected void onPause(){}
//当Activity不可见进入后台时,该函数被调用。
protected void onStop(){}
//当Activity回到前台,再次可见时,调用该函数。
protected void onRestart(){}
//在Activity销毁时,该函数被调用。
protected void onDestroy() {}
}
onCreate:在首次创建 Activity 时调用。系统向此方法传递一个 Bundle 对象,其中包含 Activity 的上一状态,不过前提是捕获了该状态,而后会调用onStart方法。(可以在此方法中执行所有正常的静态设置 ,比如:创建视图、将数据绑定到列表等等。)
onStart:在 Activity 即将对用户可见之前调用。而后如果Activity转入了前台就会调用onResume方法。 如果此时直接屏幕熄灭或者用户按下home键则会直接调用onStop方法,当然这种情况比较极端。
onResume:在 Activity 即将开始与用户进行交互之前调用。 此时,Activity 处于 Activity 堆栈的顶层,并具有用户输入焦点。当跳转另一个Activity,或者退出当前Activity后会调用onPause方法。
onPause:在系统即将开始继续另一个 Activity 时调用。 此方法通常用于确认对持久性数据的未保存更改、停止动画以及其他可能消耗 CPU 的内容,诸如此类。 它应该非常迅速地执行所需操作,因为它返回后,下一个 Activity 才能继续执行,所以不能执行耗时操作。而后正常情况下会调用onStop方法。但是有一种极端情况,就是如果这个时候快速让 当前Activity 返回前台,则会调用onResume方法。
onStop:在 Activity 对用户不再可见时调用。如果 Activity 被销毁,或另一个 Activity(一个现有 Activity 或新 Activity)继续执行并将其覆盖,就会调用此方法。而后如果 Activity 恢复与用户的交互,则会调用 onRestart 方法,如果 Activity 被销毁,则会调用onDestroy方法。
onRestart:在Activity被停止后再次启动时调用(即屏幕熄灭后再次回到app,按下home键后再次回到app),而后会调用onStart方法。
onDestroy:在 Activity 被销毁前调用,这是 Activity 收到的最后调用。 当 Activity 结束(对 Activity 调用了 finish 方法),或系统为节省空间而暂时销毁该 Activity 实例时,可能会调用它。 你可以通过 isFinishing 方法区分这两种情形。
- Activity类其他方法:
五、Activity常用事件:
onKeyDown(int keyCode,KeyEvent event)//对应按键按下事件
onKeyUp(int keyCode,KeyEvent event)//对应按键松开事件
onTouchEvent(MotionEvent event)//对应点击屏幕事件
六、Activity类创建:
- 创建一个Activity子类,重写onCreate()方法,Activity启动时会调用该方法。该方法调用Activity的setContentView(View view)方法来显示Activity对应的View布局文件。
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);//调用父类的onCreate()方法
setContentView(R.layout.main);//调用布局文件
......
}
}
- 每一个Activity都需要在AndroidManifest.xml文件中注册。
AndroidManifest.xml文件是一个全局配置文件,每增加一个Activity,都需要在AndroidManifest.xml进行配置。方法:
- 为
<application>
元素添加相应的<activity>
子元素。- 在
<activity>
标签中有一个必选属性android:name:Activity类名
。android:label
指定应用程序列表中程序图标下方的文字,如Activity未指定该属性,系统会使用<application>
标签的android:label
属性值来代替。android:icon
属性值指定Activity对应的图标,如果未指定,则系统会使用<application>
标签的android:icon
属性值来代替。
- 创建该Activity类的布局文件 (比如main.xml)。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
</LinearLayout>
关于组件中的@string/hello :
可以将所有要显示的文字信息直接在values\strings.xml文件中进行配置:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello World, Hello!</string>
</resources>
关于组件中的
@+id/mytext
:
@+id
固定,表示给该组件创建一个ID,后跟的mytext
表示组件名,作用是在java程序中通过组件id取得该组件,进行相关监听器和属性的配置。
- 在Activity对应的布局文件中添加必要控件。
七、总结:
- Android项目由若干个Activity程序所组成,每一个Activity都是一个Java类,都需要在AndroidManifest.xml文件中注册;
- 一个Android项目中所有用到的资源都保存在res文件夹之中;
- Android中的组件需要在布局管理器中进行配置,之后在Activity程序中可以使用findViewById()方法查找并进行控制;
- 在布局管理器中定义的每一个组件都有其对应的操作类,用户可以直接实例化这些类的对象进行组件的定义显示;
- 标准的Android项目,所有的文字显示信息应该保存在strings.xml文件中保存。