android四大组件

来源:互联网 发布:空军一号 知乎 编辑:程序博客网 时间:2024/05/22 03:36

1.actiity

在android中,1个avtivity通常代表一个界面,通过setcontent来显示指定的控件,和用户进行交互。activity之间通过intent通信,activity有7大生命周期。

oncreat  onstart  onresume onpause onstop ondestory onrestart

一个界面跳其他界面:经过A的oncreat  onstart onresume onpause ,此时B覆盖A界面,调用B的oncreat  onstart onresume(此时如果B是对话框或者透明的就不会调用A的onstop),反之,A调用onstop,然后Bonpause,在到A的onrestart  onstart onresume 然后调用B的onstop ondestory,最后A的onpause onstop ondestory


2.service

后台的服务,不提供页面的呈现,有绑定的服务和不绑定的服务。

不绑定的服务(如果不指定service所在的线程,默认是在UI线程中,且service里面不可以执行耗时操作,包括网络请求,拷贝数据库,大文件。可以指定service所在的进程,在清单中设置android:name=“包名+类名”)。

不绑定的service生命周期:oncreat onstart ondestory——只能手动的添加开始和终止的代码 startservice和stopservice

绑定的service生命周期:oncreat  onbind onunbind ondestory——通过bindservice来创建服务


3broadcastreceiver广播接收者

Broadcast是一种广泛运用的在应用程序之间传输信息的机制,Android中我们要发送的广播内容是一个Intent。这个Intent中可以携带我们要传送的数据。Android中要接受广播中的内容则是通过注册一个BroadCastReceiver来接收的。只有发送广播的action和接收广播的action相同,接受者才能接受这个广播。

作用:1.实现了不同的程序之间的数据传输与共享,因为只要是和发送广播的action相同的接受者都能接受这个广播。典型的应用就是android自带的短信,电话等等广播,只要我们实现了他们的action的广播,那么我们就能接收他们的数据了,以便做出一些处理。比如说拦截系统短信,拦截骚扰电话等等

2.起到了一个通知的作用,比如在service中要通知主程序,更新主程序的UI等。因为service是没有界面的,所以不能直接获得主程序中的控件,这样我们就只能在主程序中实现一个广播接受者专门用来接受service发过来的数据和通知了。


分为:动态注册和在xml中指定(静态)

之间的区别就是作用的范围不同,程序动态注册的接收者只在程序运行过程中有效,而在xml注册的接收者不管你的程序有没有启动有会起作用。

1.动态注册广播不是常驻型广播,也就是说广播跟随activity的生命周期。注意: 在activity结束前,移除广播接收器。

 静态注册是常驻型,也就是说当应用程序关闭后,如果有信息广播来,程序也会被系统调用自动运行。

2.当广播为有序广播
          1 优先级高的先接收
          2 同优先级的广播接收器,动态优先于静态
          3 同优先级的同类广播接收器,静态:先扫描的优先于后扫描的,动态:先注册的优先于后注册的。
3当广播为普通广播时:
         1 无视优先级,动态广播接收器优先于静态广播接收器
         2 同优先级的同类广播接收器,静态:先扫描的优先于后扫描的,动态:先注册的优先于后注册的。

动态注册:

例子1:

private ReceiveBroadCast receiveBroadCast;  //类中先拿到广播实例

//此方法是按钮的监听,点击按钮的时候在注册广播,发送消息
@Override
        public void onClick(View view)
        {
            // 注册广播接收
            receiveBroadCast = new ReceiveBroadCast();
            IntentFilter filter = new IntentFilter();
            filter.addAction(flag);                       //只有持有相同的action的接受者才能接收此广播
            registerReceiver(receiveBroadCast, filter);
        }
}
 
public class ReceiveBroadCast extends BroadcastReceiver
{
 
        @Override
        public void onReceive(Context context, Intent intent)
        {
            //得到广播中得到的数据,并显示出来
            String message = intent.getStringExtra("data");
            txtShow.setText(message);
        }
例子2:得到手机当前的电量

Myservice service1=new Myservice();



例3:广播传值


然后在AndroidManifest中的<activity></activity>节点之后我们添加一下代码:

1
2
3
4
5
6
<receiver android:name="com.qlf.broadCast.broadCastReceiveByXml">
    <intent-filter>
        <action android:name="com.qlf.broadCastFlag">
        </action>
    </intent-filter>
</receiver>

receiver中的android:name就是我们在程序中的那个接收广播的类。下面的intent-filter和我们讲到的功能类似,而这个action就是上面的那个flag啦。


4contentprovider内容提供者——相当于库

0 0