android中activity详解



所有的活动都要在androidmanifest.XML中注册才能生效:
活动的注册声明要放在<application>标签内,<activity>标签来对活动进行注册。
首先用android:name来指定具体注册那一个活动(.+类名)
              android:label指定活动中标题栏的内容,(给主活动指定的label不仅会成为标题栏的内容 ,还会成为启动器中应用程序显示的名称)
如何想让指定的activity成为程序的主活动需要添加两句声明:
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
隐藏标题栏
在onCreate()方法中添加
requestWindowFeatura(Window.FEATURE_NO_TITLE)

活动的生命周期
android是使用任务栈(task)来管理活动的,一个任务就是一组存放在栈力的活动的集合,这个栈也成为返回栈(backstack)栈是一种后进先出的数据结构,启动一个新活动的时候它会走返回栈中入栈,并处于栈顶的位置,按下back或者调用finish()方法的去销毁一个活动的时候,处于栈顶的活动会出栈,这时前一个入栈的活动就好重新处于栈顶的位置,以此循环
活动的状态
运行--->暂停--->停止--->销毁--->

开始--停止;暂停--恢复;创建--销毁;onRestart()
以上七个方法中除了 onRestart()其他都两两相对,所以又可以将活动分为三种生存期
1.完整生存期
    活动在onCreate()和onDestroy()方法之间所经历
2.可见生存期
    活动在onStart()方法和onStop()方法之间所经历、
3.前台生存期
    活动在onResunme()和onPause()方法之间经历
活动回收
在A活动中启动B活动后,A活动进入暂停状态,如果此时内存不够的话,可能会将A回收掉,此时问题就来了,如果再次返回A的时候虽然A活动会有但是A活动是重新建立起来的,所以在A中看不到原先是数据,如果需要保存A中的数据那么就得引入一个新的(回调)方法 onSaveInstanceState()这个方法。 此方法里面有一个bundle参数,提供了一系列的方法用于保存数据,这样就把数据保存了下来。

数据的恢复

在oncreate()方法中把保存的值取出来即可
  if(savedInstanceState !=nell){
String tempData=savedInstanceState.getString("")
}
Intent的使用详解
①使用显示Intent
Intent intent =new Intent(A.this,B.class);
startActivity(intent);
隐式Intent

与显式Intent相比隐式Intent是一种比较含蓄的Intent。它不指定要启动哪个活动,而是通过配置一些相关信息如:action,category等信息,然后交给系统去分析并找出合适的活动去启动。

Action:用来指明要实施的动作是什么,比如说ACTION_VIEW, ACTION_EDIT等。具体的可以查阅android SDK-> reference中的Android.content.intent类,里面的constants中定义了所有的action。

一些常用的Action:

ACTION_CALL  启动一个电话.
ACTION_EDIT 显示用户编辑的数据.
ACTION_MAIN  作为Task中第一个Activity启动
ACTION_SYNC 同步手机与数据服务器上的数据.
ACTION_BATTERY_LOW 电池电量过低警告.
ACTION_HEADSET_PLUG 插拔耳机警告
ACTION_SCREEN_ON 屏幕变亮警告.
ACTION_TIMEZONE_CHANGED 改变时区警告.

Category:一个字符串,包含了关于处理该intent的组件的种类的信息。一个intent对象可以有任意个category。intent类定义了许多category常数.

addCategory()方法为一个intent对象增加一个category,
removeCategory删除一个category,
getCategories()获取intent所有的category.

Intent intent = new Intent("android.intent.action.ALL_APPS");
5             intent.addCategory("com.example.intent_test.MY_CATEGORY");
6             startActivity (intent);
7     }
  在上面例子中,我们首先初始化了一个Intent对象,并指定action参数。其次调用Intent中的addCategory()方法来添加一个category。每个Intent中只能指定一个action,但却能指定多个category
需要在清单文件中进行配置,注意的是category中的名字与addCategry中的参数名字要相同

使用Intent 传递数据
intent.putExtra("A","B")
第一个参数是键,用于后面从Intent中取值,第二个参数才是真正要传递的数据,这是向下一个活动传递数据

startActivityForResult(intent,1)【这个方法在第一个activity中写】
第一个参数为intent第二个参数是请求码(只要是一个唯一的值就可以了),用于在之后的回调中 判断数据的来源,
setResult(RESULT_OK,intent)【这个方法在第二个activity中写】
这个方法是专门用于向上一个活动返回数据的,
最后别忘记调用finish()来销毁当前的活动

活动的启动模式
启动模式一共有四种:standard ,  singleTop,  singleTask  ,singleInstance,可以在配置文件中通过给<acticity>标签指定
android:launchMode来选择启动模式


standard

标准启动模式,也是activity的默认启动模式。在这种模式下启动的activity可以被多次实例化,即在同一个任务中可以存在多个activity的实例,每个实例都会处理一个Intent对象。如果Activity A的启动模式为standard,并且A已经启动,在A中再次启动Activity A,即调用startActivity(new Intent(this,A.class)),会在A的上面再次启动一个A的实例,即当前的桟中的状态为A-->A。

singleTop

如果一个以singleTop模式启动的activity的实例已经存在于任务桟的桟顶,那么再启动这个Activity时,不会创建新的实例,而是重用位于栈顶的那个实例,并且会调用该实例的onNewIntent()方法将Intent对象传递到这个实例中。举例来说,如果A的启动模式为singleTop,并且A的一个实例已经存在于栈顶中,那么再调用startActivity(new Intent(this,A.class))启动A时,不会再次创建A的实例,而是重用原来的实例,并且调用原来实例的onNewIntent()方法。这是任务桟中还是这有一个A的实例。
如果以singleTop模式启动的activity的一个实例已经存在与任务桟中,但是不在桟顶,那么它的行为和standard模式相同,也会创建多个实例。
singleTask
让某个活动在程序的整个上下文只存在一个实例,当为此模式的时候,每次启动该活动的时候会在返回栈中检查是否存在该活动的实例,如果发现已经存在则直接使用,并把在这个活动上的所以活动都出栈,如果没有则创建一个新的活动实例

singleInstance

总是在新的任务中开启,并且这个新的任务中有且只有这一个实例,也就是说被该实例启动的其他activity会自动运行于另一个任务中。当再次启动该activity的实例时,会重用已存在的任务和实例。并且会调用这个实例的onNewIntent()方法,将Intent实例传递到该实例中。和singleTask相同,同一时刻在系统中只会存在一个这样的Activity实例。
指定为这种模式的时候会启用一个新的返回栈来管理这个活动
这种的模式的目的是让其他程序和我们的程序来共享这个活动的实例


 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值