Activity
Activity是Android系统的核心组件之一!由Android系统进行管理和维护!
Activity表现为处理所有与UI相关的业务!
Activity的生命周期
在Android系统中,将Activity也划分出了不同的生命周期阶段,并且在不同的阶段会由Android系统去调用不同的方法,这些方法被称之为“生命周期方法”,共有7个:
- void onCreate() -> 当Activity被创建时,每个Activity对象,该方法仅会被调用1次,通常在该方法中编写初始化相关代码
- void onStart() -> 当界面将要被显示时,该方法被调用的时刻是界面可能已经显示了一部分,但是没有完全显示在屏幕中
- void onResume() -> 当界面完全显示在屏幕中时
- void onRestart() -> 当界面从后台回到前台时
- void onPause() -> 当界面将要被置于后台时,该方法被调用的时刻是界面可能将要离开屏幕了,但是,仍有一部分还在屏幕范围之内
- void onStop() -> 当界面已经完全被置于后台时
- void onDestroy() -> 当界面被销毁时,该方法只会被调用1次,通常用于编写最后释放资源等相关代码
当第1次创建并显示界面时 : onCreate() -> onStart() -> onResume()
当被置于后台时:onPause() -> onStop()
当界面从后台回到前台时:onRestart() -> onStart() -> onResume()
当按下BACK键时:onPause() -> onStop() -> onDestroy()
- 学习Activity的生命周期的意义在于:把合适的代码重写在合适的方法中!
- 永远不要调用任何生命周期方法,这些方法是用于被重写的,是被Android调用的方法!
创建新的Activity
1.必要 继承 :自定义类,继承自android.app.Activity
2.必要 注册:在AndroidManifest.xml文件中,在节点下,添加新的节点,并为该节点配置android:name属性和android:label属性,其中,android:name属性的值应该是自定义Activity类的包名和类名,android:lable属性的值是字符串,会被作为该Activity的标题栏文字,并且,如果该Activity是入口Activity,该属性还会是应用程序列表中的名称!
<application
......>
<activity android:name="cn.tedu.demo.SecondActivity"
android:label="标题">
</activity>
</application>
3.可选 设计界面:在res\layout\下创建新的XML文件,以设计界面的布局
4.可选 应用布局:在自定义Activity类中,重写onCreate()方法,并在该方法中调用setContentView(int layoutResId)方法以加载布局
激活Activity
调用startActivity(Intent intent)方法即可激活Activity!
销毁Activity
调用finish()方法即可销毁Activity!
finish()与onDestroy()
finish()是给开发者调用的方法;onDestroy()是给开发者重写的方法!
一旦调用finish()方法,会使得整个Activity对象走向onPause() -> onStop() -> onDestroy()的流程!
如果希望销毁Activity,则应该调用finish()方法,如果希望决定销毁过程中执行什么代码,则应该重写onDestroy()方法!
如何一次性销毁当前应用程序中所有已经激活的Activity
1.自定义类ActivityManager,并在该类中声明声明public static List<Activity> activities = new ArrayList<Activity>();
该activities用于记录所有已经激活的Activity;
2.自定义类BaseActivity,将这个类声明为abstract,即抽象类,并继承自android.app.Activity,然后,在该类中,重写onCreate()方法,在该方法中调用ActivityManager.activities.add(this);
,并且,重写onDestroy()方法,在该方法中调用ActivityManager.activities.remove(this);
将自身Activity对象从集合中移除,即:已经在过程中销毁的Activity不会在最后一次性销毁时再统一管理;
3.在本项目中所有的其它Activity都应该继承自BaseActivity;
4.当需要一次性销毁所有Activity时,使用Iterator遍历activities集合,逐一调用每个Activity对象的finish()方法!
Activity的状态
- 运行态 Activity正处于前台,完全可见,并可控
- 暂停态 Activity局部处于前台,局部可见,并完全不可控,出现这种状态是由于被另一个非全屏的Activity所遮挡而导致
- 停止态 Activity已经被置于后台,完全不可见,更加不可控
- 终止态 Activity已经被销毁
按键处理
在Activity中,重写onKey???()系列方法,可以实现对按键的处理,例如重写onKeyDown()或onKeyUp()方法,在这些方法中,第1个参数int keyCode表示按下的是哪个键,可以使用KeyEvent类的静态常量KEYCODE_???进行判断。
AlertDialog:警告对话框
使用AlertDialog.Buider对象可以实现配置并创建对话框,常用方法有:
- Builder setIcon(int resId) -> 设置图标
- Builder setTitle(CharSequence title) -> 设置标题栏文字,取值可以是String,也可以是StringBuffer或StringBuilder
- Builder setTitle(int titleResId) -> 设置标题栏文字,取值例如:R.string.app_name
- Builder setMessage(CharSequence msg) -> 设置对话框正文的文字
- Builder setMessage(int msgResId) -> 同上
- Builder setCancelable(boolean cancelable) -> 设置是否允许点击对话框以外的区域以隐藏对话框
- Builder setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener) -> 设置按钮,通常用于表示正面的、积极的、肯定的意义,该按钮会显示在对话框的最右侧
- Builder setNegativeButton(CharSequence text, DialogInterface.OnClickListener listener) -> 设置按钮,通常用于表示负面的、消极的、否定的意义,该按钮会显示在对话框的最左侧
- AlertDialog create() -> 创建对话框
关于AlertDialog的常用方法有:
- void show() -> 显示对话框
- void dismiss() -> 隐藏对话框