Activity基本知识

来源:互联网 发布:数据挖掘十大算法 知乎 编辑:程序博客网 时间:2024/05/22 04:51

Activity有很多子类,可以用其子类创建不同的界面。
Activity启动其他Activity有两种方法:
 1.startActivity(Intent intent)
 2.startActivityForResult(Intent intent,int requestCode):指定一个请求码并且可以得到新启动的activity返回的结果。
关闭Activity有两种方法:
 1.finish();
 2.finishActivity(int requestCode):结束以startActivityForResult启动的Activity.




 使用Bundle在Activity之间交换数据
 使用Activity之间的信使:intent来携带数据:
  intent提供了多个重载的方法来携带额外的数据,如下所示:
   1.putExtras(Bundle data):向intent中放入需要携带的数据包。
   2.Bundle getExtras():取出intent所携带的包
   3.putExtra(String name,Xxx value):向intent中按key-value对的形式存入数据。
   getXxxExtra(String name):从intent中按类型取出数据。
  其中Bundle就是一个简单的数据携带包,该Bundle对象包含了多个方法来存入数据。
   1.putXxx(String key,Xxx data):向Bundle放入int .long等类型的数据。
   2.putSerializable(String key,Serializable data):向Bundle中放入一个可序列化的对象。
   3.getXxx(String key):从Bundle取出各种类型的数据。
   4.getSerializable(String key,Serializable data):从Bundle中取出一个可序列化的对象。
   我们可以发现,其实activity之间传递数据也就两种方式,第一是通过Bundle;第二个是直接通过键值对,其实第二种方式只是第一种方式的简写,这种简写方式也是通过Bundle方式来存数据的,当存数据时,如果该intent中已经有了Bundle对象,则直接存,如果没有,则先创建一个Bundle对象,然后再存。
  在接收端的Activity用getIntetn()得到传过去的Intent对象。


使用startActivityForResult启动一个新Activity并返回结果。
 为了获取返回的结果,需要从两个方面着手:
  1.当前Activity需要重写onActivityResult(int requestCode,int resultCode,Intent intent),当被启动的Activity返回结果时,该方法将会被触发,其中resquestCode代表请求码,resultcode代表返回码,这个结果码也是由开发者根据业务自行设定的。
  2.被启动的Activity需要调用setResult()方法设置处理结果。

Activity的回调机制:
 对于Activity来说,当它被开发出来之后,我们只需要在清单文件中配置即可,至于它何时被实例化,何时被调用,对于程序员来说是透明的。

4.3Activity的生命周期与加载模式:
 当Activity处于android应用中运行时,他的活动状态有android以Activity栈的形式管理,当前活动的Activity位于栈顶,随着不同应用的运行,每个Activity都有可能从活动状态转入非活动状态,也可能从非活动状态转入活动状态。

 归纳起来Activity大致会经过如下4个状态:
  1.活动状态:当前Activity位于前台,用户可见,可以获得焦点。
  2.暂停状态:其他Activity位于前台,该Activity依然可见,只是不能获得焦点。
  3.停止状态:Activity不可见,失去焦点。
  4.销毁状态:Activity结束,或Activity所在的Dalvik进程被结束。

  Activity中的周期方法:
   1.onCreate():此方法一个周期只使用一次,相当于人只能出生一次。
   2.onRestart():如果执行了onStop(),又想回到界面,此方法会执行。
   3.onStart():此方法一开,界面就会显示出来,但没有焦点。
   4.onResume():此方法一开,此Activity就处于活动状态,能操作,有焦点。
   5.onPause():此方法一开,会失去焦点。
   6.onStop():此方法一开,界面会看不见。
   7.onDestroy():此方法一开,Activity就死啦。



 Activity的四种加载模式:
 我们在清单文件中配置Activity时,可以指定android:launchMode属性,该属性就是用于配置该Activity的加载模式,该属性支持如下4个属性值。
  1.standard:标准模式,是默认的。
  2.singleTop:Task顶单例模式。
  3.singleTask:Task内单例模式。
  4.singleInstance:全局单例模式。
 
 android是如何管理Activity的呢?
  答:android是通过Task来对Activity进行管理的,我们可以把Task理解为栈。
 那么Activity的加载模式,就负责管理实例化,加载Activity的方式,并可以控制Activity与Task之间的加载关系。

 1.standard模式
  这种模式,每次开启一个Activity,都会进行实例化,然后加载到Task中,不会启动新的Task。
 2.singleTop模式
  当将要创建的目标已经位于栈顶时,系统不会重新创建目标,而是直接复用已经存在的Activity实例。
 3.singleTask模式
  这种模式在同一个Task内只有一个实例,当采用这种模式时,可以分为以下三种情况:
   1.如果将要启动的目标不存在,系统会创建Activity的实例,并将Activity加到栈顶。
   2.如果Activity的实例已经存在,则该模式和singleTop模式一样。
   3.如果Activity实例已经存在,并且不再栈顶,那么该模式会移除Activity实例上的所有东西,使得Activity在栈顶。
 4.singleInstance模式
  也是分两种情况:
   1.如果要启动的目标Activity不存在,系统会创建一个全新的Task,在创建目标Activity的实例,并将他们加入新的Task栈顶。
   2.如果Activity存在,则无论Activity位于那个程序,位于那个Task,都会把它转到前台,显示出来。

如有错误 欢迎批评指正!

1 0