热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

了解Android四大组件

了解Android四大组件Activity了解android最基本知道4个大人物,完整吃透这4个你就成功了一大半了.那么是哪4个呢?它们是Activity,Service,B

了解Android四大组件


Activity

了解android最基本知道4个"大人物",完整吃透这4个你就成功了一大半了.那么是哪4个呢?它们是Activity,Service,BroadCast Receiver,Content Proivder这些了.分别对应着界面(UI),服务,广播接收器,内容接收器,以上这些组件面试都是必问的.那么从Activity开始:

(1)什么是Activity?

  Activity原意思是活动,在android当中意思是就是一个界面,每一个界面都需要继承Activity,用SetContentView方法去加载布局文件,也可以设置主题如漂浮式,对话框式等,它的回调函数特别多.几乎每一个activity都要和用户交互.不交互就不是好的activity。

(2)生命周期

  组件都有自己周期,掌握生命周期也是必不可少的事情。不少公司就单独就问你生命周期怎么怎么样,

比如他首先问你哪几个生命周期:Create,Start,Pause,Restart,stop,resume,Destroy。接着会问一个activity到另一个activity生命周期的经过是怎么样的?此时你毫无犹豫问答:OnCreate OnStart-OnResume,被杀掉后是先Onpause,OnStop,OnDestroy,恢复了调用OnStart-OnResume

如果不信的话,请你不妨去做测试下。

(3)activity之间通信

Activity之间通信包括两种,一种是数据传递,第二种跳转到另一个activity,这两种需要另一个家伙-Intent本来意思目的不仅能启动Activity,还能启动服务,广播。跳转到另一个activity就是实例化Intent

对象,参数里放当前activity.this,目标activity.class。This和class顺序不能颠倒。传递数据是调用putExera方法参数是键,值,在前一个传递是int类型,接收也要int 类型,如getintent,String类型也是如此。否则报空指针异常。接收时用一个叫Bundle来接收那个值

(4)Activity 的 Intent Filter(Intent的过滤器)

Intent Filter 描述了一个组件愿意接收什么样的 Intent 对象,Android 将其抽象为 android.content.IntentFilter 类。在 Android 的 AndroidManifest.xml 配置文件中可以通过 节点为一个 Activity 指定其 Intent Filter,以便告诉系统该 Activity 可以响应什么类型的 Intent。 当使用 startActivity(intent) 来启动另外一个 Activity 时,如果直接指定 intent 对象的 Component 属性,那么 Activity Manager 将试图启动其 Component 属性指定的 Activity。否则 Android 将通过 Intent 的其它属性从安装在系统中的所有 Activity 中查找与之最匹配的一个启动,如果没有找到合适的 Activity,应用程序会得到一个系统抛出的异常。这个往往就是新建项目取消自动创建avtivity忘记了的原因。其实自动创建activity可以省去不必要的麻烦

 



 

Service

(一)大概叙述

Service意思地球人都知道,就是服务嘛。其实我认为服务比activity还要高级。服务是一直常驻在后台。你是看不到它的,因为它是不可见的。你非要看见它用别的代替吧。什么时候才用到它呢?其实有些操作太复杂了,可以交给服务去做,如播放音乐,后台下载。我们可以看到浏览器UC浏览器下载操作是交给服务,至于进度在通知栏显示,播放音乐也是一样。怎么播放,如开始播放,暂停,停止播放,上,下一首。这些操作扔后台最大好处在于,在Activity播放无意退出了音乐会停止。这对一边音乐一边在手机干其他事情来说就是不好的。所以,交给服务,就算秒了activity人家还是照样歌还是能放对吧。

(二)生命周期

Service也有生命的,最初创建的OnCreate,只调用一次。然后OnStart,android4.1时把OnStart方法给屏蔽了。只能StartCmmand方法以及OnDestroy,当我们第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法

Service与Activity通信:
Service后端的数据最终还是要呈现在前端Activity之上的,因为启动Service时,系统会重新开启一个新的进程,这就涉及到不同进程间通信的问题了(AIDL),当我们想获取启动的Service实例时,我们可以用到bindService和onBindService方法,它们分别执行了Service中IBinder()和onUnbind()方法。

