7_四大组件之一_Activity学习

来源:互联网 发布:mac互联网恢复功能 编辑:程序博客网 时间:2024/06/06 20:17

#1:什么是Activity?

在javaweb中一个页面通常是一个jsp文件,而一个Servlet通常包装一个jsp,所以,在跳转的时候

一般都是跳到某个servlet,然后servlet中不光有这个页面的展示代码,而且还有对这个页面操作的

代码!(Jsp仅仅是UI代码,但Servlet包括UI并且包括对UI操作的后台代码!)


同理,在安卓中View就是一个窗体(页面),而一个Activity就包装一个View,所以,在跳转的时候,

一般都是跳到某个Activity,然后在Activity中不光有这个窗体的展示代码,而且还有对这个窗体操作

的代码!(View仅仅是UI代码,但Activity包括UI并且包括对UI操作的后台代码!)




#2:配置Activity

(2.1)通常,在某个包里面可以定义好多个Activity的java类,它们都继承自AppCompatActivity;

而配置各个Activity都在AndroidManifest.xml文件中配置!

即:定义Activity类在某个包下,而配置则在清单文件中配置!


(2.2)

<manifest>

       <application>

              //在这里配置各个Activity!

       </application>

</manifest>


(2.3)

一般配置哪些项呢?:

<activity   android:name=""   android:icon=""   android:label=""  …………>

       <intent-filter>

       </intent-filter>

</activity>

如上面所示,基础的一些配置我就不介绍了,比如,肯定要配置它的名称,表示我在配置哪个Activity!

这里重点介绍每个activity的  intent-filter配置项:

<intent-filter>

    <action……/>

    <action……/>

    <catgory……/>

    <catgory……/>

</intent-filter>

假如:在上面的intent-filter中有action1,action2,那么,意味着,只要将来在某个地方涉及到

启动一个意图,如果这个意图的action属性等于action1或者等于action2,那么,这个意图启动的

时候就会跳到我当前这个Activity中来!


javaweb中,在struts2出来之前,以前的做法是当来一个请求时,交给Servlet处理,它处理完了之后然后

直接跳到某个确定的jsp页面中去;但是,当引入struts2之后,来一个请求,交给Action处理,然后处理完了

之后则返回一个字符串比如success,而在某个配置文件中事先配好了各个字符串对应哪个页面,比如

success-success.jsp,fault-fault.jsp……,这样一来,就不是直接把跳到哪个页面去的代码写死了,而是动态

地配置,这样做的好处就是让Action和Jsp页面之间的关系解耦,让它们基本没有什么联系,这样的设计显然

更符合“高内聚低耦合”的思想!


同理,在安卓中,这里的action配置项的作用有点类似上面!即:以后要启动某个页面时,我并不是直接写我启动

哪个页面,而是启动意图中包含一个action的字符串,然后在各个Activity中配置好action,如果那个启动的意图中

的action对应的字符串是自己的,那么自己就会启动!


具体的是这样:

每个Activity在配置时可以配置 多个Action、多个Category,

假如:Activity1中配置了:  action1,action2,category1,catetgory2;

假如:Activity2中配置了:  action3,aciton4,category3,category4;


而在别的地方启动一个意图时,即Intent对象,一个Intent对象它只能有一个Action字段 和 可以有多个Category字段,

比如: intent1 = new Intent(action1, category1, category2);

比如:intent2 = new Intent(action4, category1, category2, category3, category4);


原则是这样:当启动某个意图时,如果要看某个Activity是不是会被触发跑起来,则看这个Activity的配置是否>=这个Intent

,如果>=,则这个Activity就会起来,否则没反应!

比如上例中,如果启动intent1,则:Activity1会启动!

比如上例中,如果启动intent2,则:没有Activity会启动!


进一步拓展:

在创建意图Intent对象时,这个对象初始会有一个Category的属性值: Intent.CATEGORY_DEFAULT,所以,一个intent

对象即使你不给它赋Category的值那它也有一个值!貌似也有这样一点:一个Activity的配置中,即使你不给它配置category,

系统默认也会给它配置一个category,且值为Intent.CATEGORY_DEFAULT!所以,我们在配置Activity时可以不配置

category,因为至少有一条默认配置、我们在创建意图Intent对象时,可以不用赋值category字段,因为有默认值!那么,

我们只需要关心Action即可!


进一步拓展:

回顾一下我们的安卓程序一开始都是从一个叫做MainActivity的类开始,而且它的配置中要求了两点:

<activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

 </activity>

即要求: action="……MAIN",category="……LAUNCHER",

那么我们猜测:安卓虚拟机在启动时,肯定后台代码是启动一个意图,且这个意图的action属性为……MAIN,这个意图的category属性为……LAUNCHER!



#3:启动、关闭Activity:

(3.1)见236页例子:

注意,在一个Activity跳到另一个Activity的时候,我们这个例子中是显示的Intent,需要注意的是,肯定要定义两个Activity类,一定要注意

的是:在清单文件中要分别配置他俩,哪怕配置项几乎是空的,也要在清单文件中配置他们,否则会出现点完跳转之后一闪而过,结束程序!


原创粉丝点击