Android学习第一天--Activity相关

 

 1、理解Activity

  

   Activity 是用户接口程序,原则上它会提供给用户一个交互式的接口功能。它是 android 应用程序的基本功能单元。Activity 本身是没有界面的。所以activity类创建了一个窗口,开发人员可以通过setContentView(View)接口把UI放到activity创建的窗口上,当activity指向全屏窗口时,也可以用其他方式实现:作为漂浮窗口(通过windowIsFloating的主题集合),或者嵌入到其他的activity(使用ActivityGroup)。activity是单独的,用于处理用户操作。几乎所有的activity都要和用户打交道.

     Tips:简单的说Activity就像一个容器,本身是没有界面的,用户可以向Activity容器中添加组件(其实这种说法貌似存在不合理的地方

             Activity表示一次活动的意思,就像一场话剧,用户可以向Activity中添加UI组件丰富Activity的内容

API原文介绍:

      Ch:Activity是用户唯一可以看得到的东西,几乎所有的Activity都应该与用户进行交互。所以Activity主要负责的就是创建显示窗口,你可以在这些窗口里使用setContentView(View)来显示自己的UI。

      onCreate(Bundle)这个方法是初始化Activity的地方,更重要的是,你可以在这里

面使用setContentView(int)来设置UI布局所使用的layout资源,资源通过使用findViewBy(int)来获得对应的视图

     onPause():当用户离开activity的时候(并不一定销毁了)进行的相关操作,用户做的任何改变都应该在该点上提交(提交到ContentPruvider保存数据)

    

 ☞  ContentProvider是什么?(延生)

     数据库在Android当中是私有的,当然这些数据包括文件数据和数据库数据以及一些    其他类型的数据。
      不能将数据库设为WORLD_READABLE,每个数据库都只能创建它的包访问,
    这意味着只有由创建数据库的进程可访问它。如果需要在进程间传递数据,
    则可以使用AIDL/Binder或创建一个ContentProvider,但是不能跨越进程/包边界直接         来使用数据库。
   一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读    取此Content Provider的各种数据类型。
   也就是说,一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露    出去。 外界根本看不到,也不用看到这个应用暴露的数据在应用当中是如何存储的,或    者是用数据库存储还是用文件存储,还是通过网上获得,这些一切都不重要,
   重要的是外界可以通过这一套标准及统一的接口和程序里的数据打交道,可以读取程序    的数据,也可以删除程序的数据


 2、编程练习

         1、Activity之间的信息传递  

              信息传递:

                Intent intent = new Intent(MainActivity.this,

                    NextActivity.class);

                       Bundle bundle = new Bundle();

                       bundle.putString("info","这是从MainActivity传递过来的信                   息");

                       intent.putExtras(bundle);

                       startActivity(intent);    

              信息获取:

                Bundle bundle=getIntent().getExtras();

              String info=bundle.getString("info");  

               Bundle、Intent? 

               Bundle:A mapping from String values to various Parcelable types 

                 就是存储数据的键值对,不过value必须是String对象,一种特殊的键值对   

          Intent:在一个Android应用中一般是由四种组建构成的

                   Activity、Service、Broadcast Receiver、Content Provider

               他们相互独立,相互调用、协调工作。组件之间的通信是有Intent协助完成的

             Intent负责对应用中的一次操作的动作、动作涉及数据、附加数据进行描述(可以理解intent不只是简单的传递数据),android根据Intent的描述负责找到对应的组件,                         intent传递给调用的组件,并完成组件的调用。

                     Intent在这里其中媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦

            ☞ ?Intent对一次操作的抽象描述指什么?

                  1、对于要执行的动作(action)的简单描述(VIEW_ACTION,EDIT_ACTION)

                  2、执行该动作要操作的数据data(并非是传递的数据),android采用指向数据的URI来表示。

                  3、附加属性:

                         Category:action动作的附加信息(例如动作的优先级?)

                         Type:显示的指定Intent的数据类型

                         Component(组件):指定Intent目标组件的名称

                         Extras(附加信息):是其他所有附加信息的集合(初学者常用

                  Tips:action、data/type、category、extras形成了一种语言,android 系统可以理解

            ☞ ?Android如何解析Intent

                   直接Intent、间接Intent(查找资料)

                   若是直接intent,android则不需要解析

            Intent的解析机制主要是通过查找已注册的在AndroidManifest.xml文件中 的所有的IntentFukter及其中定义的Intent,最终找到匹配的Intent。

                 详细过程如下:action 、type、category

                   如果Intent指定了action,则目标组件的IntentFilter的action列表中就必须包含这个action,否则不能继续匹配

                   如果没有提供type,系统将从data中得到数据类型,并且目标组件的数据类型列表中必须包含Intent的数据类型,否则不能匹配

                   如果Intent中的数据不是content: 类型的URI,而且Intent也没有明确指定它的type,将根据Intent中数据的scheme (比如 http: 或者 mailto: ) 进行匹配。同上,                                  Intent 的scheme必须出现在目标组件的 scheme列表中。
                 

                   如果Intent指定了一个或多个category,这些类别必须全部出现在组建的类别列表中。比如Intent中包含了两个类别:

                    LAUNCHER_CATEGORY 和 ALTERNATIVE_CATEGORY,解析得到的目标组件必须至少包含这两个类  别。

           参考:http://bbs.hiapk.com/thread-7959-1-1.html

       2、趣味Activity之间的切换效果集锦

           例子源程序中

              各种各样的效果都经过尝试了一次,感觉效果还不错哦,不过都是从网上照的 源码,能否自己定义一些特效么?


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值