android初学之四大组件

来源:互联网 发布:路面弯沉计算软件 编辑:程序博客网 时间:2024/05/29 05:10

1.activity组件

    activity是活动窗口,用户可以操作的界面,比如大家点击QQ图标之后见到的界面,用户可以点击好友弹出对话界面,点击空间可以查看好友动态等等,这些东西都包含在activity当中,是一组View的集合。

       一个应用是由一个或者多个activity组成,由用户的设计来决定activity的个数,例如一个应用必须经过登陆之后才能使用,那么首先显示的activity是登录窗口,包括输入用户名和密码,登陆和注册按钮,输入用户名、密码之后,点击登陆,应用会和服务器进行数据交换,登陆成功,转换activity,显示主界面。

      在系统运行过程中有多个activity,同时存在,但是当前可操作的只有一个activity,其它的都被隐藏,当被切换过来的时候,又成为了当前操作的activity,那么必须探讨一下activity的生存周期,能够很好的运用activity。

      activity有onCreate、onPause、onStop、onResume、onDestroy、onStart和onRestart几种状态,如何获得这几个状态呢,我们创建一个activity时,必须要继承Activity这个类,那么可以重写父类的方法得到这几个方法,例如当activity被创建的时候调用onCreate方法,其实在创建类的时候,eclipse自动会写好这几行代码:

   

@Override
public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);                     setContentView(R.layout.lifecycle);  }
   注意在重写父类的时候要写上super.onCreate,其它的几个方法类似。

   

<span style="font-size: 24px;"> </span><p><span style="font-size: 24px;">  </span><span style="font-size:12px;">@Override      protected void onStart() {          super.onStart();       }            @Override      protected void onRestart() {          super.onRestart();      }                @Override      protected void onResume() {          super.onResume();      }    @Override      protected void onPause() {          super.onPause();              }      @Override      protected void onStop() {          super.onStop();          }            @Override      protected void onDestroy() {          super.onDestroy();       } </span></p>

   activity的生命周期可以有一张图说明:

  

  注意当内存紧张的时候系统会自动销毁onPause状态的activity释放空间。


  学习了activity的生命周期,那么由activity到另一个activity中,消息是如何传递的呢,还是之前的例子,登陆之后获取到用户的信息,比如在数据库存储的主键值(在数据库中唯一的值,用来标识在数据库中的位置),利用它我们可以很方便的找到自己的信息(登录名、登陆状态以及好友信息等等),这个主键值可以用Intent传递到下一个即将显示的activity中。

  

Intent intent=new Intent(MainActivity.this, OtherActivity.class);                //Bundle类用作携带数据                Bundle bundle=new Bundle();                bundle.putInt("id", 24);                //附带上额外的数据                intent.putExtras(bundle);                startActivity(intent);

2.Services

    服务没有可见的用户界面,但是可以在后台运行任意长的时间。例如,一个服务可以在用户转向其他工作后仍然在后台播放音乐,或者从网上下载数据,或者计算一些东西然后在需要的时候提供给活动。每个服务都继承自 Service基类。 
    一个主要的例子就是从列表中播放音乐的媒体播放器。播放器程序可能会有一个或几个活动,这些活动可以让用户选择希望播放的音乐然后显示播放。但是音乐播放过程本身不会使用一个活动,因为用户希望在切出播放器界面做别的事情时音乐也能一直放下去。为了保持播放继续,播放器的活动可以启动一个在后台运行的服务。然后即使启动这个服务的活动退出,音乐播放服务也能继续运行。 
   你可以连接(connect)或者绑定(bind)到一个正在运行的服务(如果这个服务还没运行的话就启动它)。当连接到服务后,你可以通过服务暴露出来的接口和这个服务进行通信,对音乐播放服务来说,这个接口可能允许用户暂停,后退,停止,重新播放等操作。
   像活动和其他组件一样,服务运行在这个应用程序进程的主线程中。因此为了不阻塞其他的组件或者用户界面,服务经常为那些耗时长的任务单独开一个线程(比如音乐播放)。 
   网上一个比较详细的介绍service、binder和service manager之间的关系,http://www.linuxidc.com/Linux/2011-04/33966p6.htm,简单的说activity是一个进程,serveice是一个进程,那么在linux中进程之间的通信机制是IPC,而binder属于activity和service两个不同进程之间的通讯,相当于IPC的通信机制。

3.Broadcast

     广播接收器只是接收广播并对广播信息做出作出反应,多数的广播是由系统代码发出的——-比如反应时区变化的通知,电量低的通知,照了一张照片的通知,或者用户修改了系统语言的通知。应用程序也可以自己定义广播,比如定义这样一个广播,让其他的应用程序知道某些数据已经下载完毕了可以使用了。 
    应用程序可以有任意数量的广播接收器来对他所关心的广播进行监听并作出反应。所有的广播接收器都继承自BroadcastReceiver基类。   
    广播接收器不显示在用户界面上,但是可以启动一个活动来对接收到的信息进行响应,
或者可以使用 BroadcastReceiver 来警告用户。Notifications(通知)可以通过不同的方式引起用户的意,比如使背景灯闪烁,使设备振动,播放声音等等。通常是在状态栏上显示一个不会消失的图标,用户可以打开这个图标查看通知。 

4.Context Providers

         内容提供者使程序中特定的数据可以被其他程序使用。这些数据可以存储在文件系统中,SQLite 数据库中,或者任何其他可以存数据的地方。内容提供者继承ContentProvider基类,实现了一系列的使其他程序获取和存储其支持的数据格式的方法,但是应用程序不直接调用这些方法。而是使用一个 ContentResolver 对象,然后调用这个对象的方法。ContentResolver 可以和任何的内容提供者交流,它和提供者协作来管理所有涉及到的进
程间的通信。 
   以上是参考资料和自己的理解,如有不足之处共同探讨。

0 0
原创粉丝点击