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 ...
随机推荐
- sublime text 3 3114 注册码
-– BEGIN LICENSE -– Michael Barnes Single User License EA7E-821385 8A353C41 872A0D5C DF9B2950 AFF6F6 ...
- Java实现的二分查找算法
二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小 于该中点 ...
- java并发编程实战(java concurrency in practice)
第一章 线程共享进程范围内的资源,但每个线程都有各自的程序计数器.栈以及局部变量等. 多个线程可以同时调度到多个CPU上运行. 线程的优势? 在服务应用程序中,可以提升资源利用率以及系统吞吐率 ...
- JSVirtualMachine与JSContext
JSVirtualMachine相当于进程: JSContext相当于线程:
- java支持跨平台获取cpuid、主板id、硬盘id、mac地址 (兼容windows、Linux)
windows: package cn.net.comsys.helper.system.info; import java.io.BufferedReader; import java.io.F ...
- 初识Docker和Windows Server容器
概览 伴随着Windows Server 2016 Technical Preview 3 (TP3)版本的发布,微软首次提供了Windows平台下地原生容器.它集成了Docker对Windows S ...
- Zabbix 监控 Nginx(四)
简介: 如何使用 Zabbix 监控 Nginx 状态 ? 1.获取 Nginx 状态( HTTP Stub Status ) [root@localhost ~]# /apps/product/ng ...
- SearchLookUpEdit
参考资料: 慧都控件网-DevExpress开发资源 在GridControl控件中使用SearchLookUpEdit构建数据快速输入
- visio二次开发——图纸解析
(转发请注明来源:http://www.cnblogs.com/EminemJK/) visio二次开发的案例或者教程,国内真的非常少,这个项目也是花了不少时间来研究visio的相关知识,困难之所以难 ...
- java运行过程
一.安装环境 大家在开发Java的时候,首先回装一个java的开发环境,一个JDK(也包含了JRE),然后设置环境变量,这个过程我就不细说了,大家装完后有没有发现,在装完这个环境的同时在安装JRE,在 ...