2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Activity详解Activity的使用步骤 生命周期及其启动模式 启动方法

Activity详解Activity的使用步骤 生命周期及其启动模式 启动方法

时间:2020-02-03 00:30:57

相关推荐

Activity详解Activity的使用步骤 生命周期及其启动模式 启动方法

开始我们先来回顾一下Activity的基础知识:

Activity是应用程序的表现层,应用程序中可以包含多个Activity,它们之间可以相互跳转,来达到手机屏幕的切换。Activity通过View来实现应用程序的图形用户界面GUI,手机用户直接通过GUI和应用程序进行交互,应用程序通过GUI向用户显示信息,用户通过GUI向应用程序发出指令和响应。

Activity的使用步骤:

1.创建Activity,创建类继承Activity或其子类2.配置Activity:必须显式在Manifest配置文件<application>中为其添加<activity>,为<activity>配android:name属性,值为.className 如一个Android工程中名MainActivity的Activity配置为:```<activityandroid:name=".MainActivity"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>```其中<intent-filter>标签为标记当前Activity为入口Activity。

Activity栈

Android中所有的Activity都被保存在Activity栈中,当启动一个新的Activity时,这个Activity就被压入栈的顶部,如果用 户通过“返回”键返回上一个Activity的界面,那么栈顶的Activity就会被弹出,之前位于栈顶的第二个Activity就会变成为新的栈顶Activity,系统总是会显示栈顶的Activity给用户

Activity生命周期

--Activity的生命周期是指一个Activity从创建到销毁的过程,期间会经过多个状态的变化,每次状态的变化都会触发相应的回调方法--根据Activity不同的状态,将Activity生命周期分为四个阶段:1.运行状态:可见,并可操作onCreate-onStart-onResume onRestart-onStart-onResume2.暂停状态:可见,但不可操作onPause3.停止状态:不可见,不可操作onStop4.销毁状态onDestory--关于各个回调方法被调用的时机:onCreate():Activity在实例化过程被调用,进而创建工作。只会调用一次,一般创建界面没做一些数据的初始化工作onStart() :Activity启动过程的回调函数onResume():恢复Activity时被回调,onStart()方法后一定会回调该方法onPause():暂停Activity时被回调(Activity失去操作焦点,但可见),应在这里保存一些数据onStop():停止Activity时被回调(Activity失去操作焦点,不可见)onDestory():销毁Activity时被回调,该方法只会被调用一次(回收资源)这是被kill前最后一个被调用的方法onRestart():活动由停止状态变为运行状态之前调用,也就是活动被重新启动-- Activity生命周期的三种状态:1.Activity完整的生命周期:指从调用onCreate()创建Activity到最终调用onDestroy()销毁Activity的过程onCreate()-->onStart()--->onResume()-->onPause()-->onStop()-->onDestory()2.可见Activity的生命周期:指从调用onStart()/onRestart()开始到调用onStop()结束的过程onStart()/onRestart()-->onResume()-->onPause-->onStop()3.活跃Activity的生命周期:指从调用onResume()到调用onPause()暂停的过程onResume()-->onPause()--下面详细讲解几个过程:1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态2.当前Activity被其他Activity覆盖其上或被锁屏,系统会调用onPause方法,暂停当前Activity的执行3.当前Activity由覆盖状态回到前台或解锁屏,系统会调用onResume方法,再次进入运行状态4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停止状态5.用户后退回到此Activity,系统会先调用onRestart方法,然后调用onStart方法,最后onResume方法重新进入运行状态6.当前Activity处于覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回到当前Activity,再次调用第1步方法7.用户退出当前Activity,系统会先调用onPause方法,然后调用onStop方法,最后调用onDestory方法结束当前Activity

Activity的启动模式:

Activity启动方式有四种,分别是:standard 默认模式 可有多个实例,允许多个相同的Activity叠加 singleTop 栈顶单例 可有多个实例,不允许多个相同的Activity叠加,相同时调用onNewIntent方法singleTask栈内单例 只有一个实例,重复启动时会把task中在其之上的其它Activity destory掉并调用onNewIntent方法singleInstance 全局单例 只有一个实例,并且这个实例独立运行在一个task中,这个task中只有这个实例,不允许有别的Activity存在

Activity启动Activity的两种方法:

1.通过startActivity(Intent inrent)启动Activity传递参数的方式:putExtra("key",values);或者:putExtra(Bundle);获取参数的方式:putXxxExtra(key) 或者 getExtras().getXxx()Xxx为数据类型2.通过startActivityForResult(Intent intent,int requestCode):以指定的请求码启动Activity,而且程序将会等待新启动Activity的结果一般情况下,我们只需要保证requestCode>-1即可,这样它都能收到result.但是如果在Activity中,能够跳转到多个Activity,并且要接受到多个activity中的信息的时候,我们就要注意当使用startActivityForResult()的时候,给每一个不同的Activity一个独立的requestCode,那么在你接收到result的时候就可以根据这个参数来判断结果是个Activity返回来的了启动的Activity重写onActivityResult()被启动的Activity返回数据:setResult(int,Intent)

onSaveInstanceState和onRestoreInstanceState触发的时机:

当某个activity变得“容易"被系统销毁时,该Activity的onSaveInstanceState就会被执行,除非该Activity是被用户主动销毁的,例如用户按Back键时何为“容易”?意思就是该Activity还没有被销毁,仅仅可能被销毁,有这么几种情况:1.当用户按下HOME键时:系统不知道你按下HOME键后要运行多少其他的程序,也不知道activity是否会被销毁,所以这时系统会调用onSaveInstanceState方法让用户有机会保存某些非永久性的数据,以下几种情况的分析都遵循该原则2.长按HOME键,选择运行其他的程序时3.按下电源按键(关闭屏幕显示)时4.从Activity中启动一个新的Activity时5.屏幕方向切换时,例如从竖屏切换到横屏:在屏幕切换之前,系统会销毁该activity,在屏幕切换之后,系统会自动地创建activity,所以会执行onSaveInstanceState方法onSaveInstanceState的调用遵循一个重要原则,即当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用。onRestoreInstanceState方法需要注意的是,它和onSaveInstanceState方法不一定是成对被调用的,onRestoreInstanceState被调用的前提是,Actvity确实被系统销毁了,如果仅仅是停留在刘可能被销毁的情况下,该方法不会被调用。

好了,今天Android四大组件之一的Activity就先写到这里了,欢迎大家一起交流学习。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。