Service 启动方式:
context.startService()
context.bindService();
使用Service之前必须在androidMainfest.xml 中注册



BroadCastReceiver

 

广播是一种广泛运用的在应用程序之间传输信息的机制。而 BroadcastReceiver 是对发送出来的广播进行过滤接收并响应的一类组件;来自普通应用程序,如一个应用程序通知其他应用程序某些数据已经下载完毕。BroadcastReceiver 自身并不实现图形用户界面,但是当它收到某个通知后, BroadcastReceiver 可以启动 Activity 作为响应,或者可以通过 NotificationMananger 提醒用户,或者启动 Service 等等。

2.生命周期:广播当中一个OnReceiver方法,生命周期10秒,超过10秒没有完成任务,就会弹出异常,但在10秒内没有执行完毕,就会弹出ANR异常。也就是说广播里无法对UI耗时操作。

 

3.声明广播:分动态和静态。前者在activity直接注册。后者是声明一个标记而已

4.广播其他:

(1) ,他决定该广播的级别,级别数值是在 -1000 到 1000 之间 , 值越大 , 优先级越高;
(2) ,同级别接收是先后是随机的;级别低的收到广播;
(3) ,在 android 系统中只要监听该广播的接收者,都能够收到 sendBroadcast(intent) 发出的广播 ;
(4) ,不能截断广播的继续传播,
(5) ,在这个方法发来的广播中,代码注册方式中,收到的广播的先后和注明优先级最高的他们的先后是随机。如果都没有优先级,代码注册收到为最先。

5.注销广播:既然有动态注册广播,那么当程序退出时,这个广播你要不要停止呢。如果不注销,系统仍然回报异常,会提示类似你是不是要注销掉广播?我是说大致意思.建议在 onPause()或者OStop 中注销;

 

ContentProivder

Content Provider 属于Android应用程序的组件之一,作为应用程序之间唯一的共享数据的途径,Content Provider 主要的功能就是存储并检索数据以及向其他应用程序提供访问数据的借口。我感觉它在通讯录或者查找系列用的比较广吧。重写方法包括增删改查。整一个加强版SQLite  。

Android 系统为一些常见的数据类型(如音乐、视频、图像、手机通信录联系人信息等)内置了一系列的 Content Provider, 这些都位于android.provider包下。持有特定的许可,可以在自己开发的应用程序中访问这些Content Provider。

   让自己的数据和其他应用程序共享有两种方式:创建自己的Content Provier(即继承自ContentProvider的子类)  或者是将自己的数据添加到已有的Content Provider中去,后者需要保证现有的Content Provider和自己的数据类型相同且具有该 Content Provider的写入权限。对于Content Provider,最重要的就是数据模型(data model) 和 URI。
   
   1.数据模型
    Content Provider 将其存储的数据以数据表的形式提供给访问者,在数据表中每一行为一条记录,每一列为具有特定类型和意义的数据。每一条数据记录都包括一个 "_ID" 数值字段,改字段唯一标识一条数据。

   2.URI
    URI,每一个Content Provider 都对外提供一个能够唯一标识自己数据集(data set)的公开URI, 如果一个Content Provider管理多个数据集,其将会为每个数据集分配一个独立的URI。所有的Content Provider 的URI 都以"content://" 开头,其中"content:"是用来标识数据是由Content Provider管理的 schema。

      在几乎所有的Content Provider 的操作中都会用到URI,因此一般来讲,如果是自己开发的Content Provider,最好将URI定义为常量,这样在简化开发的同时也提高了代码的可维护性。

      首先来介绍如何访问Content Provider中的数据,访问 Content Provider中的数据主要通过ContentResolver对象,ContentResolver类提供了成员方法可以用来对Content Provider 中的数据进行查询、插入、修改和删除等操作。 以查询为例,查询一个 Content Provider 需要掌握如下的信息。

 

转载来自:

http://www.apkbus.com/forum.php?mod=viewthread&tid=64009


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
author-avatar
f永远喜爱捉迷藏
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有