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代码:
- <activity android:label="@string/app_name"
- android:name=".HelloWorldActivity" >
- <intent-filter >
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
在一个Activity里面启动另外的Activity,示例:
java代码:
- Intent in = new Intent();
- in.setClass(HelloWorldActivity.this, T2.class);
- 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代码:
- public void onClick(View v) {
- Intent in = new Intent();
- in.setClass(HelloWorldActivity.this, T2.class);
- in.putExtra("param1", 798);
- HelloWorldActivity.this.startActivityForResult(in,123);
- }
(2)实现接收返回值并处理的方法
java代码:
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == 123) {
- if(resultCode == 456){ Log.i("HelloWorldActivity","result=="+data.getExtras().getString("ret"));
- }
- }
- }
-
2:在返回值的Activity
java代码:
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.back:
- Intent in = new Intent();
- in.putExtra("ret", "now ret=="+param1);
- T2.this.setResult(456, in);
- T2.this.finish();
- break;
- }
- }
(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】
相关推荐
“第三部分 理解Activity”是学习Android用户界面组件的基础,Activity是Android应用中用户与应用交互的界面。这部分内容将深入介绍Activity的基本概念,视图(View)和视图组(ViewGroup)的使用,以及任务和回退栈...
《Android4开发入门经典》是一本专为初学者设计的指南,旨在帮助读者掌握Android 4(也称为Ice Cream Sandwich)平台的应用程序开发。这本书通过详细的笔记和分章节的PDF文档,逐步介绍了Android开发的基本概念和...
软件介绍: 魔乐科技Android开发实战经典程序代码资源合集:第一部分:走进Android的世界第二部分:Activity程序开发第三部分:Android高级开发第四部分:Android应用开发
Android开发中,经常使用到诸如Glide(图片加载库)、Retrofit(网络请求库)、Butter Knife(视图绑定库)等第三方库,理解它们的工作原理和使用方法能提高开发效率。 《Android开发入门与实战 第二版》附带的源码...
《Android应用开发入门经典(第二版)》是学习Android编程的经典教材,其源代码提供了丰富的实践案例和示例,帮助初学者深入理解Android应用开发的基本概念和技术。在这些压缩包的文件名中,我们可以看到一系列以...
在Android开发领域,入门与实践是提升技能的关键步骤。"Android开发入门与实践体验-光盘代码"提供了宝贵的资源,帮助初学者通过实际操作来学习Android应用开发。这本书的代码部分旨在让读者深入理解Android应用的...
**第三章:活动(Activity)与意图(Intent)** Android应用由多个活动组成,每个活动对应一个屏幕。本章讲解了如何创建和管理活动,以及如何通过意图在活动之间传递数据。意图是Android中的一种机制,用于启动新的...
4. **布局设计**: 使用XML文件创建UI布局是Android开发的重要部分,如线性布局、相对布局、网格布局等,学习如何合理布局以实现美观且用户友好的界面是关键。 5. **事件处理**: 学习如何监听用户操作,如点击按钮、...
《谷歌Android开发入门指南(第三版)》源代码是一份宝贵的学习资源,旨在帮助初学者深入理解Android应用程序的开发过程。这份源代码包含了书中各个章节的实例,涵盖了Android开发的基础到进阶内容,让读者可以通过...
在Android开发领域,Google Android开发入门与实战是一本颇受欢迎的书籍,旨在引导初学者进入Android应用开发的世界。这本书由靳岩和姚尚朗合著,由人民邮电出版社出版,提供了丰富的实例和源代码来辅助学习。由于...
9. **第三方库集成**:Android开发中常会使用到第三方库,如Retrofit(网络请求)、Glide或Picasso(图片加载)、ButterKnife(视图注入)等,第9章可能会讲解如何集成和使用这些库。 10. **调试与测试**:Android ...
【Android开发入门与实战的代码】这一主题涵盖了Android应用程序开发的...随着经验的积累,你还可以进一步探索更高级的主题,如多线程、网络编程、数据库操作、第三方库的使用等,从而成为一名出色的Android开发者。
10. **第三方库**:许多开发者使用像Glide(图片加载)、Retrofit(网络请求)和Dagger(依赖注入)这样的库来简化开发过程。熟悉这些库能提高开发效率。 在压缩包中提供的27个经典源代码,很可能是围绕上述知识点...
在Android App开发领域,入门是每个开发者必经的阶段。这个"Android App开发入门范例程序"集合提供了多个章节的学习材料,旨在帮助新手快速掌握Android应用的基础开发技能。以下是各个章节和FlagAPI部分可能涉及的...
12. **第三方库集成**:Android开发中常会用到各种开源库,如Glide用于图片加载,ButterKnife用于视图注入,RxJava进行异步操作等。书中会介绍如何引入和使用这些库。 13. **Android测试**:测试是保证应用质量的...
《Android开发从入门到精通》是一本针对Android初始开发学习人员的专业书籍,由扶松柏编写,由北京希望电子出版社出版。这本书深入浅出地讲解了Android开发的基础知识和核心技能,适合于对Android开发感兴趣的读者...
《Android开发入门经典》这本书是Android开发者初学者的宝贵资源,它涵盖了Android应用开发的基础知识,从环境搭建到实际项目开发,全方位地引导新手进入Android世界。以下将详细阐述书中的核心知识点: 1. **...
第3章则会深入讲解Android应用程序的基本架构,包括Activity、Intent和生命周期。Activity是Android应用的核心组件,Intent则用于不同组件间的通信,理解它们的工作原理对于编写高效、流畅的应用至关重要。 第4章...