1. 什么是Activity
- Activity是一个应用程序组件,它的主要功能是提供界面,用户可以用来交互为了完成某项任务,例如用户登录、拍照、拨号、聊天等。
- 一个应用程序可能由一个或多个Activity组成,这些Activity怎么显示,需要多少个Activity,完全依赖于应用的设计者。
- 一个应用程序必须指定一个Activity作为主Activity,它是程序启动时首先显示的界面。
- 每个Activity默认的被给予一个窗口来绘制,一般的,这个窗口占满整个屏幕,但是他可以比屏幕小并且浮在另一个窗口的上面。
- 当一个Activity因为新的Activity启动而被停止时,它会收到状态变化的通知,这样的变化有多个,每个都会引起系统调用一个相应的回调方法以通知Activity,这些回调方法被统称为“生命周期回调方法”。这些回调方法分别在Activity被创建、停止、恢复、销毁时被调用。
2. Activity的使用
-
2.1 如何设置主Activity
在项目的AndroidManifest.xml
文件中,声明对应的Activity,同时在activity标签内添加以下代码:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
整体示例如下:
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
-
2.2 如何启动其它的Activity
那么,我们如何在一个Activity中启动另外一个Activity呢?这里就需要我们使用另外一个重要的组件Intent(关于Intent组件在这里就不做过多的赘述了)。
示例如下(在ManinActivity启动LoginActivity--即跳转到LoginActivity界面):
Intent intent = new Intent();// 新建一个Intent对象
intent.setClass(MainActivity.this, LoginActivity.class);// 设置Intent目标
startActivity(intent);// 执行跳转(启动LoginActivity)
-
2.3 Activity常用的数据传递方式
- 1.Intent
传递(value可以为其它数据类型,key必须为String类型):
- 1.Intent
Intent intent = new Intent();// 新建一个Intent对象
intent.setClass(MainActivity.this, LoginActivity.class);// 设置Intent目标
intent.putExtra("key", "value");// 设置要传递内容的key与value
startActivity(intent);// 执行跳转(启动LoginActivity)
获取(在目标Activity使用一下代码获取传递的值):
getIntent().getStringExtra("key");// 获取执行传递动作的Intent根据key获取对应的value值
- 2.SharedPreference
存:
SharedPreferences sp = getSharedPreferences("test", 0);// test->存储文件名
SharedPreferences.Editor edit = sp.edit();
edit.putString("username", "admin");
edit.putString("password", "123456");
edit.commit();
取:
SharedPreferences ps = getSharedPreferences("test", 0);// test是存储文件
String userName = ps.getString("username", "defaultName");
String passWord = ps.getString("password", "defaultPw");
> SharedPreference存储步骤:
1.根据Context获取SharedPreferences对象;
2.利用edit()方法获取Editor对象;
3.通过Editor对象存储key-value键值对数据;
4.通过Editor对象存储key-value键值对数据。
- 3.SQLite
关于SQLite内容过多,推荐参阅 [ANDROID开发之SQLite详解](http://blog.csdn.net/harvic880925/article/details/24516545)。
注:
Intent/ShraedPreference
适合较简单的数据传输,一般用于传输一些简单的参数或配置信息。较大数据量的传输,一般使用SQLite
的方式实现。
3. Activity的启动模式#
- 3.1 standard 默认的启动模式,每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈;
- 3.2 singleTop 如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例;
- 3.3 singleTask 如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都出栈;
- 3.4 singleInstance 如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例。
启动模式:启动模式简单地说就是Activity启动时的策略,在
AndroidManifest.xml
中的标签的android:launchMode
属性设置.
任务栈:每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序.
4. Activity的生命周期
- 启动Activity:先调用
onCreate()
,然后调用onStart()
,最后调用onResume()
,Activity进入运行状态; - 当前Activity被覆盖或锁屏:先调用
onPause()
,然后暂停当前Activity的执行状态; - 解除Activity覆盖或解锁时:先调用
onResume()
,然后再次进入运行状态; - 跳转到新的Activity界面或按
Home
键回到主屏:应用进入后台,系统会先调用onPause()
,然后调用onStop()
,转入停滞状态; - 返回到该Activity:先调用
onRestart()
,然后调用onStart()
,最后调用onResume()
,重新进入到运行状态; - 在第1.2/1.4步骤情况下,当前Activity被系统kill,用户操作退回到当前Activity:调用
onCreate()->onStart()->onResume()
,进入运行状态; - 用户退出当前Activity:先调用
onPause()
,然后调用onStop()
,最后调用onDestory()
,结束当前Activity的运行状态.