考试知识点(Android闭卷考试)1.理解Android常见的几种布局。几种布局的高和宽,制定LinearLayout,线性布局,布局中的控件在线性方向上依次排列。默认控件水平方向排列。android:orientation=”horizontal”android:orientation=”vertical”注意:当是水平方向排列,控件宽度不能设置为android:layout_width=match_parent否则控件会把水平方向沾满,其他控件无法会控件覆盖(无法放置)当是垂直方向,内部控件不能将android:layout_height=match_parent指定为match_parentandroid:layout_weight=1,使用比例方式来指定控件的大小RelativeLayout,相对布局,是通过相对定位的方式让布局中控件可以出现在布局的任何位置。内部控件,三种属性,属性值是true或falseandroid:layout_centerHrizontal水平居中,属性值是”@id/*“android:layout_below在某元素的下方属性值是数值android:layout_marginLeft离某元素左边缘的距离FrameLayout,帧布局,简单,应用场景少,和碎片一起使用,没有定位方式,所有控件默认在布局的左上角,后面的会覆盖前面的。每一个组件都代表一个画面用该布局可以实现动画效果PercentFrame(Relative)Layout百分比布局:布局中可以不用wrap_content,match_parent等方式来指定控件的大小,直接指定控件所占的百分比,实现平分布局甚至任意比例分割布局。注意百分比布局需要添加库依赖support:percent:24..由于LinearLayout本身支持按比例指定控件大小,所以百分比布只为RelativeLayout和RelativeLayout功能扩展表格布局(Tablelayout)采用行列的形式管理UI组件,无需明确地声明它的行列数,而是通过添加TableRow、其他组件来控制表格的行数和列数GridLayout是Android4.0之后新增的布局管理器,因此正常情况下需要在Android4.0之后的版本中才能使用,如果希望在更早的版本中使用的话,需要导入相应的支撑库(v7包的gridlayout包)。GridLayout网格布局,和前面所讲的TableLayout(表格布局)有点类似,不过他有很多前者没有的东西,因此也更加好用:-可以自己设置布局中组件的排列方式-可以自定义网格布局有多少行、列-可以直接设置组件位于某行某列-可以设置组件横跨几行或者几列AbsoluteLayout它不提供任何布局控制,而是由开发人员自己通过X、Y坐标来控制组件的位置。运行Android应用的手机往往千差万别,屏幕大小、分别率、屏幕密度等都可能存在较大的差异,使用绝对布局的话很难做机型适配--已经被废弃2.理解Android应用程序开发过程中,常见的四种设计模式及各自的使用场合。ListView-Adapter、Builder-Dialog、Factory-选项卡、Listener-事件监听。1适配器模式:简介:将一个类的接口转换成客户希望的另外一个接口,从而使原本因接口不匹配而无法再一起工作的两个类能够在一起工作。不同的数据提供者使用一个适配器来向一个相同的客户提供服务。举例:ListView或GridView的Adapter。2建造者模式:简介:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的显示,但其根本还是不变。举例:AlertDialog.Builder.AlertDialog.Builder,使用该Builder来构建复杂的AlertDialog对象工厂模式:定义一个用于创建对象的接口,让子类决定将哪一个类实例化。外部不需要关心工厂是如何创建一个复杂产品的过程示例:BitmapFactory位图工厂,专门用来将指定的图片转换为指定的位图Bitmap。监听器模式事件源经过事件的封装传给监听器,当事件源触发事件后,监听器接收到事件对象可以回调事件的方法.Listener-事件监听观察者模式:定义对象间是一(Subject)对多(Observer)的依赖关系,当一个对象发生变化时,其它依赖该对象的对象都会收到通知,并随着变化。广播机制就是观察者模式ListView和BaseAdapter组合时,当BaseAdapter的item改变时,我们经常会调用notifyDataSetChanged(),通知Listview刷新3.Android中可支持网页的缩放的视图(View)及其功能在Android系统中,内置了一款高性能的浏览器,其内核就是WebKit,WebView网页视图,就是在这个基础上封装的一个控件,我们可以直接用这个控件在应用程序内去显示Web页面,直接用HTML文件做为布局文件,可以和JavaScript交互调用。显示和渲染web页面(1).直接显示网页设置在当前应用中打开网页,如果不设置的话会使用手机浏览器打开网页mWebView.setWebViewClient(newWebViewClient(){@OverridepublicbooleanshouldOverrideUrlLoading(WebViewview,WebResourceRequestrequest){view.loadUrl();returntrue;}});mWebView.loadUrl();(2)和js交互设置支持JavascriptWebSettingssettings=webView.getSettings();settings.setJavaScriptEnabled(true);(3)可以利用html做界面布局4.理解View和ViewGroup的用途及两者之间的关系。继承结构:View是ViewGroup的父类类。View是所有UI组件的基类,而ViewGroup是容纳这些组件的容器,其本身也是从View派生出来的.View中所有的子类成为widgets,viewgroup的子类成为layout。View和ViewGroup之间采用了组合设计模式,可以使得“部分-整体”同等对待。ViewGroup作为布局容器类的最上层,布局容器里面又可以有View和ViewGroup。对于setContentView(R.layout.layout的xml文件)方法,Activity其实不是显示视图(直观上感觉是它),实际上Activity调用了PhoneWindow的setContentView()方法,然后加载视图,将视图放到这个Window上,而Activity其实构造的时候初始化的是Window(PhoneWindow),Activity其实是个控制单元,即可视的人机交互界面。Activity是一个工人,它来控制Window;Window是一面显示屏,用来显示信息;View就是要显示在显示屏上的信息,这些View都是层层重叠在一起(通过infalte()和addView())放到Window显示屏上的。而LayoutInfalter就是用来生成View的一个工具,XML布局文件就是用来生成View的原料。(2).Activity、Window、View之间的关系:Activity是Window和View之间的桥梁,将View的内容信息显示在Window窗口上面。5.理解Android网络编程中,常见的数据传输格式。网络传输中最常见的有xml和json,还有protocolbuffers,gzip,ThriftXml通过Pull,SAX和Dom方式解析Json用JSONObject和GSON解析。ProtocolBuffers一种数据描述语言,类似于XML能够将结构化数据序列化——类似于XML,但更小,更快,更简单经常用到json、xml等格式的数据,这些数据在传输前可以进行压缩,这时候就会涉及到一种压缩格式—Gzip。Gzip的压缩比率非常大,有的甚至能达到70%以上,可以大大减少传输内容,提高用户的传输速度,进而提高用户的体验6.理解基本组件Activity的相关知识(如重载方法等)。Android应用有四大组件Activity、Service、BroadcastReceiver、ContentProviderContentProvider组件:用于Android应用之间实现实时的数据交换。常和ContentResolver一起使用BroadcastReceiver组件:广播消息接收器,类似于事件编程中的监听器,但是不同的是普通的事件监听器监听的事件源是程序中的对象,而BroadcastReceiver监听的事件源是Android应用程序中的其它组件。Service组件:通常位于后台运行,一般不需要与用户交互,所以没有图形界面。Service组件运行起来后会有独立的生命周期,它通常用于为其他组件提供后台服务或监控其他组件的运行状态(1)activity是一种可以包含用户界面的组件,主要用于和用户进行交互表现形式是一个屏幕,功能是显示界面,消息传递整个生命周期:onCreate()-onDestroy()可见的生命周期:onStart()-onStop()前台的生命周期:onResume()-onPause()运行,暂停(不在栈顶,但可见),停止(完全不可见,有可能因内存不够被回收),销毁(从栈中移除覆盖了activity生命周期的每一个环节onCreate():当activity是被创建时候,会自动运行该方法。该方法做一些初始化动作,比如加载布局,绑定时间等。onStart():活动在有不可见变为可见的时候调用。onResume():当activity开始与用户交互(获得焦点)时,会调用onResume,此是活动一定位于返回栈的栈顶,并处于运行状态。onPause():当系统准备启动或恢复另一个活动时调用。此时活动处于暂停状态(当一个活动不再处于栈顶的位置,但仍然可见,弹出一个对话框或者一个不能占满屏幕的活动都会导致前一个活动处于暂停状态)通常会在这个方法中释放掉一些占用cpu的资源onStop():当这个activity完全看不见的时候,会调用onStop方法。以下三种情况都会使这个activity调用onStop()方法,第一种是一个新的activity被执行,第二种是一个已经存在的activity被切换到最前端,第三种是这个activity要被销毁。onRestart():把activity从停止状态变为运行状态,活动被重新启用。onDestroy():当activity销毁前会调用该方法,之后变为销毁状态。理解何时需要在Activity中重写方法onActivityResult?当使用startActivityForResult()(在第一个活动中)方法启动另一个Activity时,需要在第一个活动中重写onActivityResult()方法,获得被启动Activity返回的结果。Intentintent=newIntent(this,secondeActivity.class);startActivityForResult(intent,int请求码);重写@OverrideprotectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){Stringresult=data.getExtras().getString(result);//得到新Activity关闭后返回的数据Log.i(TAG,result);}在第二个活动中:点击事件中//数据是使用Intent返回Intentintent=newIntent();//把返回数据存入Intentintent