一、Activity简介
Activity是用户接口程序,原则上它会提供给用户一个交互式的接口功能。
Activiy本身没有页面,Activity类创建了一个窗口,通过setContentView(View)接口吧UI放到activity创建的窗口上实现图形化。
Activity之间通过Intent通信。
android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity.
二、Activity的生命周期
Activity声明周期的解释
No. | 方法 | 类型 | 描述 |
1 | onCreate | 实例化 | 当Activity第一次启动的时候,触发该方法,完成初始化。 |
2 | onStart | 启动 | 该方法的触发表示所属Activity将被展现给用户。 |
3 | onResume | 交互 | 当一个Activity和用户发生交互的时候,触发该方法 |
4 | onPause | 挂起 | 当一个正在前台运行的Activity因为其他的Activity需要前台运行而转入后台运行的时候,触发该方法。 |
5 | onStop | 停止 | 一个活动不再需要展示给用户的时候,触发该方法。如果系统内存紧张,则会直接结束这个Activity,而不会触发 onStop 方法。所以如果有要保存的数据时,应该在onPause时做,可以认为onPause方法或许是活动触发的最后的方法,之后就无法主观控制了。 |
6 | onRestart | 重启 | 当处于停止状态的Activity需要再次展现给用户的时候,触发该方法。 |
7 | onDestroy | 销毁 | 当Activity销毁的时候,触发该方法。和 onStop 方法一样,如果内存紧张,系统会直接结束这个Activity而不会触发该方法。 |
三、Activity跳转时的声明周期
第一个Activity正常启动:onCreate>onStart>onResume;
点击按钮启动第二个Activity:第一个Activity onPause>第二个Activity onCreate>onStaart>onResume>第一个Activity onStop;
当从第二个Activity按返回到第一个Activity时:第二个Activity onPause>第一个Activity onRestart>onStart>onResume>第二个Activity onStop>onDestroy;
四、Activity的启动模式
启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置。Activity有以下四种启动模式。
(1)standard:默认的启动模式,每次激活Activity时,都创建新的Activity实例,并放入任务栈;
(2)singleTop:如果任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例;
(3)singletask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都清除;
(4)singleInstance:另起一个任务栈,只存放该activity的实例。
五、Intent的隐式调用
Intent
(1)显式的Intent,即在构造Intent对象时就指定接收者,这种方式与普通的函数调用类似;
(2)隐式的Intent,即Intent的发送者在构造Intent对象时,并不知道也不关系接收者是谁,这种方式与函数调用差别比较大,有利于降低发送者和接收者之间的耦合。
Intent的使用
(1)显示调用:
Intent intent=new Intent(this,xxx.class);
startActivity(intent);
隐式调用:
Intent intent=new Intent(B带包类名);
startActivity(intent);
AndroidManifest.xml中B类Activity中加intent-filter;
<intent-filter>
<action android:name="B带包类名"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
注:Catery类别,在隐式调用时不指定category或者指定<intent-filter>中配置的任何一个category(除 DEFAULT),就可以访问Activity.
标准Action常量:
标准CAtegory常量
Intent的隐式调用
六、Intent调用系统组件(隐式调用)
(1)Web浏览器:
Uri uri=Uri.parse("http://www.baidu.com");
Intent intent=new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
(2)打开地图:
Uri uri=Uri.parse("geo:113.6741,341566");
Intent intent=new Intent(Intent.ACTION_VIEW,uri);
startActivity(intent);
(3)Uri uri=Uri.parse("tel"10086");
Intent intent=new Intent(Intent.ACTION_DIAL,uri);//调用拨号程序
Intent intent=new Intent(Intent.ACTION_CALL,uri);//直接拨打电话
//在配置文件中<user-permission android:name="android:permission.CALL_PHONE">(android6.0以上需要动态申请)
startActivity(intent);