Android4开发入门经典 之 第三部分:Activity【私塾在线原创】

本文深入探讨了Android应用中Activity的基本概念、作用及使用方法,同时介绍了View视图及其组的概念,详细解释了Activity和View之间的关系。文章还提供了创建和使用Activity的步骤,以及如何在AndroidManifest.xml中注册Activity。此外,本文阐述了Activity的状态管理、生命周期回调方法,并解释了如何保存Activity的状态。最后,文章还涉及了Activity在屏幕旋转时的生命周期处理,以及如何使用Fragments和Loaders进行异步数据加载。

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里面启动另外的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开发入门经典独家视频课程

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26715458/viewspace-717425/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26715458/viewspace-717425/

基于遗传算法的微电网调度(风、光、蓄电池、微型燃气轮机)(Matlab代码实现)内容概要:本文档介绍了基于遗传算法的微电网调度模型,涵盖风能、太阳能、蓄电池和微型燃气轮机等多种能源形式,并通过Matlab代码实现系统优化调度。该模型旨在解决微电网中多能源协调运行的问题,优化能源分配,降低运行成本,提高可再生能源利用率,同时考虑系统稳定性与经济性。文中详细阐述了遗传算法在求解微电网多目标优化问题中的应用,包括编码方式、适应度函数设计、约束处理及算法流程,并提供了完整的仿真代码供复现与学习。此外,文档还列举了大量相关电力系统优化案例,如负荷预测、储能配置、潮流计算等,展示了广泛的应用背景和技术支撑。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及从事微电网、智能电网优化研究的工程技术人员。; 使用场景及目标:①学习遗传算法在微电网调度中的具体实现方法;②掌握多能源系统建模与优化调度的技术路线;③为科研项目、毕业设计或实际工程提供可复用的代码框架与算法参考; 阅读建议:建议结合Matlab代码逐段理解算法实现细节,重点关注目标函数构建与约束条件处理,同时可参考文档中提供的其他优化案例进行拓展学习,以提升综合应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值