Android学习之Activity的使用

【1】Activity介绍

  Activity,字面意思‘活动’。是Android四大用户组件之一,在Android中就是用于与用户交互的界面,一个用户界面就是一个Activity对现。用于可以通过该界面进行相关的操作,比如发短信、打电话、看视频等。

【2】activity的声命周期  

 7个方法3个状态

  onCreate():创建Activity,在里面做一些初始化操作,例如获取布局文件中的组件、创建相关对象等。
  onStrart():启动activity,此时activity处于可视不可交互转态,可以在该状态进行服务(Service)的绑定操作。
  onResume():当调用该方法后,activity进入"激活状态"。可以与用户进行交互,例如:输入文字、点击按钮等
  onRause():当进行界面切换,或者弹出一个窗口时,该方法被调用,此时activity进入"暂停状态",可视不可交互。此时当前activity可能因为应用内容不足被回收(kill),应该进行activity状态值的保存,释放一些不用的内存。如果弹出的是窗口,当窗口被取消后,activity会回到onResume()(激活转态)
  onStop():当进行界面时被调用。此时activity处于"停止状态",不可视不可交互。在该方法中需要释放不重要的内存。需要注意,如果在onStart()方法中绑定了服务,需要在该方法中进行解绑),同时也需要保存activity的状态值。如果覆盖当前activity的另外一个activity被用户取消,则会调用onRestart()方法,然后调用onStart()方法进行重新启动。
  onDestroy():当activity被销毁时被调用,在该方法中需要完全释放内存。

具体流程图见下图:

【3】activity之间的切换和数据传递

activity之间进行切换是借助于Intent来实现的,数据传递用两种方式

需要注意的是:如果传递的是对象,需要进行序列化操作。

发送端:

 方式一:创建Bundle对象(存值是基于ArrayMap实现的 Bundle就是用来封装数据的)然后把Bundle对象封装到Intent对象中,具体操作如下:

Intent intent = new Intent(MainActiviy,Main2Activity);
Bundle bundle = new Bundle();
bundle.putInt("id",1);
bundle.putString("name","bobo");
intent.putExtra("date",bundle);
startActivity(intent);

方式二 直接使用Intent对象传递数据

1 Intent intent = new Intent(MainActiviy,Main2Activity);
2 intent.putExtra("id",1);
3 intent.putExtra("name","bobo");
4 intent.putExtra("money",2.0f);
5 startActivity(intent);

接收端

方式一 使用Bundle对象取值

1 Intent intent = getIntent();
2 Bundle bundle = intent.getBundleExtra("date");
3 int id = bundle.getInt("id",0);
4 String name = bundle.getString("name");

方式二 直接使用Intent对象取值

1 Intent intent = getIntent();
2 int id = intent.getIntExtra("id",0);
3 String name = intent.getStringExtra("name");
4 float money = intent.getFloatExtra("money",0.1f);

【4】activity的启动方式(此处的图并非原创)

  1.standard:

    默认的模式,每次启动都创建一个Activity对象放在Activity栈顶

  

  2.singleTop:

    在当前任务栈中,判断栈顶是否为当前的Activity,如果是,就直接使用,如果不是,再创建新的Activity放入栈顶

  

从SecondActivity跳转到FirstActivity时生成了新的FirstActivity实例,当从ondActivity跳转到FirstActivity时,系统发现存在有FirstActivity实例,但不是位于栈顶,于是重新生成一个实例。如果发现有对应的Activity实例正位于栈顶,则重复利用,不再生成新的实例。

3.singleTask:

  在当前任务栈中,判断栈里是否存在需要的Activity,如果不存在,创建一个新Activity入栈,如果存在,会把该Activity之上的所有Activity清除出栈,显示当前的Activity。

在这个跳转过程中系统发现有存在的FirstActivity实例,于是不再生成新的实例,而是将FirstActivity之上的Activity实例统全部出栈,将FirstActivity变为栈顶对象,显示出来。SecondActivity实例被迫出栈,下次等FirstActivity跳转到SecondActivity时,找不到存在的SecondActivity实例,于是就必须生成新的SecondActivity实例。

4.singleInstance:

  新创建一个任务栈,放入新创建的Activity,该任务栈只允许存在一个Activity实例,如果已存在,那么会切换到该任务栈。两个Activity实例分别被放置在不同的栈结构。一般用于需要显示的组件是Android中重量级的组件,重新创建需要消耗很大的性能,例如WebView组件

