1.使用Intent在不同的活动之间进行交互
Intent是Android程序中各组件进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据,Intent可以用于启动活动、服务和发送广播等场景,Intent有显式和隐式两种。
1.1使用显式的Intent
首先我们需要构造出来一个Intent,可以通过构造函数,进行构造,
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
第一个参数是context,第二个参数是我们想要启动的活动所对应的类,然后可以通过startActivity()方法来启动活动。
1.2使用隐式的Intent
隐式Intent是通过指定更加抽象的action和category等信息,来交给系统去分析,来找到合适的Intent去启动。可以通过在<activity>标签中配置<intent-filter>指定当前活动能够响应的aciton和category,如下:
<intent-filter>
<action android:name="android.intent.action.CALL" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
这里就表示我们创建的活动可以响应android.intent.action.CALL这个action,而category标签指定当前活动能够响应的Intent中可能还带有的category。
1.3向下一个活动传递数据
Intent除了可以启动一个活动以外,还可以在启动活动的时候传递数据,思路是通过Intent中提供的一系列putExtra()方法的重载,把我们想要传递的数据存储在Intent中,然后在启动另外一个活动以后,将这些数据取出就行了。
String data="Hello SecondActivity";
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("extra_data",data);
startActivity(intent);
被启动的活动里的代码:
Intent intent=getIntent();
String data=intent.getStringExtra("extra_data");
Log.d("SecondActivity",data);
1.4返回数据给上一个活动
Activity中有一个方法startActivityForResult()也可以启动活动,并且在活动销毁的时候能够返回结果给上一个活动,该方法有两个参数,第一个是Intent,第二个参数是请求码。当被调用的活动被销毁的时候在此之前我们需要通过setResult()方法返回数据,该方法有两个参数,第一个用于向上一个活动返回处理结果,第二个把带有数据的Intent传递回去,然后再调用finish()方法来销毁当前活动。当活动销毁时,会调用上一个活动的onActivityResult()方法。该方法有三个参数,第一个是requestCode,即我们在启动活动时传入的请求码,第二个是resultCode,即我们在返回数据时传入的处理结果,第三个是带有数据的Intent,
启动另外一个活动
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
startActivityForResult(intent,1);
销毁被启动的活动并返回数据
Intent intent=new Intent();
intent.putExtra("data_return","HelloActivity");
setResult(RESULT_OK,intent);
finish();
获取返回的数据
switch (requestCode){
case 1:
if (resultCode==RESULT_OK){
String returnedData=data.getStringExtra("data_return");
Log.d("FirstActivity",returnedData);
}
break;
default:
}
2.活动的生命周期
2.1返回栈
我们每启动一个活动,就会覆盖在原活动之上,然后点击Back键就会销毁最上面一个活动,下面的一个活动就会重新显示出来。Android使用任务来管理活动,一个任务就是一组存放在栈里的活动的集合,这个栈也被称为返回栈(具有先进后出的特性)。
2.2活动状态
每个活动在其声明周期中最多可能有4种状态。
2.2.1 运行状态
当一个活动位于返回栈的栈顶时,该活动就处于运行状态。系统不会回收处于运行状态的活动
2.2.2暂停状态
当一个活动不再处于栈顶位置,但仍然可见时,这时活动就进入了暂停状态,就是当处于运行状态的活动没有占满整个手机屏幕时,后面的活动依然可见,比如,一个对话框处于最前面,它后面的活动,依然可见。这种活动依旧是完全存活的,只有在内存极低的时候,系统才会去回收这种活动。
2.2.3停止状态
当一个活动不再处于栈顶位置,并且完全不可见时,就进入了停止状态。系统仍然会为这种活动保存相应的状态和成员变量。当其他地方需要内存时,该状态的活动有可能会被系统回收。
2.2.4销毁状态
当一个活动从返回栈中移除后就变成了销毁状态,系统最倾向于回收这种状态的活动,从而保证手机的内存充足。
2.3活动的生存期
Activity类定义了7个回调方法,覆盖了活动声明周期的每一个环节。
- onCreate() :该方法会在活动第一次创建的时候调用。
- onStart():该方法在活动由不可见变为可见的时候调用。
- onResume() 该方法在活动那个准备好和用户进行交互的时候调用,此时的活动一定位于返回栈的栈顶,并且处于运行状态。
- onPause() 该方法在系统准备去启动或恢复另外一个活动的时候调用。一般在这里将一些消耗CPU的资源给释放掉,以及保存一些关键数据。
- onStop() 该方法在活动完全不可见的时候调用,它和onPause()的区别是,如果启动的新活动时一个对话框式的活动,那么onPause()就会得到执行,onStop()并不会得到执行。
- onDestroy() 该方法在活动被销毁之前调用,之后活动的状态将会变为销毁状态。
- onRestart() 这个方法在活动由停止状态转为运行状态之前调用。