Android 四大组件之一Activity

Activity的理解:

作用:提供能让用户操作并与之交互的界面

1.定义

          a. 定义一个类 extends Activity, 并重写生命周期方法

          b. 在功能清单文件中使用<activity>注册

2.启动方式两种:

          a. 一般: startActivity(Intent intent)

          b. 带回调启动: startActivityForResult(Intent intent, int requestCode)

               重写: onActivityResult(int requestCode, int resultCode, Intent data)

 3. 结束

          a. 一般: finish()

          b. 带结果的: setResult(int resultCode, Intent data)

Activity的生命周期 及状态         

onCreate() : 加载布局和初始化的工作

onResume() : 只有经历此方法, 才进入运行状态

onDestroy() : 在对象死亡之前, 做一些收尾或清理的工作

异常情况下的生命周期

                               

异常情况下Activity终止:系统会调用onSaveInstance来保存当前activity状态,这个方法的调用时机是在onStop之前

onPause没有既定的时序关系,当activity重新创建后,系统会调用onRestoreInstanceState,并且把activity销毁时onSaveInstanceState方法保存的Bundle对象作为参数同时传递给onRestoreInstanceState和onCreate方法。onRestoreInstanceState()onStart()方法后回调。

同时,在onSaveInstanceStateonRestoreInstanceState方法中,系统自动为我们做了一些恢复工作,如:文本框(EditeText)中用户输入的数据,ListView滚动的位置等,这些view相关的状态系统都能够默认为我们恢复。可以查看view源码,和activity一样,每个view都有onSaveInstanceState方法和onRestoreInstanceState方法

onConfigurationChanged方法

1.当系统的配置信息发生改变

系统会调用此方法注意,只有在配置文件AndroidManifest中处理了configChanges属性对应的设备配置,该方法才会被调用。如果发生设备配置与在配置文件中设置的不一致,则Activity会被销毁并使用新的配置重建。

2.configChanges设置取值

TaskStack和lauchMode

 1). TaskStack

          在Android中,系统用Task Stack (Back Stack)结构来存储管理启动的Activity对象

          一个应用启动,系统就会为其创建一个对应的Task Stack来存储并管理该应用的Activity对象

          只有最上面的任务栈的栈顶的Activity才能显示在窗口中

       Stack<Activity> activityStack = new Stack();

 2). lauchMode:

standard: 

     标准模式,每次调用startActivity()方法就会产生一个新的实例。

singleTop: 

     如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例;如果不位于栈顶,会产生一个新的实例。

    如果新activity位于任务栈的栈顶的时候,activity不会被重新创建,同时它的onNewIntent方法会被回调。 注意:这个activity的        onCreate,onStart,onResume不会被回调,因为他们并没有发生改变。

singleTask: 

     栈内复用模式,只有一个实例, 默认在当前Task中。只要activity在一个栈中存在,那么多次启动此activity不会被重新创建单例,系统会回调onNewIntent

singleInstance: 

     只有一个实例, 创建时会新建一个栈, 且此栈中不能有其它对象

注意:默认情况下,所有activity所需的任务栈的名字为应用的包名,可以通过给activity指定TaskAffinity属性来指定任务栈,**这个属性值不能和包名相同,否则就没有意义 ** 。

setResult和finish调用的注意方式及场景

Activity_A通过StartActivityForResult()启动Activity_B,Activity_B通过setResult()返回值给Activity_A

注意:setResult()方法必须在finish()之前调用,setResult()方法在onPause()之前调用。

1.点击Back键返回到Activity_A,Back键Android会自动调用Activity的finish()方法,

@Override
 public void onBackPressed()
 {
        Log.i(TAG, "onBackPressed");
        setResult(Const.LIVE_OK);
        super.onBackPressed();
 }

执行过程为:

  B---onBackPressed
  B---finish
  B---onPause
  A---onActivityResult
  A---onRestart
  A---onStart
  A---onResume
  B---onStop
  B---onDestroy

2.点击按钮事件显示的调用finish()

setResult(intent, RESULT_OK);
finish();

 

Scheme跳转协议

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值