Activity的状态和生命函数
Activity大致包括四个状态
Activity状态
运行状态 | 位于前台且在栈顶,用户可见,可操作。 |
暂停状态 | 其他activity位于栈顶,该activity仍然可见,不可获得焦点(例如,启动一个非全屏或透明的activity) |
停止状态 | 完全被另外一个activity覆盖,不可见,无法获得焦点 |
销毁状态 | 当一个activity处于暂停或停止状态时,它可以被系统清除,进行销毁 |
Activity状态切换时的七个回调函数 官方文档
回调函数
onCreat | Activity第一次被创建时调用。 |
onStart | Activity对用户可见是调用。 |
onResume | Activity被恢复或者可以和用户交互时调用,这时它位于栈顶。 |
onPause | 另外一个Activity要启动或被恢复时被调用。 |
onStop | 另外一个Activity要启动或被恢复且该Activity被完全覆盖时调用 |
onDestroy | 一个finish函数被调用,或系统回收资源销毁是调用 |
onRestart | Activity处于停止状态要被恢复时调用 |
onCreate:用于填充UI,初始化资源,将类变量绑定到引用,启动service等。当Activity被意外终止时,还可使用该函数的参数Bundle恢复状态(通过onRestoreInstanceState也可以实现)
onDestroy:用于起立onCreate所创建的资源。
onStop/onStart:用于注册和注销用于更新界面的Broadcast Receiver 或线程等
Activity的销毁和重建:
一个Activity可能:1、在用户按下返回键时或调用finish()方法销毁
2、系统销毁该Activity以释放资源
如果是情况2那么系统希望在重新创建该Activity时恢复被销毁时的状态,而这些状态是通过键值对保存在Bundle中的。
通过重写onSaveInstanceState(Bundle saveData)把Activity的状态信息保存在Bundle中。然后,系统会把该Bundle传递给onCreate(Bundle saveInstanceSate)和 onRestoreInstanceState(Bundle)这两个方法中
Activity的配置
对于每一个Activity都需要在应用程序的配置文件AndroidManifest.xml进行配置,如
其中只有android:name是必须的。
<activity
android:name="com.example.activitytest.SecondActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="com.example.activitytest.MY_ACTION"/>
<action android:name="skq.action"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
需要指定的属性包括
name:该Activity实现的类
icon:该Activity对应的图标
label:该Activity的标签
<intent_filter/>:指定Activity可以响应的action
Activity的启动和关闭
对于一个应用程序会有一个Activity作为程序入口,该应用程序启动时会执行该Activity。它的配置如下
<activity
android:name="com.example.activitytest.FirstActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
其他Activity的启动都是由入口Activity启动或其他Activity启动,启动方法有两个
这两个方法对应有两种模式(隐式启动和显式启动)见Intent 和 IntentFilter
1.startActivity(Intent intent):正常启动其他Activity。
2.startActivityForResult(Intent intent,int requestCode):具体内容
以请求码启动Activity,该Activity会等待启动的Activity的结果返回(如需要用户选择省份)。
通过返回码可以判定跳转到哪个Activity和选择了什么信息。
子activity要和主activity通信,通过setResult(int resultCode, Intent data)
resultCode:操作成功与否(基本信息)
data:附加数据(如上面说到的省份)
对于返回的RequestCode,通过重写onActivityResult(int requestCode, int resultCode, Intent data)主activity就可以进行判断
第一个参数requestCode可以判断该Activity跳转到哪个子Activity
第二个参数是子Activity的操作结果,可以是RESULT_CANCELED或RESULT_OK等等
第三个参数是子Activity返回的额外数据
Activity的关闭
finish()正常关闭当前Activity
Activity间传递数据的4种方法
1.通过Intent
startActivity(Intent data)
startActivityForResult(Intent data,int requestCode)
Intent中通过携带Bundle对象进行数据传递
Bundle对象是一个保存键-值对的map,值必须是parcelable的对象。
2.静态变量
把Activity类中的变量定义为类变量(static)就可以了
3.剪切板
发送数据(复制到剪切板)
ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.setText("data");
接 数据收
ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE);
clipboard.getText().toString();
4.全局对象
为app定义一个全局对象继承Android.app.Application类。然后再AndroidManifest.xml中注册。
然后通过getApplication( )获得该类。