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( )获得该类。