如何优化关键词提升相关度上海优化公司

当前位置: 首页 > news >正文

如何优化关键词提升相关度,上海优化公司,页面跳转代码,自建房设计图Android 四大组件详解 Android平台下四个核心组件分别是提供界面的Activity组件、提供后台计算的Service组件、提供广播接收的Broadcast Receiver组件、提供数据共享的Context Provider组件。不同组件具有不同的特性以及各自的声明周期#xff0c;下面就来对每个组件进行详细的…Android 四大组件详解 Android平台下四个核心组件分别是提供界面的Activity组件、提供后台计算的Service组件、提供广播接收的Broadcast Receiver组件、提供数据共享的Context Provider组件。不同组件具有不同的特性以及各自的声明周期下面就来对每个组件进行详细的分析。 1.Activity组件 1Activity组件概述 Activity是最常见的一种Android组件每个Activity都相当于一个屏幕其为用户提供了进行交互的可视界面。应用程序可以根据需要包含一个或多个Activity这些Activity一般都继承自android.app包下的Activity类并且这些Activity之间的运行是相互独立的。 2Activity组件生命周期的3个阶段。 1)运行态running state 此时Activity显示在屏幕前台并且具有焦点可以和用户的操作进行交互。 2)暂停态paused state 此时Activity失去焦点并被其它的运行态Activity取代在屏幕前台显示暂停态的Activity仍然保留其状态和成员等其它信息当系统的内存非常匮乏时暂停态的Activity会被结束掉以获得更多的资源。 3)停止态stopped state 停止态的Activity不仅没有焦点而且是完全不可见的虽然其也保留状态和成员等信息停止态的Activity会在系统需要的时候被结束。 3Activity组件要点 当Activity在不同的状态之间切换时可以通过重写相应的回调方法来编写状态改变时应该执行的动作。 Activity之间通过Intent进行通信。 android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明否则系统将不识别也不执行该Activity。 4Activity组件类图 5Activity的加载模式 Activity共有4中加载模式standard、singleTop、singleTask和singleInstance。 1standard加载模式 standard加载模式是Activity的默认加载模式在加载时会创建一个新的Activity的实例类似于调用startActivity方法时设置Intent的标志位Intent.FLAG_ACTIVITY_NEW_TASK。 2singleTop加载模式 singleTop加载模式表示当前Activity的实例处于前台并可视时该实例会收到发送过来的Intent消息。 3singleTask加载模式 singleTask加载模式表示当前Activity栈Task中当前Activity实例运行时该实例会收到相应的Intent消息接收方法类似于singleTop加载模式。 4singleInstance加载模式 singleInstance加载模式表示该Activity以单子模式加载在当前Activity栈中唯一接收方法类似于singleTop加载模式。 6Activity的属性配置 1配置变化属性 androidmcc属性表示MCC即SIM卡中存储的IMSI号中的国家代码部分当发生国际漫游时该属性配置会发生变化。 androidmnc属性表示MNC即SIM卡中存储的IMSI号中的网络代码部分当发生不用运营商网络间漫游时该配置会发生变化。 androidlocale属性表示当前显示的语言发生变化。 androidtouchscreen属性表示触摸屏发生了变化考虑当当前的实际情况只有在支持多屏显示时才需要使用该属性。 androidkeyboard属性表示键盘类型发生了变化如外接蓝牙键盘等。 androidkeyboardHidden属性表示显示或者隐藏键盘对翻盖、滑盖终端有效。 androidnavigation属性表示导航键发生了变化如从轨道变化为五向键考虑到当前的实际情况该配置显然不会发生变化。 androidorientation属性表示屏幕方向当前重力传感器几乎已经成为智能终端标配的情况下需对该配置多加注意。 androidscreenLayout属性表示屏幕布局发生变化。在不支持多屏显示的情况下该配置不会发生变化。 androidfontScale属性表示字体发生了变化。 androiduiMode属性表示UI模式发生了变化如变为车载模式、夜间模式等。 2屏幕旋转属性 androidscreenOrientation属性是Activity的一个重要属性在有重力传感器的情况下开发者必须考虑屏幕的适配情况。其属性值包括unspecified、landscape、portrait、user、behind、sensor和nosensor等。其中unspecified为默认值旋转策略有系统决定langscape表示横屏portrait表示竖屏user表示当前用户倾向的屏幕方向behind表示屏幕方向和Activity栈中当前Activity下面的Activity相同sensor表示根据重力传感器确定屏幕方向这是一个重要的属性值nosensor表示忽略传感器方向。 3主题属性 androidthene属性表示当前Activity的主题。这是一个非常重要的属性通常用于设置标题栏、状态栏等当然也可以设置开发者自定义的主题 该属性的设置方法 androidtheme”androidstyle/Theme.NoTitleBar“ 4启动约束属性 androidexported属性表示启动约束即是否允许被其他进程调用如果值为fase则该Activity仅可被同一应用中的组件或拥有相应用户ID的应用的组件调用如果值为true则允许被其他进程调用。 androidexported属性的默认值与携带的Intent过滤器有关如果没有携带任何Intent过滤器则其值为false否则为true。 2.Service组件 1Service组件概述 Service没有提供与用户进行交互的表示层。Service是运行在后台的一种Android组件当应用程序需要进行某种不需要前台显示的计算或数据处理时就可以启动一个Service来完成每个Service都继承自android.app包下的Service类。 Service一般由Activity或其他Context对象来启动当启动Service之后该Service将会在后台运行即使启动这个Service得Activity或其他组件的生命周期已经结束Service仍然会继续运行直到自己的生命周期结束为止。每个Service都应该在AndroidMainfest.xml中进行声明。 2Service组件的运行方式 服务的运行有两种方式即绑定服务和启动服务。 1通过startService方法启动 以启动服务的方式运行服务时服务并不会随着绑定组件的销毁而销毁而是服务会自我销毁这种方式适用于文件加载、文件上传等请求后自行运行的场景。 当系统调用startService方法时如果该Service还未启动则依次调用其onCreate方法和onStart方法来启动。当其他Context对象调用stopService方法、Service调用自称的stopSelf或stopService方法时才会停止Service的执行。 2通过bindService方法启动 当通过绑定服务的方式运行服务时一旦绑定解除服务即被销毁当进行多次绑定时只有所有的绑定均解除服务才会销毁。 当系统调用bindService方法时如果该Service未启动则会调用其onCreate方法完成初始化工作然后会将该Service和Context对象如Activity进行绑定当被绑定的Context对象被销毁时与之绑在一起的Service也会停止运行。 解除绑定时unbindService。 绑定服务时需要设置ServiceConection和标志位ServiceConnection可以监控服务的状态在进行服务绑定时其标志位可以为BIND_AUTO_CREATE、BIND_DEBUG_UNBING和BIND_NOT_FOREGROUND等。 BIND_AUTO_CREATE表示当接收到绑定请求时如果服务尚未创建则即刻创建在系统内存不足需要销毁优先级组件来释放内存且只有驻留该服务的进程成为被销毁对象时服务才可被销毁。 BIND_DEBUG_UNBIND通常用于调试场景中判断绑定的服务是否正确但其会引起内存泄露因此非调试目的的不建议使用。 BIND_NOT_FOREGROUND表示系统将阻止驻留该服务的进程具有前台优先级仅在后台运行该标志位在Froyo引入。 绑定服务时以异步的方式运行的。绑定服务必须在当前的上下文环境中进行在某些场景中如果无法绑定成功则可能需要在应用级的上下文环境中进行。 3Service组件要点 需要注意的是尽管存在两种方式启动Service但是无论Service是通过什么方式启动的都可以将其与Context对象进行绑定。 4Service组件类图 5服务生命周期流程图 3.Broadcast Receiver组件 1Broadcast Receiver组件概述 Broadcast Receiver也不提供与用户交互的表示层其是一种负责接收广播消息并对消息作出反应的组件。在Android的系统中就存在许多这样的广播比如电池电量过低或信号过低时系统就会发出广播进行通知。广播的发送本质上是基于Intent进行的。 应用程序如果需要响应某个广播消息应该注册对应的BroadcastReceiver对象该对象继承自BroadcastReceiver类该类位于Android.content包下。 2Broadcast Receiver组件广播方式 1BroadcastReceiver发布广播的方式 发布一个广播比较容易在需要的地方创建一个Intent对象将信息的内容和用于过滤的信息封装起来通过调用Context.sendBroadcast方法、Context.sendOrderedBroadcast方法或者Context.sendStickyBroadcast方法将该Intent对象广播出去发布广播方式的区别如下。 通常使用sendBroadcast或sendStickyBroadcast发送出去的Intent所有满足条件的BroadcastReceiver都会执行其onReceive方法。但若有多个满足条件的BroadcastReceiver,其执行onReceive方法的顺序是没有保证的。 而通过sendOederedBroadcast方法发送出去的Intent会根据BroadcastReceiver注册时IntentFilter设置的优先级的顺序来执行onReceive方法相同优先级的BroadcastReceiver执行onReceiver方法的顺序是没有保证的。 sendStickyBroadcast主要的不同是Intent在发送后会一直存在并且在以后调用registerReceiver注册相匹配的Receiver时会把这个Intent对象直接返回给新注册的Receiver。 2BroadcastReceiver接收广播的方式 发布的广播实体是Intent那么接收广播的时候就需要通过IntentFilter对象来进行过滤。BroadcastReceiver的生命周期比较简单只有一个回调方法–onReceive该方法在应用程序接收到发给自己广播时候调用所以BroadcastReceiver的使用方法也相对简单只需要对onReceive方法进行合理重写在适当的地方注册该Broadcast Receiver即可。 在AndroidMainfest.xml文件中声明。注册信息包含在receiver/receiver标签中并在intent-filter标签内设定过滤规则。 在代码中创建并设置IntentFilter对象。该IntentFilter对象包含了对广播的过滤规则然后再需要的地方调用Context.registerReceiver方法和Context.unregisterReceiver方法进行注册和取消注册如果采用这种方式注册当Context对象被销毁时该BroadcastReceiver也就不复存在了。 4.Context Provider组件 1Context Provider组件概述 Context Provider和其它的应用程序组件有很大的不用Context Provider主要用于不用的应用程序之间进行数据共享。在Android平台下每个应用程序都有独立的内存空间如果某个应用程序需要使用其它应用程序的数据就必须采用ContextProvider对象。 2Context Provider组件要点 每个ContextProvider都继承自Android.context包下的ContextProvider类其功能就是提供自己的数据给外部应用程序使用提供的数据可以存储为Android文件、SQLite数据库文件或其他合法的格式。 ContextProvider提供数据及访问数据的接口真正访问数据的是ContextResolver对象该对象可以与ContextProvider对象进行通信以达到共享数据的目的。  5.Intent组件 1Intent组件概述 Intent是Android用于进程内或进程间通信的机制其底层的通信以Binder机制实现在物理层上则以共享内存的方式来实现。 2Intent的应用场景 Intent主要用于两种场景广播和发起意图其属性有ComponentName、action、data、category、extras、flags等。在进行Intent的匹配时需要匹配Action、data、category等3个属性。 1ComponentName ComponentName为处理Intent消息的Android组件可以是Activity、服务等。通过调用setClassName方法设置。 2action action表示Intent的类型可以是查看、删除、发布或其他最常使用的就是android.intent.action.MAIN。android.intent.action.MAIN表示一个应用程序的入口通常和android.intent.category.LAUNCHER联合使用。 3data data表示Intent携带的数据通常和MIME类型联合使用。 4category category表示Intent的策略目前常用的几个Categoryandroid.intent.category.DEFAULT、android.intent.category.LAUNCHER、android.intent.category.MONKEY、android.intent.category.OPENABLE、android.intent.category.BROWSABLE。 对于隐式Intent如果创建Intent时没有指明category属性则系统会默认设置其属性为android.intent.category.DEFAULT这时如果在Intent过滤器中没有指明category属性为android.intent.category.DEFAULT则会造成匹配失败。 5Extras Extras表示Intent的附加信息它在组件间传递消息时非常有用。目前Extras可以支持多种数据类型如布尔型、整形、字符串等。 6Flags Flags表示Intent的标志位经常用于Activity的场景中。Flags和Activity的启动模式有密切的关系。 3特殊应用场景 作为整个系统的灵魂组件Intent功能之强大和使用范围之广下面介绍Intent应用的一些特殊场景如开启自启动、网络监视、获取内容、SD挂载等。 1开机自启动 接收开机自启动事件的Intent过滤器的设置方法如下。 receiver android:name.receiver.ImServiceAutoStarter  android:processandroid.process.im intent-filter action android:nameandroid.intent.action.BOOT_COMPLETED/ /intent-filter /receiver 2网络监听 在基于网络的应用已非常普及的今天监听网络的状态变化已是一种必备的功能其Intent过滤器的设置方法如下。 intent-filter action android:nameandroid.net.conn.CONNECTIVITY_CHANGE/ intent-filter 3获取内容 为了响应获取内容的事件必须在Intent过滤器中设置action属性为android.intent.action.GET_CONTENT设置category属性为android.intent.category.DEFAULT. 4返回桌面 为了返回桌面需要设置category属性为Intent.CATEGORY_HOME 4Intent的分类 从目的地ComponentName的明确性来划分Intent分显式Intent和隐式Intent。 所谓显式Intent即明确指明了目的地、不需要系统进行Intent匹配的Intent在应用程序内部进行组件调用时应首选显式Intent。 所谓隐式Intent即没有明确指定目的地、需要系统根据自己的信息进行匹配的Intent。这类Intent同样用于应用间的相互调用有助于降低应用间的耦合性。 PendingIntent仅是对Intent的一个封装它使开发者能够更方便地操作Activity、服务、广播等。 5PendingIntent的逻辑 PendingIntent和Intent略有不同其可设定执行次数主要用于远程服务通信、闹钟、通知、短信、启动器中国一般的应用很少采用。 1PendingIntent标志位 FLAG_ONE_SHOT表示返回的PendingIntent仅能执行一次执行完成后即自动取消。 FLAG_NO_CREATE表示如果描述的PendingIntent不存在并不创建相应的PendingIntent而是返回NULL。 FLAG_CANCEL_CURRENT表示如果相应的PendingIntent已经存在则取消前者然后创建新的PendingIntent者有利于保持数据为最新的可用于即时通讯的通知场景。 FLAG_UPDATE_CURRENT表示更新PengdingIntent。 6.应用框架解析 除了基本的组件外为了维护整个UI系统的良好运行在应用层Android还设计了诸多的框架来进行相关方面的管理。本机主要介绍Service框架、Activity管理机制、Broadcast机制、对话框框架、标题栏框架、状态栏框架、通知机制和ActionBar框架等。 1Service框架 作为执行应用后台运算和框架层运算的基本组件服务扮演着十分重要的角色。根据通信的方式和应用场景服务有不同的类型具体而言从通信的方式来看服务科分为两种类型即本地服务和远程服务其中远程服务根据通信的方式又可分为基本AIDL的服务和基于Message的服务两种。从应用的场景来看服务可以分为应用服务和系统服务等。 2Activity管理机制 Android的管理是通过Activity栈和Task来进行的。 1Activity栈 Android的管理主要是通过Activity栈来进行的。当一个Activity启动时系统根据其配置或调用的方式将Activity压入一个特定的栈中系统处于运行Running or Resumed状态。当按Back键或触发finish方法时Activity会从栈中被压出进而被销毁当有新的Activity压入栈时如果原Activity依然可见则原Activity的状态将转变为暂停Paused状态如果原Activity完全被遮挡那么其状态将转变为停止Stoped。 2Task 一个Task对应于一个Activity栈Task是根据用户体验组成的运行期逻辑单元Task中的Activity可以由不同的应用组成。 在实际的终端使用中在主界面长按Home键弹出的一个网格界面即时当前运行的Task而非应用。 android:allowTaskReparenting属性用来配置是否允许Activity从启动它的Task移动到该Activity设置的Task亲和性相同的Task中。 android:alwaysRetainTaskState属性用于配置是否保留Activity所在的Task状态默认为false。 android:clearTaskOnLaunch属性用于配置当Task从主界面重新启动时是否需要清除除根Activity外的所有Activity默认为false。 android:finishOnTaskLaunch属性用于配置当Task从主界面重新启动时特定的Activity是否需要被销毁默认为false。 android:taskAffinity属性用于配置启动Activity时运行在特定的Task中。只有在启动Activity的时候设置FLAG_ACTIVITY_NEW_TASK标志位才有效。 3Activity生命周期 onResume方法和很多初学者所认为的不同其除了在Activity恢复可见性时被调用外在构建Activity后也会被调用。另外应避免直接调用onDestroy销毁Activity争取销毁Activity的方式是调用finish方法。 3Broadcast机制 当特定时间发生时需要通知到相应的模块若受众不明确或较多则需要进行广播。广播涉及顺序广播、无序广播、广播接收器。 1顺序广播 当广播需要以类似消息链的方式进行时应采用顺序广播顺序广播的接收器可以抛弃或继续传递消息。 2无序广播 无序广播是异步的广播接收器除了接收广播外无法对无序广播的行为产生影响。 3广播接收器 为了接收广播开发者必须在AndroidMainfest.xml中配置广播接收器或通过Java实现广播接收器。 4对话框框架 目前提供了4中方式来创建对话框分别为AlertDialog、ProgressDialog、DataPickerDialog、TimePickerDialog。其中AlertDialog是最通用的对话框形式ProcessDialog用于描述进度信息而DataPickerDialog和TimePickerDialog则主要用于日期和时间场景中。 1AlertDialog对话框 AlertDialog是最常用的对话框由标题、图标、按钮和呈现具体信息的视图组成在默认情况下通常setMessage可以设置显示的文本信息通过setView可以加载开发自定义的视图。 如果希望创建一个对话框则需通过AlertDialog.Builder进行。在onCreateDialog中创建对话框通过showDialog显示对话框。通过dismissDialog隐藏对话框如果尚没有显示对话框调用dismissDialog会发生异常。 通过调用setCancelable可以使弹出不希望被用户取消的对话框适用于所有对话框。 由于Dialog管理机制的问题Dialog具备记忆能力在需要数据更新的场景中在onPrepareDialog方法进行数据更新。 由于无法在对话框中记忆对话框状态dismissDialog方法必须和showDialog成对出现若无showDialog与之配对则会发生异常。 2ProgressDialog对话框 ProgressDialog通常用于耗时的操作以免长时间无反应给用户造成一种系统假死的假象。 对于长时间运算的任务应将ProgressDialog放在主线程之外执行否则极易出现Android ANR消息。 ProgressDialog支持两种风格的进度显示一种是进度条一种是环形转动。这两种进度显示对应的风格分别为ProgressDialog.STYLE_HORIZONTAL和ProgessDialog.STYLE_SPINNER。默认的风格为ProgressDialog.STYLE_SPINNER。 3DatePickerDialog对话框 DatePickerDialog日期对话框时一个专用的对话框其创建方式非常简单在创建时通常需要设置初始年、月、日和监控日期变化的回调函数。 4TimePickerDialog对话框 TimePickerDialog时间对话框和DatePickerDialog相似TimePickerDialog在创建时需要设置初始时间和监控时间变化的回调函数。 5标题栏框架 Android中的标题栏具有传统标题栏更丰富的功能其除了可标识当前界面的主题外还支持进度显示允许用户隐藏、自定义标题栏。目前Android标题栏支持FEATURE_NO_TITLE、FEATURE_PROGRESS、FEATRUE_CUSTOM_TITLE等多种定制。 1隐藏标题栏 通过配置AndroidManifest.xml隐藏标题栏的方法activityandroid:name-LunarLander  android:themeandroid:style/Theme.NoTitleBar 通过代码实现隐藏标题栏的方法requestWindowFeatrueandroid.view.window.FEATURE_NO_TITLE。 2自定义标题栏 Android提供了自定义标题栏的方法标题栏的FEATURE_CUSTOM_TITLE不能和FEATURE_LEFT_ICON、FEATURE_NO_TITLE等同时使用。 设置标题栏的方法requestWindowFeaturewindow.FEATURE_CUSTOM_TITLEgetWindow().setFeatureInt(window.FEATURE_CUSTOM_TITLE,R.layout.custom_title_1); 3进度显示 支持两种明确进度显示一种是主进度一种是辅进度辅进度在本地应用中较少使用。在网络环境中如在进行流媒体播放时可以用主进度表示播放进度用辅进度标识下载进度。 4图标显示 Android的标题栏实际上由标题、进度条、左图标和右图标构成。 6状态栏框架 和传统终端的状态栏一样Android状态栏同样提供了电量信息、蜂窝信息、SMS、MMS、邮件、WIFI信号、蓝牙信号、闹钟等状态信息。另外状态栏还提供了应用安装、数据下载等职能终端特有的状态信息。除此之外状态栏还承担着通知栏的功能使用户能以最少的操作查看收到的信息。 在状态栏中起主要作用的时StatusBarPolicy它承担着接收系统发来的Intent消息、更新状态显示的功能它是服务StatusBarMangerService的客户端。 整个状态栏框架是通过StatusBarService来实现的在StatusBarService初始化时初始化了一个用于显示statusbar的StatusBarView。在StatusBarView中定义了状态栏的实现布局而具体的布局文件时在framewoeks\base\packages\systemui\res\layout\status_bar.xml中实现的。 1状态栏的隐藏 通过AndroidMainfest.xml设置全屏的方法 activity android:nameGActivity android:themandroid:style/Theme.Black.NoTitleBar.Fullscreen /activity 通过Java设置全屏的方法 getWindow().setFlags(WindowManger.LayoutParams.FLAG_FULLSCREENWindowManger.LayoutParames.FLAG_FUIISCREEN) requestWindowFeature(Window.FEATURE_NO_TITLE);        //隐藏标题栏 通过Java实现动态隐藏和显示状态栏 getWindow().addFlag(WindowManger.LayoutParame.FLAG_FULLSCREEN);   //隐藏 getWindow().clearFlags(WindowManager,LayoutParame.FALG_FULLSCREEN);        //显示 2电量信息 当StatusBarPolicy收到Action为ACTION_BATTERY_CHANGED的Intent时StatusBarPolicy会通知StatusBarManger进行电量图标的更新。 StatusBarPolicy还能相应Action为ACTION_BATTERY_LOW、ACTION_BATTERY_OKAY、ACTION_POWER_CONNECTED的Intent。 3蜂窝信息 对蜂窝协议的支持十分充分目前内置的支持包括GSM、UMTS、CDMA、4G等。 4WIFI信号 对于WIFI信号可以相应Action为WifiManger.NETWORK_STATE_CHANGED_ACTION、WifiManger.WIFI_STATE_CHANGED_ACTION、WifiManger.RSSI_CHANGED_ACTION的Intent。 5蓝牙信号 对于蓝牙信号Android目前可以相应BluetoothAdapter、BluetoothHeadset、BluetoothA2dp和BluetoothPbap的状态变化。 6闹钟 当StatusBarPolicy收到Action为ACTION_ALERM_CHANGED的Intent时StatusBarPolicy会通知StatusBarManager进行闹钟图标的更新。 7通知机制 Android提供了多种方式来向用户反馈状态信息主要包括Toast提醒、通知栏提醒、对话框提醒等其中Toast提醒通常用于页面的提示通知栏提醒通常用于交互事件的通知一般非常重要的提醒都已对话框的形式给出。 对于需要用户相应的事件可以通过对话框的方式通知用户给予必要的反馈。 Toast和Notification均由框架层的NotificationManagerService维护。 1Toast Toast通常不用于交互可以被创建于Activity和Service中在默认情况下Toast仅支持文本提示。 Toast提醒的显示时间较短。目前系统支持两种显示时间LENGTH_SHORT和LENGTH_LONG。其中LNEGTH_SHORT表示显示时间为2sLENGTH_LONG表示显示时间为3.5s。 在默认情况下Toast显示在屏幕的正下方水平居中。对于特殊场景Toast允许自定义显示的位置。 如果简单的文本信息无法满足开发者的需要还可以利用Toast支持的自定义视图。 Toast不能再AsyncTask的doInBackground方法中运行如果希望实现类似的效果可以在Handler中进行处理。 2Notifcation Notifcation更适合于交互事件的通知常用于短消息、即时消息、下载、外围设备的状态变化等场景中。 Notifcation支持文字显示、振动、三色灯、振铃音等多种提示形式在默认情况下Notifcation仅显示消息标题、消息内容、时间等3项内容。 1Notification管理 Android通过表示符来管理Notification发起一个Notification的方法notificationManager.notify(notifictionId, mNotification); 取消Notification的方法很多如果希望用户单击后Notification即被清除则相应方法 notification.flags | FALG_AUTO_CANCEL 如果希望手动清除某项Notification相应方法mNotificationMgr.cancel(LOW_MEMORY_MOTIFICATION_ID); 如果希望清除所有Notification时相应方法mNotification.cancelAll(); 2振动提醒 Android通过Notification还提供了振动提醒通常用于比较紧迫的场景。 振动方式为延迟0ms然后振动700ms在延迟500ms接着振动1000ms。相应方法Notification nnew Notification();        n.vibratenew long[]{0, 700, 500, 1000};        mNM.notify(1, n); 如果设置为默认振动方法相应方法 notification.defaults | Notification.DEFAULT_VIBRATE。 3三色灯提醒 Android支持三色灯提醒开发者可以根据不同的场景选择点亮不同颜色的灯。需要注意的是只要设置Notification的标志位为FLAG_SHOW_LIGHTS才能支持三色灯提醒。 创建三色灯提醒的NotificationNotification nnew Notification();        n.flags | Notification.FLAG_SHOW_LIGHTS;        n.ledAREGB0xff0000ff;        n.ledOnMS 300;        n.ledOffMS 300;        mNM.notify(1,n); 如果希望设置默认三色灯提醒相应方法notification.defaults | Notification.DEFAULT_LIGHTS; 4振铃音提醒 Notification支持默认振铃音、自定义振铃音、Android多媒体数据库等多种提醒方法。 默认振铃音notification.default | Notification.DEFAULT_SOUND; 自定义振铃音notification.soundUri.parse(file:///sdcard/notification/ringer.mps); 基于Android多媒体数据库提醒方式notification.soundUri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, 6); 5)提醒标志位 FLAG_SHOW_LIGHTS                         //三色灯提醒 FLAG_ONGOING_EVENT                   //发起事件 FLAG_INSISTENT                                //振铃音将持续到Notification取消或Notification窗口打开 FLAG_ONLY_ALERT_ONCE              //发起Notification后振铃音或振动均执行一次 FLAG_AUTO_CANCEL                       //用户单击后自动消失 FLAG_NO_CLEAT                               //只有全部清除时Notification才会清除 FLAG_FOREGROUND_SERVICE      //表示正运行的服务 8搜索框架 通过框架层提供的搜索管理器Search ManagerAndroid管理者搜索对话框并为用户传递搜索关键字。 实现搜索需要完成以下步骤实现搜索配置文件实现显示搜索结果的Activity实现执行搜索的算法发起搜索。 9ActionBar框架 ActionBar取代了状态栏和标题栏的位置可以帮组开发者尽可能地利用空间。通过ActionBar还可以设置自定义的视图即ActionView其本质上是菜单的一种实现。 在ActionBar中应用图标对单击事件的相应是通过onOptionsItemSelected方法进行的其对应的ID为android.R.id.home。ActionBar通常需要和Fragment交互。 1隐藏Actionbar 通过Androidmanifest.xml设置Activity的theme属性可以隐藏ActionBar方法如下 activity android:themeandroid:style/Theme.Holo.NoActionBar 当需要动态的隐藏ActionBar时只能通过Java代码的方式实现方法如下 ActionBar actionBargetActionBar(); actionBar.hide(); 重新显示ActionBar的方法 actionBar.show(); 2Action项管理 Action项本质上是一种特殊的菜单项由图标和文字两部分组成考虑到用户体验在实际开发中不建议设置超过2个的Action项。Action项有4种属性可以配置。 SHOW_AS_ACTION_ALWAYS                //总是作为Action项显示 SHOW_AS_ACTION_IF_ROOM               //空间足够时显示 SHOW_AS_ACTION_NEVER                   //永远不作为Action项显示 SHOW_AS_ACTION_WITH_TEXT           //显示Action项的文字部分 3ActionView ActionView即所谓的在ActionBar上出现的Widget用于实现一些快捷的操作并充分利用ActionBar的空间。ActionView的实现由两种方式加载布局文件和加载视图类。无论是加载布局文件还是加载视图类均可通过配置文件实现。 4添加Tab页 ActionBar可以显示Tab页在Activity中进行Fragment间切换。每个Tab可以包含的元素有标题和图标类似于TabWidget。向ActionBar中添加Tab页的步骤为 创建ActionBar.TabListenter,并实现其方法。 设置ActionBar的导航模式为NAVIGATION_MODE_TABS. 创建Tab页。 添加Tab页。  在导航模式下Tab页的实现和TabActivity的实现有很大的区别虽然两者切换Tab均是基于FrameLayout实现的但前者需要开发者做更多的工作。 5下拉菜单 基于ActionBar还能实现下拉菜单的功能。下拉菜单主要是基于SpinnerAdapter来处理数据的。实现下拉菜单的步骤如下 设置导航模式。 实现并加载资源文件。 创建并设置OnNavigationListion。 7.Activity类控件 1ListActivity控件 1ListActivity控件概述 ListActivity可以用来实现列表功能。在android中ListActivity提供了对基本的单行、双行列表的封装同时支持自定义列表。自定义列表主要是基于ListView来实现的为了方便起见在此一并介绍。 2ListActivity控件实现步骤 实现一个列表包括3步选择或自定义列表项布局文件、实现适配器并加载数据、为ListActivity设置适配器。 3ListView布局文件 ListView  android:idid/android:list /   TextView  android:idid/android:empty  android:textno data / 当ListView没有数据显示时TextView显示出来同时ListView会被影藏只有在ListActivity中才有此效果在Activity中必须自行设置。 基于单行布局的simple_list_item_1布局文件、基于简单双行布局的simple_list_item_2布局文件、基于单行单选布局的simple_list_item_single_choice布局文件、基于单行多选布局的simple_list_item_multiple_choice布局文件、类似树状图的simple_expandable_list_item_1/simple_expandable_list_item_2布局文件等。 2PreferenceActivity控件 1PreferenceActivity控件概述 PreferenceActivity主要用于实现偏好设置在布局上PreferenceActivity以PreferenceCreen为根布局支持CheckBoxPreference等多种形式的偏好设置这些偏好值默认存储于应用的SharePreference中通过getSharedPreference可以获取SharedPreferences对象通过Preference.OnPreferenceChangeListener监听器可以监听到偏好值得变化。 2CheckBoxPreference控件 提供了进行二选一偏好的方法还支持偏好的说明。 3DialogPreference控件 DialgPreference仅作为一个借口存在如果借助DialogPreference实现更加复杂的偏好必须继承DialogPreference。 4EditTextPreference控件 提供支持输入框的偏好设置的功能通过getEditText方法可以获得输入框的内容通过getText方法可以获得SharedPreference中存储的偏好值通过setText方法可以将偏好值保存在SharedPreferences中。 5ListPreference控件 当某个偏好有多个偏好值可选时ListPreference就派上用场了在使用ListPreference是需要注意entries和entryValue属性其中entries表示界面的内容而entryValue对应的是实际偏好值。 6RingtonePreference控件 用于设置铃声的特殊偏好控件目前Android提供的铃声类型包括ringtong、notification、alarm和all等。其中all表示所有可用的铃声。 7PreferenceCategory控件 提供了偏好组的功能。 3TabActivity控件 1TabActivity控件概述 能够让用户在单一界面实现更多的功能简化用户的操作。 TabActivity的根布局控件为TabHost他由TabWidget和通常基于FrameLayout的内容显示区域组成。 8.适配器 1适配器类型 目前Android支持两种类型的适配器基本适配器BaseAdapter和游标适配器CursorAdapter。基本适配器是最通用的适配器游标适配器是用来适配数据库的数据流的其他的系统级适配器都是继承自这两种适配器。 2BaseAdapter适配器 BaseAdapter适配器是基本的适配器是其他适配器的基类。实际开发中会调用BaseAdapter的子类或通过BaseAdapter自定义适配器来实现视图与数据的适配功能。 3ArrayAdapter适配器 在默认情况下ArrayAdapter假定整个布局文件为一个TextView,只有指定了mFiledId,ArrayAdapter才认为加载了一个自定义布局。ArrayAdapter的实现有很强的局限性仅能显示单行的列表。 4SimpleCursorAdapter适配器 在SimpleCursorAdapter的初始化和setViewBinder的实现过程中指定了布局文件、游标、数据项、控件ID等但是没有处理布局加载和数据绑定在bindView的实现中处理了布局加载和数据绑定。 从bindView的实现中可以看出ViewBinder实际上是用户的一个自定义实现接口当用户没有进行自定义实现时会通过传递的控件数量进行默认数据绑定。 支持图片加载不过这时通过游标获取的不再是文本数据而是图片的URL。 在进行普通数据库数据加载时比较复杂的场景也可以利用SimpleCursorAdapter而非自定义适配器来实现。当默认数据绑定无法满足需求时可以使用ViewBinder。 5适配器处理流程 在BaseAdapter适配器中应用了设计模式的观察者模式Observer Pattern当数据源发生变化时可以通知显示控件自行刷新。 通过分析AdapterDataSetObserver是AdapterView的一个私有类在开发者为ListView设置适配器时ListView会通过适配器注册观察器当开发者调用适配器的notifyDataSetChanged方法时ListView会收到数据源变化的通知进行自行刷新。 在数据库适配器中数据发生变化时应重新获取游标Cursor然后在调用notifyDataSetChanged方法进行数据刷新。 6自定义适配器 1基于BaseAdapter的自定义适配器 对于基于BaseAdapter的自定义适配器需要重点关注getView方法的实现getView方法完成的主要工作是列表项布局文件的加载和数据的绑定。需要注意的是只有convertView为空时加载布局文件这样可以避免无谓的性能损耗这是优化ListView显示的一个重要方法。 2基于CursorAdapter的自定义适配器 基于CursorAdapter的自定义适配器的实现重点在于bingView方法和newView方法。其中bingView方法用于绑定数据newView方法用于加载布局文件。 考虑到加载列表项时多次操作findViewById方法对性能有所影响因此在Android中设计ViewHolder以其来进行优化。通过View的setTag方法和getTag方法可大幅度提高显示速率这样是优化ListView显示的一种重要方法。 9.Service类组件 1InputMethodService 提供输入法的标准实现普通开发者不必关心这一点。一种输入法的界面由3部分组成即软输入视图Soft Input View、候选视图Candidates View和全屏模式Fullscreen Mode。 2IntentService IntentService作为Service的子类主要用于处理异步请求防止服务阻塞。所有的请求将在一个工作线程HandleThread中处理工作结束后xianc也结束。 3MediaScannerService MediaScannerService主要在设备启动和SD卡挂载时执行多媒体文件的扫描工作。出于性能方面的考虑Android区分SD卡和手机存储空间。 对于SD卡会在收到Action为ACTION_MEDIA_MOUNTED的Intent即SD卡挂载时进行扫描。 对于手机存储空间会在收到Action为ACTION_BOOT_COMPLETED的Intent即设备启动完毕时进行烧苗。另外在下载文件时也可能启动媒体扫描服务。 4RecognitionService RecognitionService是一个抽象服务仅在开发者希望实现一个新的语音识别器时才可能用到。