`

Android4开发入门经典 之 第三部分:Activity

 
阅读更多

 

Activity基本概念

Activity是什么

Activity是Android的一种应用组件,用来提供与用户交互的屏幕,Activity提供一个Window来绘制用户界面,通常一个Activity就是我们见到的一个应用程序的界面。
 

Activity能干什么

要注意一点,Activity只是提供View组件绘制的环境,它本身并不会绘制界面,因此,Activity主要用来:
1:提供View组件的环境,由多个View组和构成一个应用程序的界面
2:用来处理View组件的事件响应,可以在里面写界面的逻辑处理代码

视图View

视图View

视图(Views)是可以将其自身绘制到屏幕上的对象。Android的用户界面是由一系列的视图树构成,接口都是由一组以树的形式出现的视图组成的。
开发者可以通过创建一个新的视图的方法来使用自定义的图形处理技术,比如开发游戏,或者是使用 用户图形窗口界面widget。

视图组Viewsgroups

视图组是一种特殊类型的视图对象,它的功能是包含和管理下级试图和其它视图组的集合。视图组让你可以为你的用户界面添加结构,从而建立复杂并可以作为单独实体进行访问的屏幕元素。

Activity和View

Android应用程序最基本的功能单位是Activity,主要用来实现界面的功能处理,但是它本身并不能使自己显示在屏幕上。

你可以使用视图views和视图组viewgroups,它们是Android平台上的最基本的用户界面元素。

创建和使用Activity

创建Activity

创建Activity非常简单,只需要:
1:继承Activity
2:实现Activity的回调方法
比如:onCreate()方法,一定要记得在里面回调父类的onCreate方法和setContentView方法,由父类去布局界面。
3:创建Activity里面具体的View组件,并设置他们的属性和布局方式
到这个地方,画界面的工作就完成了
4:然后是具体的写界面的工作

使用Activity

要使用Activity也非常简单,Activity的展示无非两种情况,一是作为程序启动后的第一个界面,另外一个就是从其他地方导航过来。
无论哪种情况都需要在AndroidManifest.xml里面注册,对于第一种情况,注册的时候就要配置,对于第二种情况多半需要使用intent。

启动Activity

配置式

要作为程序入口的Activity,在AndroidManifest.xml里面配置即可,示例:

java代码:
  1. <activity  android:label="@string/app_name"  
  2.         android:name=".HelloWorldActivity" >  
  3.         <intent-filter >  
  4.            <action android:name="android.intent.action.MAIN" />  
  5.            <category android:name="android.intent.category.LAUNCHER" />  
  6.         </intent-filter>  
  7.     </activity>  

在一个Activity里面启动另外的Activity,示例:


java代码:
  1. Intent in = new Intent();  
  2. in.setClass(HelloWorldActivity.this, T2.class);  
  3. HelloWorldActivity.this.startActivity(in);  
如果还想要传递参数,就直接在intent里面添加extra即可。

销毁Activity

如果想要销毁Activity,可以使用

1:finish方法,销毁Activity本身
2:finishActivity方法,可以指定销毁某一个requestId对应的Activity。主要用来销毁通过startActivityForResult(Intent, int)启动的Activity,因而有requestId

注意

通常情况下,你是不需要自己去显示的销毁Activity的,Activity的生命周期是由系统来控制的,可以让系统来确定什么时候不需要这个Activity了,然后由系统去销毁。
这样就能在系统进行Activity导航的时候,不会出错。

接收启动的Activity的Result

如果想要接收启动的Activity的返回结果,可以使用startActivityForResult :

1:在启动的Activity
(1)使用startActivityForResult

java代码:
  1. public void onClick(View v) {  
  2. Intent in = new Intent();  
  3. in.setClass(HelloWorldActivity.this, T2.class);  
  4. in.putExtra("param1"798);  
  5. HelloWorldActivity.this.startActivityForResult(in,123);  
  6. }  
(2)实现接收返回值并处理的方法

java代码:
  1. protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  2. if (requestCode == 123) {  
  3. if(resultCode == 456){ Log.i("HelloWorldActivity","result=="+data.getExtras().getString("ret"));  
  4. }  
  5. }  
  6. }  
  7.    
2:在返回值的Activity

java代码:
  1. public void onClick(View v) {  
  2. switch (v.getId()) {  
  3. case R.id.back:  
  4. Intent in = new Intent();  
  5. in.putExtra("ret""now ret=="+param1);  
  6. T2.this.setResult(456, in);  
  7. T2.this.finish();  
  8. break;  
  9. }  
  10. }  
(1)把要返回的值包装在intent里面
(2)使用setResult方法
(3)结束自己这个Activity

Activity的状态

Activity的状态

Activity有三种状态,分别是:

1:resumed :
Activity被显示到前端界面,此时的Activity是 running的
2:paused
另外一个Acvitity被显示到前端界面,但此时这个Activity仍有部分处于可视状态,但此时这个Activity已经不能被用户操作了。
通常情况下,处于这个状态的Activity还是活着的,系统一般不会销毁它。但是,如果系统资源实在紧张,这个状态的Activity是可以被kill掉的。
3:Stopped
这种状态的Activity通常都是完全看不见的,处于“background ”,系统一般不会销毁它。但是,如果系统资源实在紧张,这个状态的Activity是可以被kill掉的,而且是会优先被销毁掉。

Activity的生命周期图


Activity的回调方法

onCreate() :在Activity第一次被创建的时候调用,通常在这里做一些静态初始化的工作,比如:创建views、绑定数据到列表等。这个方法会把这个Activity上一次运行所保存的状态传递进来。
onStart() : 在Activity变得可以被用户看见之前调用。
onRestart() :在Activity被stop后,重新变得可见的时候调用。
onResume(): 在Activity可见,能跟用户进行交互的时候调用。这时候,这个Activity来到Activity栈的顶端,用户就可以操作这个Activity了。
onPause()
在系统准备resume其他的Activity的时候调用。这个方法里面通常可以实现:提交未保存的数据,终止动画等。
onStop(): 当Activity不可见的时候调用这个方法。
onDestroy()
调用finish方法,或是系统判断,需要销毁这个Activity的时候调用。

Activity在屏幕旋转时的生命周期

如果不做任何配置,那么会将当前Activity实例销毁,然后再重新创建一个。
如果要避免销毁重建的过程,可以在清单文件里面,对Activity配置android:configChanges=“ orientation|screenSize”,这样会只回调onConfigurationChanged方法。
如果Activity不希望跟着屏幕旋转而发生变化,可以在清单文件里面配置android:screenOrientation,值为“portrait”是竖屏,landscape为横屏。但是如果设置了这个属性,那么android:configChanges配置会失效。

保存Activity的状态

概述

当Activity处于paused或stopped的时候,只要相应的进程还没有被销毁,那么Activity的状态会被自动的保留在内存里面。因此,你返回到这个Activity的时候,仍然能够看到上一次的数据。
然而,当Activity对应的进程被销毁过后,你再次返回或是重新进入这个Activity,上一次的数据已经丢失了,如果这种情况下,你也希望能保留上一次的状态,也就是数据,该怎么办呢?

onSaveInstanceState()方法

你可以覆盖实现onSaveInstanceState()方法来保存你想要存储的数据。对应的,系统会回调onRestoreInstanceState方法来恢复数据。
 
要注意:Android系统并不保证一定会调用onSaveInstanceState()方法,因此在这个方法里面,你只应该保存一些瞬时状态的数据,而不应该保存持久化的数据,你应该在onPause里面保存持久化的数据。

保存Activity的状态图


Tasks和回退栈

什么是Task

简单点说,Task就是为了完成某一个工作而组合在一起的Activity集合。例如:要回复短信,通常先要显示一个信息列表,然后用户打开其中一个信息,然后点击回复,然后输入回复内容,然后按下回复按键,最后显示一个发送成功的信息。那么在这个过程中,会有多个Activity,但是他们都是为了完成回复短信这个功能。所以可以把Task简单的当成“应用程序”来看。
那么在Android系统中,会把这多个Activity存储在同一个栈里面。

什么是回退栈:用来存放前面运行的Activity和相应状态的栈。

 

按返回按钮

按返回按钮的时候,回退栈会遵循后进先出的原则,把最后的一个Activity弹出栈,也就是会销毁掉最后一个Activity。
 

按Home按钮

用户按Home按钮离开整个Task,此时整个Task会在background继续运行,系统会保留Task里面的每一个Activity的状态,当用户重新再回到这个task的时候,task将回到前台运行,并恢复上次运行的状态。
如果某个Activity调用了finish方法,那么它将会从栈中消失,后面的Activity会依次移动,补充它的位置
Activity的Fragments
 
  

Loaders

概述:从Android3.0开始加入了Loaders,它能让Activity或Fragment很容易的实现数据的异步装载。

特点

1:能在任意的Activity或Fragment里面使用
2:异步装载数据
3:自动监控源数据的变化
4:当配置改变或重启的时候,能自动续连而无需重新查询数据。

常用的API

1:LoaderManager:用来创建和维护Loader,通常一个Activity或Fragment一个
2:LoaderManager.LoaderCallbacks:LoaderManager的一些回调方法
3:Loader:实现异步装载数据的抽象类,典型的实现是CursorLoader
4:AsyncTaskLoader:通过AsyncTask来实现的一个抽象Loader
5:CursorLoader: AsyncTaskLoader的一个具体实现类,它不会阻塞UI 线程,使用这个Loader的最佳场景是从ContentProvider中装载数据。
 

视频配套PPT,视频地址【Android4开发入门经典独家视频课程

 

原创内容 转自请注明【http://sishuok.com/forum/blogPost/list/0/2621.html#7470

 

 

6
6
分享到:
评论

相关推荐

    Android开发实战经典程序源代码.rar

    软件介绍: 魔乐科技Android开发实战经典程序代码资源合集:第一部分:走进Android的世界第二部分:Activity程序开发第三部分:Android高级开发第四部分:Android应用开发

    Android开发入门经典

    第一部份 Android的入门基础 第二部份 Android应用核心基础知识 第三部份 理解Activity 第四部份 用户界面 第五部份 Service 第六部份 BroadCast Receiver 第七部份 数据存储 第八部份 数据库操作

    android一步一步最基础学习__新手

    第三讲:Android模拟器的使用 emulator 第四讲:Activity入门指南 Activity 第五讲:用户界面 View(一) FrameLayout, LinearLayout 第六讲:用户界面 View(二) AbsoluteLayout,RelativeLayout 第七讲:用户...

    android开发入门与实战(下)

    第3章 清点可用资本——AndroidSDK介绍 3.1 AndroidSDK基础 3.2 深入探寻AndroidSDK的密码 3.2.1 AndroidSDK目录结构 3.2.2 android.jar及内部结构 3.2.3 SDK文档及阅读技巧 3.2.4 先来热热身——AndroidSDK例子解析...

    android开发入门与实战(上)

    第3章 清点可用资本——AndroidSDK介绍 3.1 AndroidSDK基础 3.2 深入探寻AndroidSDK的密码 3.2.1 AndroidSDK目录结构 3.2.2 android.jar及内部结构 3.2.3 SDK文档及阅读技巧 3.2.4 先来热热身——AndroidSDK例子解析...

    《Google Android开发入门与实战》

    第3章 清点可用资本——AndroidSDK介绍 第5章 千里之行始于足下——第一个应用HelloWorld 第7章 良好的学习开端——Android基本组件介绍之我的美丽我做主——Android中应用界面布局 第7章 良好的学习开端——Android...

    《Google Android开发入门与实战》.pdf

    第3章 清点可用资本——android sdk介绍 25 3.1 android sdk 基础 25 3.2 深入探寻android sdk的密码 25 3.2.1 android sdk目录结构 25 3.2.2 android.jar及内部结构 27 3.2.3 sdk文档及阅读技巧 ...

    Android 4游戏编程入门经典

    第3章 游戏开发基础  3.1 游戏类型  3.1.1 休闲游戏  3.1.2 益智游戏  3.1.3 动作和街机游戏  3.1.4 塔防游戏  3.1.5 创新  3.2 游戏设计:笔比代码更强大  3.2.1 游戏的核心机制  3.2.2 一个故事和一种...

    android入门课程大全(含源码)

    第一讲:Android开发环境的搭建 第二讲:Android系统构架分析和应用程序目录结构分析 第三讲:Android模拟器的使用 第四讲:Activity入门指南 ······

    ARM Cortex-A8和Android 4.x联动报警系统

    第三部分内容,先教大家如何搭建裸机开发环境,然后带领大家一起阅读三星的芯片手册,并编写了LED、蜂鸣器、按键、中断、串口UART、实时时钟RTC、定时器PWM、模数转换ADC等裸机驱动;第四部分,讲解了Linux设备驱动...

    Google.Android开发入门与实战

     《Android开发入门与实战》内容上涵盖了用Android开发的大部分场景,从Android基础介绍、环境搭建、SDK介绍、Market使用,到应用剖析、组件介绍、实例演示等方面。从技术实现上,讲解了5个Android平台下的完整综合...

    android开发入门教程

    第14章 Android综合案例三——基于Android的豆瓣网(Web2.0)移动客户端开发 14.1 关于豆瓣网和豆瓣网API 14.1.1 豆瓣网介绍 14.1.2 豆瓣网API介绍 14.1.3 豆瓣网API认证 14.1.4 豆瓣网API快速入门 14.1.5 豆瓣网API...

    Android入门.doc

    第三步:部署 HelloWorld 应用程序到模拟器并运行 增加一个按钮,按钮显示的文字是“世界,你好” 4. Android 的基本概念 application Android 程序中可能包含的组件 Activity – 界面组件 Service – 没有界面,在...

    Android入门到精通源代码.

    第3章 Android中的Activity 3.1 Activity的作用 3.2 单Activity的Android应用 3.2.1 Activity的生命周期 3.2.2 Activity类的结构 3.3 Activity的两种界面设计方式 3.3.1 基于XML的界面设计 3.3.2 基于代码的界面设计...

    Android高薪之路:Android程序员面试宝典 李宁

    第3章 组件 3 1 组件的属性 3 2 文本组件 3 3 按钮组件 3 4 图像组件 3 5 进度组件 3 6 列表组件 3 7 容器组件 3 8 自定义组件 3 9 四大应用程序组件 3 9 1 Android中的窗口:Activity 3 9 2 广播接收器:Broadcast ...

    老罗android开发视频教程全集百度网盘下载

    【第一版第三章】老罗Android开发视频--HTTP协议编程(4集) 【第一版第四章】老罗Android开发视频--解析XML数据(3集) 【第一版第五章】老罗Android开发视频--解析JSON数据(4集) 【第一版第六章】老罗Android...

    andriod开发入门第一课

    经典的andriod入门必学一,课堂复习 1,什么是安卓? 一款开源的基于linux的操作系统 2,安卓的体系结构 上层:基于java的应用程序开发 中间层:虚拟机Dalvik 底层:基于linux的C++编程 3,安卓的开发环境(IDE) 1,...

    Google Android开发入门与实战的代码

    第3章 清点可用资本——Android SDK介绍 25 3.1 Android SDK 基础 25 3.2 深入探寻Android SDK的密码 25 3.2.1 Android SDK目录结构 25 3.2.2 android.jar及内部结构 27 3.2.3 SDK文档及阅读技巧 ...

    Android从入门到精通(明日科技著)第十五章源代码家庭理财通

    内容包括Android快速入门、Android模拟器与常用命令、用户界面设计、高级用户界面设计、基本程序单元Activity、Android应用核心Intent、Android事件处理、资源访问、图形图像处理技术、多媒体应用开发、Content ...

Global site tag (gtag.js) - Google Analytics