用Intent传递数据
向下一个活动传递数据
Intent除了跳转活动,还可以在各个活动之间传递数据,我们来看一下。
启动活动时传递数据很简单,通过putExtra()方法,我们就可以将数据暂存在Intent中,putExtra()里要传入两个参数,第一个是键,用于第二个活动找到你,第二个则是存储的数据。
我们在MainActivity将之前的代码修改一下
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String data="Hello!";
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
intent.putExtra("extra_data",data);
startActivity(intent);
}
});
1
2
3
4
5
6
7
8
9
那么第二个活动就得到了Intent里包含的数据,我们要将他取出来,通过getIntent来获取Intent,然后通过getStringExtra来获取传递的数据。(如果是int类型就是getIntExtra,以此类推)
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Intent intent=getIntent(http://www.amjmh.com/v/);
String data=intent.getStringExtra("extra_data");
Log.d("SecondActivity",data);
}
1
2
3
4
5
6
7
2.返回数据给上一个活动
具体参考"第一行代码",原理一样,这里就不赘述了。
当然Intent还有一些其他的功能,具体可以看看这个
Intent:https://www.jianshu.com/p/67d99a82509b
3.活动的生命周期
Android是使用任务(Task)来管理Activity的,一个任务就是一组存放在栈里的Activity集合,这个栈被称作返回栈,栈(堆栈)是一种先进后出的数据结构。
每当启动一个新的Activity时,它会被放入返回栈中,并处于栈顶的位置。每当我们按下Back键或调用activity的finish()方法去销毁一个活动时,处于栈顶的Activity会出栈,这时前一个入栈的Activity就会重新处于栈顶的位置。系统总是会显示处于栈顶的Activity给用户。
Activity的生存期
Activity类中定义了7个回调方法,覆盖了Activity生命周期的每一个环节,下面来一一介绍这7个方法
1.onCreate()
这个方法在每一个Activity类都会有,当我们新建一个Activity类时,一定会重写父类的onCreate方法,onCreate方法会在Activity第一次被创建时调用。我们应该在这个方法中完成Activity的初始化操作,比如说加载布局,初始化布局控件,绑定按钮事件等。
2.onStart()
这个方法在Activity由不可见变为可见时调用。
3.onResume()
这个方法在Activity准备好喝用户交互的时候调用。此时的Activity一定位于返回栈的栈顶,并且处于运行状态。
4.onPause()
这个方法在系统准备去启动或者恢复另一个Activity的时候调用。
5.onStop()
这个方法在Activity完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新Activity是一个对话框式的activity,那么,onPause()方法会得到执行,而onStop()方法并不会执行。
6.onDestory()
这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状态。
7.onRestart()
这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了
4.活动的启动模式
1.默认启动模式standard
该模式可以被设定,不在manifest设定时候,Activity的默认模式就是standard。在该模式下,启动的Activity会依照启动顺序被依次压入Task中:
2.栈顶复用模式singleTop
在该模式下,如果栈顶Activity为我们要新建的Activity(目标Activity),那么就不会重复创建新的Activity。
3.栈内复用模式singleTask
与singleTop模式相似,只不过singleTop模式是只是针对栈顶的元素,而singleTask模式下,如果task栈内存在目标Activity实例,则:
1.将task内的对应Activity实例之上的所有Activity弹出栈。
2.将对应Activity置于栈顶,获得焦点。
4.全局唯一模式singleInstance
这是我们最后的一种启动模式,也是我们最恶心的一种模式:在该模式下,我们会为目标Activity分配一个新的affinity,并创建一个新的Task栈,将目标Activity放入新的Task,并让目标Activity获得焦点。新的Task有且只有这一个Activity实例。 如果已经创建过目标Activity实例,则不会创建新的Task,而是将以前创建过的Activity唤醒(对应Task设为Foreground状态)