好久没有写有关android有关的博客了,今天主要来谈一谈android中四大组件。首先,接触android的人,都应该知道android中有四大组件,activity,service,broadcast receiver,content provider,简单的翻译就是页面,服务,广播,和内容提供者。

activity:activity指的是app中的每一个页面,他是整个项目最基本的组成部分,一个项目就是有很多很多个activity组成的,activity显示的内容可以分为两种声明方式,第一种是通过XML配置文件来声明,第二中就是继承view的对象。

1.通过XML文件来配置,我们在项目中没创建一个activity,如果使用android studio来开发的话,系统会自己帮在配置文件中配置好,使用eclipse的话,则需要手动进行配置。

2.继承字view来声明:这种声明模式我们一般是自定义的时候我们用的比较多,这种灵活性比较好,复用性比较强耦合性比较强。

说到activity,那必须得谈一谈activity的生命周期了,activity的生命周期有以下的这些(手打出来的,大小写不要在意)oncreate(),onstart(),onresume(),onpause(),onstop(),onrestart(),ondestroy()  .

这七个方法就包含了整个页面从开始创建到销毁。当页面开始创建出来的时候,系统会掉用oncreate()这个方法,接着就会掉用onstart()方法,这个时候我们是看不到这个页面的,当我们看到这个页面的时候,也可以说页面获得焦点的时候,就会掉用onresume(),当页面可见,但是失去焦点的时候,系统就会掉用的是onpause(),什么是失去焦点?举个例子,页面中弹出一个对话框,我们可以看到这个页面,但是我们不能对这个页面进行操作,这个时候就是说页面失去了焦点。onstop()这个方法,翻译过来就是停止,当一个页面被另一个页面覆盖的时候,就是看不到这个页面的时候,这个页面就会掉用onstop(),这个方法,那什么时候会掉用ondestroy()这个方法呢,当我们手动进行销毁这个页面的时候,比如我们掉用finish()方法的时候,系统就会掉用ondestroy()方法,但是,这不是绝对的,很多时候系统也会掉用ondestroy()方法,比如犹豫我们代码出现问题,内存溢出啊,或者是内存泄漏啊什么的,导致程序崩溃,也会掉用ondestroy()方法。

service:android四大组件之一的service,服务是在后台上运行的,所以并没有一个可视化的界面,所以当应用程序需要进行某种不需要前台显示的计算或者数据处理时,就可以使用这个service。service一般由activity或者其他对象来进行启动的,当启动service之后,即便启动他的组件的生命周期已经结束,但是该service仍然继续运行,知道自己的生命周期结束。

当然service不同的启动方式,他的生命周期也是不同的。

1:通过startservice方式启动,当系统调用startservice方法时,如果该service还未启动,则会掉用其oncreate()方法和on start()方法.当其他的context对象调用stopservice()方法或者是service本身掉用自身的stopSelf或者stopservice()方法时才会停止。

2:通过bindService方法启动服务,当系统调用bindService方法时,如果该service还未启动,则会调用其oncreate方法,然后会将service和context对象进行绑定,当组件销毁的时候,service也会跟着销毁。

broadcast Receiver组件:

broadcast Receiver——广播,广播有两种注册方式,一种是静态注册,另一种是动态注册;

静态注册:这种注册方式可以使得应用程序安装之后,Broadcast Receiver始终处于活动的状态,通常用于监听系统状态的改变,比如说电量不足,网络状况,Wi-Fi情况等等。这种注册方式我们主要是在在AndroidManifest.xml中注册,比如:

<receiver android:name=".MyReceiver">

<intent-filter >

<action android:name="myaction"/>

</intent-filter>

</receiver>

动态注册:这种注册方式就灵活的多了,这中注册方式直接就在activity中进行注册,通常来说这样注册的Broadcast Receiver通常是用于更新ui的状态,一般来说,都是一个activity在启动的时候使用这样的方法注册Broadcast Receiver,一旦接受到了广播的事件,就可以在onReceiver方法中更新当前的这个控件,但是需要注意到的是如果这个activity不可见了,就应该unregisterReceiver方法来解除注册;

      MyReceiver receiver = new MyReceiver();

IntentFilter filter = new IntentFilter();

filter.addAction("myaction");

registerReceiver(receiver, filter);

Content Provider组件:

Content Provider组件主要用于不同应用程序之间进行数据共享。

下面说一说应用程序的内部通信

内部程序通信是简单来讲是指线程和自己开发的子线程之间的通信,在android应用程序运行时,默认情况下会成为第一个启动的组件创建一个进程,之后启动的组件都运行在这个进程中。

通常,主线程和子线程之间的通信,我们用的最多的就是handler,应用程序在主线程中维护一个消息队列,handler机制使得线程间的通信通过message和Runnable对象来传递和处理。

(1)传递消息对象

使用handler传递消息时将消息封装到一个message对象中,message类中包涵了消息的描述和任何形式的可以被handler发送的数据对象,通常,一个message对象中的字段有下面的子段:

Arg1

Int类型,当传递的消息只包含整数时,可以填充该字段以降低成本,该字段可以通过成员方法setData和getData方法访问或修改

arg2

obj object类型

