您的位置:首页 > 移动开发 > Android开发

对Android四大组件的认识

2016-05-04 09:52 344 查看
    面试中经常会被问到对Android四大组件的认识,下面是我自己做的简单总结。

    Android的四大组件分别为Activity、Service、ContentProvider、BroadCastReceiver。四大组件在使用时都需要在主配置文件中注册。

    (1)Activity,活动,页面。在应用程序中,一个Activity通常就是一个单独的屏幕,可以显示一些控件,也可以监听并处理用户的事件。常用的方法有onCreate()、onStart()、onResume()、onPause()、onStop()、onDestroy()。当onResume()执行之后,Activity获得焦点,可以与用户进行交互。页面之间的跳转,假如从页面A跳转到页面B,页面A先失去焦点,执行onPause()方法,页面B依次执行onCreate()、onStart()、onResume()方法,然后A在调用onStop()方法,此时页面A不一定销毁,只有内存不够,不能维持前台进程的时候才会销毁,在页面销毁之前,我们可以主动调用onSaveInstanceState()方法,保存数据,在onCreate()中回传的Bundle对象可以读取曾经使用的一些信息,具体的过程如下:onSaveInstanceState()、onPause()、onStop()、onDestory()、onCreate()、onStart()、onRestoreInstanceState()、onResume()。从页面B再跳转到页面A,具体走哪个生命周期就和Activity的启动模式有关了。

    Activity默认的启动模式为Standard,每次都会执行onCreate()方法;SingleTop,当被调用的Activity位于栈顶时,不调用onCreate()方法,否则依然调用onCreate()方法,此种模式使用于刷新页面;SingleTask,onCreate()方法只执行一次,如果被调用的Activity不是位于栈顶,那么所有阻挡它的Activity都出栈,调用onDestroy()方法;SingleInstance,类似于共享,在一个单独的任务栈中,onCreate()方法只执行一次。Activity之间通过Intent进行通信。Activity主要是用来显示内容并与用户进行交互的,如果主线程做耗时操作,就会出现ANR,所以主线程不做耗时操作,耗时操作由异步任务或子线程加Handler来做,有时可能会开启多条子线程,那么就需要用服务来管理子线程。说到服务,它也是Android的四大组件之一。

    (2)Service,服务,没有界面,不能与用户进行交互。service运行在当前进程的主线程中,如果service打算做一些耗时操作,需要开启一个子线程来执行耗时操作。

服务有三种启动方式,第一种是开启服务,调用startService()方法,服务依次执行onCreate()、onStartCommand(),销毁服务的时候调用stopService()方法,服务执行onDestroy()方法;第二种是绑定服务,调用bindService()方法,服务依次执行onCreate()、onBind(),销毁服务的时候调用unbindService(),服务依次执行onUnbind()、onDestroy()方法;第三种是混合式启动服务,调用startService()、bindService()方法,服务会依次执行onCreate()、onStartCommand()、bindService(),解绑服务的时候,服务只会执行onUnbind(),停止服务stopService()时,服务执行onDestroy()方法。

一个Service不是一个单独的进程,服务本身并不表示它运行在单独的进程之中,它运行在当前进程之中,相当于是这个进程中的一部分。一个Service也不是一个线程,它运行在主线程中,所以如果在服务中做耗时操作,应该开启一个子线程,否则就会出现ANR。如果应用程序想在后台做一些操作,不需要与Activity进行交互,那么就用startServicestopService()来启动一个服务,对用的关闭服务的方法为stopService();如果Activity需要与服务进行交互,使用绑定服务的方法,bindService(),对应的停止方法就是unbindService()。

    (3)ContentProvider,内容提供者,主要用于对外共享数据,就是通过内容提供者把应用中的数据共享给其他应用访问,其他应用可以通过内容提供者对指定应用中的数据进行操作,共享的数据可以存储在文件系统中或SQLite数据库中。

    内容提供者继承于ContentProvider基类,为其他应用程序取用和存储数据提供了一套标准方法,但是应用程序并不直接调用这些方法,而是使用ContentResolver对象,调用它的方法。ContentResolver可以与任意ContentProvider进行会话。使用ContentProvider的优点是:一个程序可以通过ContentProvider将自己的数据暴露出去,外界看不到,也不用看到这个应用暴露的数据在应用中使如何存储的,或者用数据库或者用文件存储,外界可以通过统一的接口---provider提供给外界的URI对数据进行增删查改。

    (4)BroadCastReceiver,广播接收者。应用程序可以有任意数量的广播接收者,用来对所有它感兴趣的通知信息予以响应。BroadCastReceiver没有用户界面,但是它可以启动一个Activity或Service来响应它收到的广播,或者用NotificationManager来通知用户。

    
    有不全面的地方欢迎大家补充!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 四大组件