Activity 概念:
应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。
Activity的三个状态:
运行状态(显示在主屏幕上,可见)、停止状态(不可见)、暂停状态(被其他的Activity遮蔽一部分)
Activity的生命周期 (7大方法):
Activity的操作:
1.配置属性:Application有一个主的Activity来作为入口,由它启动其他的Activity
创建一个新的Activity,必须在配置文件中,申明一个Activity。
<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
android.intent.action.MAIN 表示此Activity为App的入口;
android.intent.category.LAUNCHER则表示此入口为系统的图标或快捷方式启动;
但App并不只能有一个入口,也有可能是由intent-filter打开方式启动app。
创建一个简单的Activity
1. 第1步:创建继承于Activity的子类,作为实现Activity的逻辑代码。
2. 第2步:在AndroidManifest.xml文件中在Application节点内创建以下片断,一般用IDE创建时,都已经自己生成对应的XML。
<activity android:name=".activity.Second"></activity>
3. 第3步:在主Activity中调用新的Activity。
startActivity(new Intent(this,Second.class));
一般建议调用Activity的方法由新的Activity(Second类)的静态方法来提供,而调用时,只需传递入对应的参数,由新的Activity来组成Intent进行调用,这样可以把逻辑都放于对应的Activity,代码会显得更加清晰。如以下代码(摘自K-9 Mail开源代码:
public static void actionSettings(Context context, Account account) {
//在这里组装一个Intent
Intent i = new Intent(context, AccountSettings.class);
//加入对应需要的数据,放于Intent里面
i.putExtra(EXTRA_ACCOUNT, account.getUuid());
//启动对应的Activity
context.startActivity(i);
}
Activity的显示顺序队列遵循栈的模型
后入先出,最前打开的Activity在最上面
在同一个app里面每一个Activity被启动后,原来的Activity将会被放入到 Activity返回顺序栈 里面,如图(摘自Android网站):
1、 启动主Activity,可能是用系统的图标启动,也可能是用Intent-filter启动,此时Activity 1就被放入到 Activity返回顺序栈中。
2、 当点击“Start Activity 2”按钮时,系统将拉起新的Activity 2,此时Activity 2将被放入到栈中;
3、 当点击“Start Activity 3”按钮时,系统将拉起新的Activity 3,此时Activity 3将被放入到栈中;
4、 当点击返回按钮时,系统将会把Activity 3退出,返回到Activity 2;
当Finish()的Activity将不会放入到队列中
如图:
1、 主Activity被拉起;
2、 主Activity拉起Activity 1,此时栈中显示如2;
3、 当Activity 1 拉起 Activity 2后,调用了finish()方法,则Activity 1 将不会被放入到栈中,而是直接结束了生命周期,而Activity 2 则被放入栈中,当再次按返回键时,则返回到主Activity;
针对目前有许多的app需要按多次返回键后才能退出,有时还是在同一Activity界面出现多次,可以使用此方法进行解决,例如以下代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.custom);
startActivity(new Intent(this,Second.class));
finish(); //启动后直接调用finish()方法结束生命周期
}