Activity 是android的应用的重要组成部分组成单元之一。Activity的作用:起显示作用,他是用来和用户交互的。也是一个view的容器
不同的Activity向用户呈现不同的操作界面。Android应用的多个Activity组成Activity栈,当前活动的Activity位于栈顶,每一次新的A那次actvitiy开启时,前一个Activity就会停止,但系统会将Activity保存到一个堆栈中。当一个新的Activity开始时,它会被压入堆栈,回堆栈遵守基本的“后进先出”的堆栈机制,所以,当用户完成当前活动和按下会返回键,它就从栈中弹出来。
一、创建一个新的Activity
1.创建一个Activity必须创建一个继承Activity的子类。
2.在清单文件AndroidManifest.xml中
<manifest ... >
<application... >
<activity android:name=".ExampleActivity" />(name="包名.Activity名")
...</application... >
. . .</manifest>
二、启动Activity
Intent intent =new Intent(this, SignInActivity.class); startActivity(intent);
Intent intent =new Intent(); intent.setClass(MainAcitvity.this,NextActivity.class); startActivity(intent);
第二种方法:先在清单文件中写入<intent-filter>如下内容:
<intent-filter>
<category android:name="com.android.Activitytest.intent.action" />(操作名称一般约定为<包名>.inent.操作名称)
<category android:name="android.intent.category.BROWSABLE" />
...
</intent-filter>
然后开启Activity Intent intent =new Intent();
intent.setClass(“com.android.Activitytest.intent.action”); startActivity(intent);
三、Activity值传递
Intent intent = new Intent( this, Main3activity. class); intent.putExtra( "name", "chenwuchen"); intent.putExtra( "age", 22); //传入字符串 Bundle bundle = new Bundle(); bundle.putString( "code", "10010"); intent.putExtra( "bundle",bundle); startActivity(intent);
//新的activity中 intent intent=getIntent(); String name=intent.getStringExtra(name); String name=intent.getStringExtra(age); Bundle bundle=intent.getBundleExtra("bundle"); String code=bundle.getString("code');
四、Activity生命周期
这一张经典的生命周期流程图:
相信不少朋友也已经看过这个流程图了,也基本了解了Activity生命周期的几个过程,我们就来说一说这几个过程。
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:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。
Activity的作用:
起显示作用,他是用来和用户交互的。也是一个view的容器
1、 完整的生命周期:
打开一个应用时:
onCreate() --> onStart() --> onResume() activiyt已经正常显示
点击回退键
onPause() --> onStop() --> onDetroy()
点击home键回到桌面
onPause()→onStop()
用home键调回Activity时:
onRestart()→onStart()→onResume()
电话打入:
onPause() -->onStop() -->onRestart()-->onStart() -->onResume()
2、可视的生命周期
onCreate() --> onStart() --> onResume() activiyt已经正常显示
打开一个activity。该activity完全覆盖上一个activity
onPause() ---> onStop()
点击回退键
onPause() --> onStop() --> onDetroy()
3、前台的生命周期
onResume()-->onPause()
前台生命周期:前台可见但失去焦点
清单文件中:android:theme="@android:style/Theme.Dialog"
就可以把activity变成对话框的效果
onCreate() --> onStart() --> onResume() activiyt已经正常显示
打开一个activity。该activity没有完全覆盖上一个activity
onPause()
点击回退键
onResume()
4、横竖屏切换不影响生命周期:
在横竖屏切换的时候,生命周期会onPause()→onStop()→onDestory()→onCreate()→onStart()→onResume()
在清单文件AndroidManifest.xml中添加:
android:screenOrientation="landscape" //设置只能横屏
android:configchanges="orientation|keyboardHidden|screenSize" //设置横屏时不影响Activity生命周期
五、任务栈
1、一个应用程序一般只有由多个Activity组成的。
2、任务栈(task stack)记录存放用户开启的Activity的。
3、一个应用程序一被开启系统就给他分配一个任务栈,但所有的Activity都退出的时候,任务栈就清空了。
4、任务栈的id是一个integer的数据类型,自增长。
5、在Android操作系统里面会存在多个任务栈,一个应用程序一个任务栈。
六、Activity的启动模式
在清单文件中加入android:launchMode=""可修改启动模式
1、standard
默认标准的启动模式,每次startActivity都是创建一个新的实例。适用于绝大多数情况。
2、singleTop
单一顶部,如果要开启Activity在任务栈的顶部已经存在,就不用创建新的实例,而调用onNewIntent()方法。
应用场景:浏览器的书签。避免栈顶的Activity被重的创建,解决用户体验问题。
3、singletask
单一任务栈,Activity只会在任务栈里面存在一个实例。如果要激活的Activity,在任务栈里面已经存在,就不会创建新的Activity,而是复用这个已经存在的Activity,调用onNewIntent()方法,并且清空当前Activity任务栈上面所有的Activity任务栈上面的所有Activity。
应用程序:浏览器Activity,整个任务栈只是一个实例,节约内存和cpu的目的
注意:Activity还是运用当前应用程序的任务栈里面的。不会创建新的任务栈。
4、singleInstance
单态 单例模式
单一实例,整个手机操作系统里面只有一个实例存在。不同应用去打开这个Activity共享 公用的同一个Activity。他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。