public class Activity extends ApplicationContext {protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onPause(); protected void onStop(); protected void onDestroy();}相信不少朋友也已经看过这个流程图了,也基本了解了Activity生命周期的几个过程,我们就来说一说这几个过程。
五、Activity的栈式管理
Android针对Activity的管理使用的是栈,就是说某一个时刻只有一个Activity处在栈顶,当这个Activity被销毁后,下面的Activity才有可能浮到栈顶,或者有一个新的Activity被创建出来,则旧的Activity就被压栈沉下去了。Activity是Android程序的表现层。程序的每一个显示屏幕就是一个Activity。正在运行的Activity处在栈的最顶端,它是运行状态的。
当在程序中调用 Activity.finish()方法时,结果和用户按下 BACK 键一样:它告诉 Activity Manager该Activity实例可以被“回收”。随后 Activity Manager 激活处于栈第二层的 Activity ,把原 Activity 压入到栈的第二层,从 Running 状态转到 Paused 状态。
六、Activity的加载模式
standard、singleTop、singleTask、singleInstance(其中前两个是一组、后两个是一组),默认为standard
standard:就是intent将发送给新的实例,所以每次跳转都会生成新的activity。
singleTop:也是发送新的实例,但不同standard的一点是,在请求的Activity正好位于栈顶时(配置成singleTop的Activity),不会构造新的实例
singleTask:和后面的singleInstance都只创建一个实例,当intent到来,需要创建设置为singleTask的Activity的时候,系统会检查栈里面是否已经有该Activity的实例。如果有直接将intent发送给它。
singleInstance:
首先说明一下task这个概念,Task可以认为是一个栈,可放入多个Activity。比如启动一个应用,那么Android就创建了一个Task,然后启动这个应用的入口Activity,那在它的界面上调用其他的Activity也只是在这个task里面。那如果在多个task中共享一个Activity的话怎么办呢。举个例来说,如果开启一个导游服务类的应用程序,里面有个Activity是开启GOOGLE地图的,当按下home键退回到主菜单又启动GOOGLE地图的应用时,显示的就是刚才的地图,实际上是同一个Activity,实际上这就引入了singleInstance。singleInstance模式就是将该Activity单独放入一个栈中,这样这个栈中只有这一个Activity,不同应用的intent都由这个Activity接收和展示,这样就做到了共享。当然前提是这些应用都没有被销毁,所以刚才是按下的HOME键,如果按下了返回键,则无效。
七、Activity的跳转
Activity跳转,无返回结果
这是最简单的Activity跳转方式。从一个Activity启动另一个Activity,直接startActivity(new Intent(当前Activity.this, 下一Activity.class))。
Activity跳转,返回数据/结果
需要返回数据或结果的,则使用startActivityForResult (Intent intent, int requestCode),requestCode的值是自定义的,用于识别跳转的目标Activity。跳转的目标Activity所要做的就是返回数据/结果,setResult(int resultCode)只返回结果不带数据,或者setResult(int resultCode, Intent data)两者都返回!而接收返回的数据/结果的处理函数是onActivityResult(int requestCode, int resultCode, Intent data),这里的requestCode就是startActivityForResult的requestCode,resultCode就是setResult里面的resultCode,返回的数据在data里面。
** 注意,在setResult后,要调用finish()销毁当前的Activity,否则无法返回到原来的Activity,就无法执行原来Activity的onActivityResult函数,看到当前的Activity没反应。
八、实例讲解activity切换
android中每个activity通常描述了一个屏幕上的所有画面(窗口级别的activity除外),因此通常手机屏幕两个界面(准确些说是整个屏幕)之间的切换就涉及到了activity的切换.
假定有两个activity,分别是Activity01和Activity02,现在Activity01页面中有一个按钮,点下之后会切换到Activity02.并且在Activity切换时,Activity01给Activity02传递了一个参数. (intent可以在切换Activity时使用,且能传递数据.)
怎么做呢?大体思路为:
1.在Activity01中设置一个可触发的空间,并添加一个触发器
2.在Activity01的触发器添加listener
3.在listener的接口实现中,设置一个Intent,让这个Intent能够将Activity01和Activity02绑定起来,并且通过putExtra将要传输的值放到Intent对象中存储
3.listener接口实现结尾,通过Activity01启动调用这个Intent对象,通过调用来切换到Activity02
4.在Activity02中,使用getIntent来获取上下文切换中使得自己启动了的那个Intent对象实例
5.通过获取到的intent对象实例,使用起getStringExtra来获取先前putExtra的值.
当然,后面如果对Intent更加了解时,就需要按实际情况挑选更合适的存储数据及获取数据的函数了.
以下是实现的演示:
最后附上关键部分代码:
Activity01中:
button.setOnClickListener(new Button.OnClickListener() { //更准确点应该是View.OnClickListener public void onClick(View v) {/* 新建一个Intent对象 */Intent intent = new Intent();intent.putExtra("name","LeiPei"); /* 指定intent要启动的类 */intent.setClass(Activity01.this, Activity02.class);/* 启动一个新的Activity */Activity01.this.startActivity(intent);/* 关闭当前的Activity */Activity01.this.finish(); }});Activity02中:
String name=intent.getStringExtra("name"); textview2.setText("activity01传过来的值为:"+name);以上就是小编整理的关于activity所涉及到的知识点,希望对大家的学习有所帮助,还有许多遗漏的知识,小编会继续完善补充的,希望大家持续关注。