what int 类型,有用户定义的消息类型码,接收方根据该字段来判断消息。

方法名

说明

sendEmptyMessage(int what)

发送一个空消息

sendMessage(Message message)

发送一个消息对象

sendMessageAtTime(Message me,long time)

在指定时间之前发送

sendMessageDelayed(Message me.long time)

在指定时间间隔之后发送

敲了着么久,好累,先休息会,下次再更。

android中四大组件之间相互通信的更多相关文章

  1. Android中四大组件总结

    android四大组件分别为activity.service.content provider.broadcast receiver. 一.android四大组件详解 1.activity (1)一个 ...

  2. Android中四大组件

    Activity  BroadCast Receiver 广播接收者 Service  服务 Content Provider 内容提供者   四大组件都需要在清单文件里面配置一下

  3. vue2.0中父子组件之间的通信总结

    父组件: 子组件: 接受父组件的信息: 向父组件发送事件: (其中slot是插槽,可以将父组件中的<p>123</p>插入进来,如果父组件没有插入的内容,则显示slot内部的内 ...

  4. react native 之子组件和父组件之间的通信

    react native开发中,为了封装性经常需要自定义组件,这样就会出现父组件和子组件,那么怎么在父组件和子组件之间相互通信呢,也就是怎么在各自界面push和pop.传值. 父组件传递给子组件: 父 ...

  5. Android中BroadcastReceiver组件具体解释

    Android系统的4个组件最终还剩一种组件了BroadcastReceiver,这个组件是全局监听器,能够监听系统全局的广播消息,能够方便的实现系统中不同组件之间的通信 BroadcastRecei ...

  6. Android 短信模块分析(二) MMS中四大组件核心功能详解

    接下来的分析先从MMS中四大组件(Activity ,BroadCastReceiver,Service,ContentProvider),也是MMS中最核心的部分入手: 一. Activity  1 ...

  7. 使用Broadcast实现android组件之间的通信 分类: android 学习笔记 2015-07-09 14:16 110人阅读 评论(0) 收藏

    android组件之间的通信有多种实现方式,Broadcast就是其中一种.在activity和fragment之间的通信,broadcast用的更多本文以一个activity为例. 效果如图: 布局 ...

  8. 使用Broadcast实现android组件之间的通信

    android组件之间的通信有多种实现方式,Broadcast就是其中一种.在activity和fragment之间的通信,broadcast用的更多本文以一个activity为例. 效果如图: 布局 ...

  9. vue中组件之间的通信

    一.vue中组件通信的种类 父组件向子组件的通信 子组件向父组件的通信 隔代组件之间的通信 兄弟 组件 之间的通信 二.实现通信的方式  props vue自定义的事件 消息订阅与发布 vuex sl ...

随机推荐

  1. jQuery倒计时插件

    倒计时jQuery插件 引言 最近又换工作了,还不错,我换工作的次数其实有点频繁,2014年7月份毕业,到现在工作已经换了3份了,工资跟刚毕业时候相比也涨了点儿,最近一次换工作我离开了深圳,来到了北京 ...

  2. web前端基础知识-(三)JavaScript基本操作

    JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编程代码. JavaScript 插入 HTML 页面后,可由所有的现代浏览器执行. JavaScrip ...

  3. 海思h264解码库

    海思的dll,解码h264  解码后转出yuv12 dll自己百度下载  hi_h264dec.dll   hi_h264dec_w.dll   调用方法: if (H264Dec.Hi264DecA ...

  4. ARCGIS常用几种本地数据AE初始化

    1.Personal GDB 新建一个在E盘的名为test的mdb: IWorkspaceFactory workspaceFactory = new AccessWorkspaceFactoryCl ...

  5. Spring系列之AOP实现的两种方式

    AOP常用的实现方式有两种,一种是采用声明的方式来实现(基于XML),一种是采用注解的方式来实现(基于AspectJ). 首先复习下AOP中一些比较重要的概念: Joinpoint(连接点):程序执行 ...

  6. .Net创建windows服务入门

    本文主要记录学习.net 如何创建windows服务. 1.创建一个Windows服务程序 2.新建安装程序 3.修改service文件 代码如下 protected override void On ...

  7. 前端工具之Gulp

    Gulp是一款前端自动化的工具,如果能熟练使用Gulp来进行开发一定可以节省很多的时间,也可以快速的提高工作效率. 在使用Gulp之前就是要配置好Gulp安装的环境,这是我们能使用Gulp快速开发的第 ...

  8. Android 四大组件之Service

    ---恢复内容开始--- 1,Service的生命周期

  9. CSS 和 JS 动画哪个更快

    基于Javascript的动画暗中同CSS过渡效果一样,甚至更加快,这怎么可能呢?而Adobe和Google持续发布的富媒体移动网站的性能可媲美本地应用,这又怎么可能呢? 本文逐一遍览了基于Javas ...

  10. 利用Render Texture实现游戏的小雷达效果(摄影机分屏)

    最近游戏蛮牛在举办一个活动,就是要做出这样的效果: 题目:实现游戏分屏效果 要求:1.        分屏,且分割线不规则(即非水平或垂直):2.        各屏可单独操作(移动.缩放),操作指该 ...