什么是android四大组建

来源:互联网 发布:seo转行 编辑:程序博客网 时间:2024/05/17 06:58
>> Activity
  Activity是一个应用程序的可视组件,提供一个屏幕,用户可以用来交互为了完成某项任务 ,一个程序可以有多个activity,一个activity可以启动另一个activity ,当然这些activity保存在系统在一个栈上 。
讲到这里就要讲到Activity启动方式有四种,分别是:
            standard  默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。
            singleTop  栈顶模式 可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。
            singleTask  单例模式只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
            singleInstance  只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。

        Activity的生命周期
            onCreate()  创建
            onStart()    启动
            onResume()  可见
            onPause()   可见不可操作(暂停)
            onStop()    不可见(后台)
            onDestory() 销毁
            onRestart() 从后台回来时会被调用
            以上是常用的
            onWindowFocusChanged()  程序启动时想要获取视特定视图组件的尺寸大小可以在此调用,原因:onCreate()中Window对象还没创建完成 推荐文章http://blog.csdn.net/liuhe688/article/details/6657776
            onSaveInstanceState()   在Activity被覆盖或退居后台之后,系统资源不足将其杀死,此方法会被调用 /// 在用户改变屏幕方向时 /// 当前Activity跳转到其他Activity或者按Home键回到主屏,自身退居后台时,此方法会被调用

        我们还要讲讲两个Activity之间如何传递参数,我们使用Intent的Bundle协带参数,就是我们常用的Intent.putExtra方法。这些只能传递int,string,long等常量,如果我们想要传递对象,需要用Bundle作为载体,但是要传递的对象要继承Parcelable或Serializable
        如何传递自定义的对象呢?(考察对方会不会用Parcelable,先看一下这Parcelable和Serializable的)

>>Service
Service是一个专门在后台处理长时间任务的Android组件,它没有UI。Service的onCreate是在主线程(ActivityThread)中调用的,耗时操作会阻塞UI,会导致程序崩溃,一般会运行在子线程中,但是有个例外,IntentServie,这个Service只启动一次,而且执行的onHandlerIntent方法是在一个独立的线程中执行,执行完毕后,这个Service就会被销毁            
Service 它有两种启动方式,startService和bindService。
startService只是启动Service,启动它的组件(如Activity)和Service并没有关联,只有当Service调用stopSelf或者其他组件调用stopService服务才会终止。 bindService方法启动Service,其他组件可以通过回调获取Service的代理对象和Service交互,而这两方也进行了绑定,当启动方销毁时,Service也会自动进行unBind操作,当发现所有绑定都进行了unBind时才会销毁Service。


>> Broadcast Receiver
Android广播机制分为两个方面:广播发送者和广播接收者
自定义广播接收器:
        需要继承基类BroadcastReceivre,并实现抽象方法onReceive(context, intent)方法   
        广播接收器接收到相应广播后,会自动回到onReceive(..)方法
        注意,广播也是运行在UI线程中的,所以不能做耗时操作
        onReceive方法中都会涉及到与其他组件之间的交互,如发送Notification、启动service等。比较常用
        BroadcastReceiver总体上可以分为两种注册类型:静态注册和动态注册。
1).静态注册:
        直接在AndroidManifest.xml文件中进行注册
2).动态注册时,无须在AndroidManifest中注册<receiver/>组件。直接在代码中通过调用Context的registerReceiver函数,可以在程序中动态注册BroadcastReceiver.
使用场景:
        1.同一app内部的同一组件内的消息通信(单个或多个线程之间);
        2.同一app内部的不同组件之间的消息通信(单个进程);
        3.同一app具有多个进程的不同组件之间的消息通信;
        4.不同app之间的组件之间消息通信;
        5.Android系统在特定情况下与App之间的消息通信。

>> Content Provider
ContentProvider(内容提供者)
主要用于对外共享数据,也就是通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对指定应用中的数据进行操作。ContentProvider分为系统的和自定义的,系统的也就是例如联系人,图片等数据。

一个应用实现ContentProvider来提供内容给别的应用来操作,

一个应用通过ContentResolver来操作别的应用数据,当然在自己的应用中也可以。

file, sqlite3, Preferences, 三种数据操作方式都只是针对本应用内数据
ContectResolver与ContentProvider 来操作别的应用程序的数据。

最后
4大基本组件都需要注册才能使用,每个Activity、service、Content Provider都需要在AndroidManifest文件中进行配置。AndroidManifest文件中未进行声明的activity、服务以及内容提供者将不为系统所见,从而也就不可用。而broadcast receiver广播接收者的注册分静态注册(在AndroidManifest文件中进行配置)和通过代码动态创建并以调用Context.registerReceiver()的方式注册至系统。需要注意的是在AndroidManifest文件中进行配置的广播接收者会随系统的启动而一直处于活跃状态,只要接收到感兴趣的广播就会触发(即使程序未运行)。
0 0
原创粉丝点击