好久没有写有关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. List集合的迭代器方法

    1.后台JAVA代码的实现 //获取所有的支付方式的迭代器 // 获取支付方式 @RequestMapping(value = "get/payed/type", method = ...

  2. 简明Linux命令行笔记:mv

    重命名.覆盖或移动文件 mv [options] existing-file new-filename mv [options] existing-file-list directory mv [op ...

  3. Java Web笔记之Servlet(1)

    今天在学习Servlet时,使用浏览器显示的网页效果与预期的有差异,仔细查找发现实<!DOCTYPE>声明的问题,截图如下: 代码如下: package secondServlet; im ...

  4. thinkphp3.2与phpexcel带图片生成 完美案例

    thinkphp3.2与phpexcel完美案例 // 导出exl public function look_down(){ $id = I('get.id'); $m = M ('offer_goo ...

  5. Android高手速成--第一部分 个性化控件(View)

    第一部分 个性化控件(View) 主要介绍那些不错个性化的View,包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.Pro ...

  6. Linux C 静态库(.a) 与 动态库(.so) 的详解

    库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 一.静态库和动态库的区别 1.静态函数库 这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比较 ...

  7. Alpha版本十天冲刺——Day 10

    站立式会议 最后一天,很高兴我们做出了跟预期差不多的版本,实现了基本功能,虽然还有一些bug,但是下一阶段我们会继续加油! 会议总结 队员 今天完成 遇到的问题 感想 鲍亮 功能细节更改 我的手机运行 ...

  8. 如何使用JS来检测游览器是什么类型,或android是什么版本号- 转载

    var brower = { versions:function(){ var u = window.navigator.userAgent; var num ; if(u.indexOf('Trid ...

  9. Nginx反向代理+keepalived

    环境两台LB(nginx).两台web(nginx/apache都行) 安装httpd web01 [root@web01 /]# /etc/init.d/iptables stop iptables ...

  10. Python转码问题的解决方法:UnicodeDecodeError:‘gbk' codec can't decode bytes in position

    在开发过程中遇到了错误:UnicodeDecodeError: ‘gbk' codec can't decode bytes in position 678-679...这是因为遇到了非法字符, 解决 ...