android中四大组件之间相互通信
好久没有写有关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中四大组件之间相互通信的更多相关文章
- Android中四大组件总结
android四大组件分别为activity.service.content provider.broadcast receiver. 一.android四大组件详解 1.activity (1)一个 ...
- Android中四大组件
Activity BroadCast Receiver 广播接收者 Service 服务 Content Provider 内容提供者 四大组件都需要在清单文件里面配置一下
- vue2.0中父子组件之间的通信总结
父组件: 子组件: 接受父组件的信息: 向父组件发送事件: (其中slot是插槽,可以将父组件中的<p>123</p>插入进来,如果父组件没有插入的内容,则显示slot内部的内 ...
- react native 之子组件和父组件之间的通信
react native开发中,为了封装性经常需要自定义组件,这样就会出现父组件和子组件,那么怎么在父组件和子组件之间相互通信呢,也就是怎么在各自界面push和pop.传值. 父组件传递给子组件: 父 ...
- Android中BroadcastReceiver组件具体解释
Android系统的4个组件最终还剩一种组件了BroadcastReceiver,这个组件是全局监听器,能够监听系统全局的广播消息,能够方便的实现系统中不同组件之间的通信 BroadcastRecei ...
- Android 短信模块分析(二) MMS中四大组件核心功能详解
接下来的分析先从MMS中四大组件(Activity ,BroadCastReceiver,Service,ContentProvider),也是MMS中最核心的部分入手: 一. Activity 1 ...
- 使用Broadcast实现android组件之间的通信 分类: android 学习笔记 2015-07-09 14:16 110人阅读 评论(0) 收藏
android组件之间的通信有多种实现方式,Broadcast就是其中一种.在activity和fragment之间的通信,broadcast用的更多本文以一个activity为例. 效果如图: 布局 ...
- 使用Broadcast实现android组件之间的通信
android组件之间的通信有多种实现方式,Broadcast就是其中一种.在activity和fragment之间的通信,broadcast用的更多本文以一个activity为例. 效果如图: 布局 ...
- vue中组件之间的通信
一.vue中组件通信的种类 父组件向子组件的通信 子组件向父组件的通信 隔代组件之间的通信 兄弟 组件 之间的通信 二.实现通信的方式 props vue自定义的事件 消息订阅与发布 vuex sl ...
随机推荐
- 搭建spring mvc项目
在之前搭建maven项目这篇的基础上继续集成,引入spring mvc支持 一.添加jar包引用 修改pom.xml文件,加入:(其他关联的jar包maven会自动引用) <!-- 项目属性 - ...
- C++箴言:理解typename的两个含义
C++箴言:理解typename的两个含义 问题:在下面的 template declarations(模板声明)中 class 和 typename 有什么不同? template<class ...
- thinkphp3.2与phpexcel基础生成
public function ff(){ import("Org.Util.PHPExcel"); import("Org.Util.PHPExcel.Workshee ...
- js只弹窗一次
<script> var alertmessage="检测到您当前浏览器为IE8或以下版本,建议您使用IE9或以上版本,或者火狐.谷歌浏览器,才能体验到最佳效果" fu ...
- 【转】 解读EOF
解读EOF 标签: fplinuxc语言filestream 2012-01-31 22:05 439人阅读 评论(0) 收藏 举报 分类: C.C++_程序设计(20) 我学习C语言的时候,遇到 ...
- Unity里的Mesh属性
----------------------------------------------------------------------------------------------- Mesh ...
- util类中非静态方法中注入serivce,在controller层是使用util。
今天碰到如题的问题,刚一开始在util中注入service总是注入失败,起初我以为是util中没有注入成功,debug看了一下果然注入不进来. 然后各种纠结,最终坑爹的问题是在controller直接 ...
- IntelliJ IDEA 14.x 快捷键/个性化设置
常用快捷键设置(设置成跟Eclipse差不多) 按照路径:File -> Settings -> Appearance & Behavior -> Keymap -> ...
- AJAX + WebService 实现文件上传
1. 界面HTML <p >上传文件: <input id="zfiles" type="file" name="file" ...
- bootstrap使用心得及css模块化的初步尝试
第一次用bootstrap到实战项目,是一个企业门户站,可以说是强行拿bootstrap上来练手,感觉并不适合. 我是用的less编译bootstrap文件,直接改less变量.然后把不可重用的部分, ...