FirstActivity跳转到SecondActivity时,重新启用了一个新的栈结构,用于放置SecondActivity实例,然后按下后退键,再次回到原始栈结构;图中下半部分显示的在SecondActivity中再次跳转到FirstActivity,这个时候系统会在原始栈结构中生成一个FirstActivity实例,然后回退两次,此时并没有退出,而是回到了SecondActivity,是因为从SecondActivity跳转到FirstActivity的时候,此时的起点变成了SecondActivity实例所在的栈结构,这样就回到了SecondActivity所在的栈结构。

时间: 2024-10-17 09:56:08

Android学习之Activity的使用的相关文章

Android学习之Activity跳转与传值

Activity跳转与传值,主要是通过Intent类,Intent的作用是激活组件和附带数据. 一.Activity跳转 方法一 Intent intent = new Intent(A.this, B.class); startActivity(intent) 方法二 Intent intent = new Intent(); intent.setClass(A.this, B.class); startActivity(intent); 实现从A跳转到B(A.B均继承自Activity) 二

Android学习笔记-Activity&Intent

界面activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:layout_width="match_parent"     android:layout_height="matc

android学习之activity

Activity 的生命周期 和 J2ME 的 MIDlet 一样,在 android 中,Activity 的生命周期交给系统统一管理.与 MIDlet 不同的是安装在 android 中的所有的 Activity 都是平等的. Activity 的状态及状态间的转换 在 android 中,Activity 拥有四种基本状态: Active/Runing一个新 Activity 启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态. Paused 当 Activ

Android学习笔记——Activity的启动和创建

http://www.cnblogs.com/bastard/archive/2012/04/07/2436262.html Android Activity学习笔记--Activity的启动和创建 最近学习Android相关知识,感觉仅仅了解Activity几个生命周期函数基本上没有任何意义的: 于是想深入了解一下Activity到底是怎么一回事怎么运行来的:里面的东东真是叫个庞大: 现在只能简单的了解其框架性的概念和流程: 一 Activity概念 Android的核心不是Applicati

Android学习杂记-Activity基础知识

本文摘录自Tekkaman博客. [Activity介绍] 一个Activity是一个应用程序组件,提供一个屏幕,方便和用户实现交互.每一个activity被给予一个窗口,在上面可以绘制用户接口.在一个Activity创建时,其实现的onCreate(Bundle savedInstanceState)方法将被系统回调,通常在这个方法里调用setContentView(View view)方法加载显示布局文件UI,并利用findViewById方法获取布局UI中的控件,对其修改数据或填充数据.

Android学习之Activity初步

Activity作为Android的第一步接触的概念,在学习中将初步的认识总结下来,以便后续的回顾与反思. 1.在用Android Studio生成第一个helloworld应用程序运行在手机上时,发现继承自Activity的MainActivity生成的界面上,默认的Label是不可见的,即使在AndroidManifest文件中定义android:Label="This is FirstActivity"也无济于事.后来才发现应该是继承Activity的原因,将其改为extends

android学习四---Activity和Intent

1.android项目资源深入了解 在深入学习android之前,先好好玩玩手机上的应用,大部分程序都有一个图标,点开图标,程序启动,一定时间后,程序会跳转到第一个界面,比如手机QQ,点开图标,会跳出一幅图,接着就跳到QQ登陆的界面(如下图).这个界面里有输入框输入QQ号码,密码,有个登陆按钮,有记住密码选择框,还有一些图标和文本.如果你输入了密码和账号后,点击登陆,程序就会响应.发送到服务器端会检查账号,密码.账号密码一致的话就会就会跳到用户界面. 假设需要实现这样的一个界面,对应的andro

android学习笔记 activity生命周期&amp;任务栈&amp;activity启动模式

activity生命周期 完整生命周期 oncreate->onstart->onresume->onpause->onstop->ondestory 使用场景:应用程序退出自动保存数据 ondestory oncreate 可视生命周期 onstart->onresume->onpause->onstop 使用场景:应用程序最小化 暂停的操作 onstop onstart 前台生命周期 onresume->onpause 界面用户仍然可见,但是失去焦

Android学习之Activity传参

一.传参的三种方法 场景分两步: 1.从第一个Activity传递参数到第二个Activity,接受并显示. 2.第二个Activity文本框输入信息,并传到第一个Activity. 传参前需要先定义Intent Intent i=new Intent(MainActivity.this,TheAty.class);//参数一当前Activity,参数二跳转Activity 传参的集中方法 1.putExtra 类似是键值对,第二个参数可以传不同类型的值 a)赋值 i.putExtra("dat