Android 学习之Activity详解

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。他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值