码迷,mamicode.com
首页 > 移动开发 > 详细

Android之Activity个人理解

时间:2015-06-08 11:25:26      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

        在android开发中Activity非常重要,在一个应用中,每一个显示的屏幕都是一个Activity.在API中Activity在Android。app包下,它继承了一下一些类:
        java.lang.Object 
        android.content.Context 
        android.content.ContextWrapper 
        android.view.ContextThemeWrapper 
        其中个人感觉Android中的Activity和web里面的Servlet有着不分相似的地方,其中为了让Servlet去响应用户的需求,需要去复写程序中的Httpservlet的doRequest()和doResponse()方法,等。Activity与其类似的是创建一个Activity也需要实现其中的很多回调方法,最常见的就是onCreat方法,该方法是在Activity创建的时候进行回调,其中实用setContentView方法来显示要展现的布局界面。

// 继承Activity  
 public class MainActivity extends Activity {      
 // 声明要使用的组件      
 private TextView myTextView;      
 private Button myButton;      
 // 覆盖onCreate方法      
 public void onCreate(Bundle savedInstanceState) {          
 super.onCreate(savedInstanceState);          
 // 设置当前视图           
 setContentView(R.layout.main);             
 }  
 }  

 


 再谈谈Activity的在AndroidManifest.xml中的配置:
 <activity android:name=".MainActivity" android:label="@string/app_name"> 
     以上是Activity的通用配置格式,如果是作为第一个启动的主函数还需要配置 <intent-filter> 标签。

 <intent-filter>                  
 <action android:name="android.intent.action.MAIN" />                  
 <category android:name="android.intent.category.LAUNCHER" />              
</intent-filter>  

一个Android应用通常包含很多个Activity,但是只有一个Activity是作为主接口进行操作,主接口的action都是设置为android.intent.action.MAIN, 每一个Activity都只能有一个Action定位,但可以同时有多个category,category的作用是在intent进行启动其他Activity的时候进行进行显示方法声明和隐士方法声明的时候会使用到。
Activity启动其他Activity有如下两种方法:
1.starActivity(Intent intent):启动其他Activity
2。startActivityForResult(Intent intent,int requestCode):以制定的请求码来启动Activity,在程序关闭启动的Activity之后,之前的Activity可以通过复写onActivityResult方法来获取返回值。
上面两个都需要用到参数Intent,Intent是Android里面的一个重要是通讯组建,个人感觉了解过javaweb的struts2的人,或者对MVC设计模式有了解的人会觉得Intent设计有点类似于Struts2的逻辑视图设计,其中Intent的显示声明如下所示,其中还有一个隐士声明,在之后的专门介绍Intent里面进行讲解。
 // 显示方式声明Intent,直接启动SecondActivity   
  Intent intent = new Intent(FirstActivity.this,SecondActivity.class); 
启动Activity还有4中加载模式:
1.standard模式
这种模式来启动Activity的时候每次安卓都会常见一个新的实例,并将该Activity添加到task栈顶,这种模式不会启动新的task,心的Activity将会放入当前task栈的栈顶。
2.singletop模式
这种模式和standard模式基本类似,有一点不同的就是当要启动的Activity已经位于task的栈顶位置的时候不会创建心的Activity,而是直接实用当前的Activity。
3.singletask模式
此模式在Activity不存在的时候,系统会正常的创建Activity的实例并假日task的栈顶。如果该Activity已经位于栈顶处理方法和singletop一样,最后当Activity已经存在但没有位于栈顶,则将此task中的所有Activity全部移除再在task栈顶创建新的Activity
4.singlelnstance模式
这种模式比较简单,要启动的当前Activity不存在则创建一个新的task来存放Activity,如果已经存在需要创建的Activity则将存在需要调用的Activity的task转到前台,从而显示Activity。
说完启动在来说说关闭,相对于启动Activity关闭就简单多了,关闭也是只有两个方法:
1.finish():关闭当前Activity,相当于是this。finish的意思。
2.finishActivity(int requestCode):此方法对应上面的startActivityForResult启动方法。通过code的值来分辨返回值的处理地方。
启动了两个Activity之后就会有在两个Activity之间通信的问题,其中Intent提供了很多重载的方法来提供数据的交换:
1、putExtras和bundle getExtras,其中前者是想Intent中放入需要携带的数据,后者是取出携带的数据,一般会先顶一个list或者map函数来存放数据包。
2.putExtra(String name,xxx value)和getxxxExtra(Sting name),其中前者是像Intent中按照key-value的行使存入数据,后者是通过key的值来取出对应的数据,整体来说,就是一个map集合的封装。
3.putserializable(String key,serializable data)和getserializable(String key,serializable data)其中前者是存放一个可以序列化的数据,后者是取出相对应的序列化的数据。其中什么是可序列化可以查看java基础IO流里面有详细解释。
以上是Activity之间的可用通信,继续看到的就是Activity的内部的回调机制,说到Activity的回调函数就很容易想起javaweb里面的Servlet运行在toncat服务器的时候,会根据不同的场景,选择的实现其中的方法有init,destroy,doget,dopost,service等,安卓中的Activity和javaweb中的Servlet有类似,也就是说Activity在开发出来之后也有很多和生命周期相关的方法进行调用。Activity只需要在AndroidManifest.xml里面进行配置就行,至于该Activity何时被实例化,它的方法合适呗调用,都能做出一个很准确的判断。
上面说道Activity的声明周期,其中大致可以总结为四个状态:活动状态,暂停状态,停止状态,销毁状态。
在整体的生命周期里面大致有如下方法会被系统回调:
1.onCreat:创建Activity的时候调用。
2.onStart:启动Activity的时候调用。
3.onRestart:重新启动Activity的时候调用。
4.onResume:回复Activity的时候呗调用,onRestart方法后一定回调此方法。
5.onPauser:暂停Activity的时候调用
6.onStop:停止Activity的时候调用
7onDestroy:销毁Activity的时候调用
正如开发Servlet的时候选择需要复写的方法一样Activity也是一样根据自己的需要进行复写其中的方法,其中最常见的就是创建Activity的时候调用的onCreat方法。
         按照思路想到的Activity的重点就是以上这些,其实在写的时候还花了点时间回顾Servlet感觉这两者确实有很多相似的地方。比如Activity和Servlet都需要进行配置,都是系统的基类,都需要响应的容器才能运行,都有包含生命周期的回调方法等等一些,当然两者之间也存在很多不同,能想到的就只有两点:1.Activity最后会通过安卓显示出来,而Servlet并不会显示出来,Servlet只会通过方法返回对应的jsp页面传递给客户端交由其他的脚本语言进行页面的显示,2.Activity通过Intent来进行跳转传递值,而Servlet主要是通过用户的请求对象来控制跳转。按照我个人观点,似乎安卓的Activity也是有类似的MVC模式设计的感觉,其中也是做到数据层(sope等协议返回数据)和表现层(layout布局模块)进行分开设计,通过中间层(Activity )来转接。(MVC,它是一个设计模式,它强制性的使应用程序的输入、处理和输出分开),当然此为新手的初步认识,看了不少的Android内容,以上就是对于Activity自己的理解和总结,这几天有想法的时候还会总结下Android中四大组件的其他三个。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
         每次写这种总结都会有很多新的想法,不过写这篇花的时间是最长的,主要还是对于Servlet的东西有点生疏了。拿着javaweb的书翻了大概两个时才回忆起大部分的东西。

Android之Activity个人理解

标签:

原文地址:http://www.cnblogs.com/zuox/p/4560373.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!