Android中的Activity


一、什么是Activity?

1.Activity是Android的四大组件之一。

2.一般来说,一个与用户交互的界面对应一个Activity,使用时必须在AndroidManifest(清单)文件中注册(一般情况下,创建Activity时会自动注册了,但需要注意创建多个Activity时,直接用创建类(class)的方式,不会自动注册需要自己去手动注册。),若没有注册就使用了,将会抛出ActivityNotFoundException异常.

3.在Activity中的onCreate()方法通过setContentView(),设置要显示的布局资源。

二、Activity的生命周期

生命周期描述的是一个类,Activity从创建(new出来)到销毁(垃圾回收)的过程经过多种状态,根据不同的生命阶段会执行不同的方法(从一种状态到另一种状态会激发相应的回调方法):

①onCreate()--创建(已创建)

②onStart()--开始(已启动Visible,只是可见,无法交互)

③onResume()--运行(已恢复Visible,处于正在运行状态,获得焦点,可以交互)

④onPause()--暂停(失去焦点)

⑤onStop()--停止

⑥onRestart()--重新开始

⑦onDestory()--销毁



1.定义生命周期的作用:

①当用户跳转到另一个程序(如:接听电话)时不会崩溃

②当该程序在后台运行时不会销毁有价值的系统资源

③当用户重新打开(该程序在后台运行时)该程序时,不会丢失用户的进程(数据)

④当手机屏幕进行横竖屏切换时不会丢失用户的进程



2.横竖屏进行切换时问题的解决:

AndroidManifast.xml文件下Actvity节点下有个属性: android:configChanges

①不设置该属性:横竖屏进行切换时会重新执行各个生命周期,切横屏时会执行一次,切竖屏会执行2次

②设置android:configChanges=“orientation”,切横竖屏会各执行一次生命周期

③设置android:configChanges="orentation|keyboarderHidden",切换横竖屏时不会调用生命周期的方法,之后执行onConfigurationChanged()

注意:

但是,自从Android 3.2(API 13),在设置Activity的android:configChanges="orientation|keyboardHidden"后,还是一样 会重新调用各个生命周期的。因为screen size也开始跟着设备的横竖切换而改变。所以,在AndroidManifest.xml里设置的MiniSdkVersion和 TargetSdkVersion属性大于等于13的情况下,如果你想阻止程序在运行时重新加载Activity,除了设置"orientation", 你还必须设置"ScreenSize"。
解决方法:
AndroidManifest.xml中设置android:configChanges="orientation|screenSize

3.从一个Activity(A)跳转到另一个Activity(B)

使用Intention(意图)
Intention Intention=new Intent(A.this,B.class);
①startActivity(intention);
②startActivityForresult(intent,int值(返回的code));-------有返回的跳转



4.从一个Activity(A)跳转到另一个Activity(B)经过生命周期的哪些方法?
①必须执行的方法:A:onPause()----②---B:onCreate---B:onStart()---B:onResume()

②如果B完全覆盖了A界面,这个时候回调用A:onStop()

   如果B时透明的界面后对话框(即能看见部分A界面),不会调用A:onStop()

   如果在A中调用了finish(),这个时候还会执行onDestroy()


5.Activity的启动模式

在AndroidManifast.xml 文件中Activity节点下(设置启动模式):

 <activity android:name=".MainActivity" android:launchMode="standard" />

①standard(标准模式)

一般默认的启动方式为标准模式,即每次激活Activity时都会创建Activity,放到一个任务栈(按先进后出的原则)中,每个(窗体、界面)Actvity的getTaskId()保持不变,但是this.hasCode()发生变化。


②singleTop(单顶模式)

需要启动该Activity时,如果任务栈的栈顶正好存在该Activity的实例,则会重新调用该实例,不会重新创建Activity了。而此时会回调onNewIntent()。如果栈顶没有该Activity实例就会重新创建新的实例(只要不在栈顶,即使在栈里面,都会重新创建新的实例放入栈中)。


③singleTask(单栈模式)

需要启动该Activity时,如果任务栈中已经有该Activity实例了(不管在栈中的位置),就会重新调用该实例,让该实例回到栈顶,此时会回调onNewIntent()方法。否则会重新创建。

④singleInstance(单例模式)

启动该Activity的时候会单独将该Activity实例放入一个栈中,该栈不会再有其他Activity实例。每次调用时他的getTaskId()会发生变化。


总结:在开发Android项目时,巧妙的设置不同的启动模式会节省系统开销和提高程序的运行效率。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值