Android复习纲要
更新时间:2024-06-05 06:02:01 阅读量: 综合文库 文档下载
第一章 Android入门基础
1、教学要求
? 了解通信技术,包括1G、2G、3G、4G技术。
? 掌握开发环境的搭建,学会Android Studio搭建开发环境。 ? 掌握Android程序的开发,并能够手动开发HelloWorld程序。
2、通信技术
? 第一代通信技术(1G):是指最初的模拟信号、仅限语音的蜂窝电话标准。类似于简单
的无线电台,通话锁定在固定频率上,不安全。 ? 第二代通信技术(2G):是指第2代移动通信技术,代表为GSM,以数字语音传输技术
为核心。具有接收数据的功能,信号和通话质量好,技术实现简单等特点。 ? 第三代通信技术(3G):是指将无线通信与国际互联网等多媒体通信结合的新一代移动
通信系统。声音和数据的传输速度有了较大的提升。 ? 第四代通信技术(4G):又称IMT-Advanced技术,它包括了TD-LTE 和 FDD-LTE。速度
非常快,可传输高质量视频和图像。IMT--International Mobile Telecommunications Advanced(高级国际移动通信)
3、什么是Android操作系统
Android操作系统最初是由安迪·罗宾(Andy Rubin)开发出的,2005年被Google收购,并于2007年11月5日正式向外界展示了这款系统。Android是一款符合环保概念的移动操作系统,轻薄短小,功能强大。是第一个真正为手机打造的开放性系统。
2008年9月发布Android第1个版本Android1.1。Android系统一经推出,版本升级非常快,几乎每隔半年就有一个新的版本发布。
4、Android操作系统的体系结构
6、Android的虚拟机
Dalvik是Google公司自己设计用于Android平台的虚拟机,它可以简单的完成进程隔离和线程管理,并且可以提高内存的使用效率。
Java虚拟机与Android虚拟机的区别
Java虚拟机是基于栈的架构,在连续内存空间上,读取和存入不方便。
Dalvik虚拟机是基于寄存器的架构,缓存在CPU上,存取速度要快的多。它可以简单的完成进程隔离和线程管理,并且可以提高内存的使用效率。
说明:Android的Dalvik虚拟机默认给每一个应用程序分配16MB的内存,如果Android加载的资源超过这个内存,会抛出OutofMemoryError异常。
6、Android的开发平台
(1)Android studio
(2)DDMS全称Dalvik Debug Monitor Service,它是Android开发环境中Dalvik虚拟机调试监控服务。DDMS作为IDE、emultor、真机之间的桥梁,将捕捉到终端的ID通过ADB建立调试桥,从而实现发送指令到测试终端的目的。
(3)Android工程的目录结构 (4)Android程序打包过程
7、Android的程序结构
第二章 Android UI开发
1、教学要求
? ? ? ? ?
掌握相对布局、线性布局、帧布局的使用。 了解表格布局、网格布局、绝对布局的使用。 学会使用样式和主题,创建不同风格的布局。 学会使用单元测试Junit测试程序。 学会使用LogCat快速定位日志信息。
2、UI概述
? 在Android应用中,UI(User Interface)界面是人与手机之间数据传递、交互信息的重
要媒介和对话接口。Android程序开发最重要的一个环节就是界面处理,界面的美观度直接影响用户的第一印象,因此,开发一个整齐、美观的界面是至关重要的。
? Android应用的界面是由View和ViewGroup对象构建而成的。View类是Android系统
平台上用户界面表示的基本单元,View的一些子类被统称为Widgets(工具),它们提供了诸如文本输入框和按钮之类的UI对象的完整实现。
? ViewGroup是View的一个扩展,它可以容纳多个View,通过ViewGroup类可以创建有
联系的子View组成的复合控件。
ViewGroupViewGroupViewViewViewViewView
3、Android界面的布局
? 在Android应用程序中,界面是通过布局文件设定的。
? 布局文件采用XML格式,每个应用程序默认包含一个主界面布局文件,该文件位于项
目的“res/layout”目录中。
? 通过android:layout_width和android:layout_height属性来指定Layout和空间的宽和高。
? match_parent:表示强制扩展视图以显示全部内容,从而填充布局单元尽可能多的空
间。
? wrap_content:表示强制性地扩展视图以显示全部内容,以wrap_content为例,设
置该属性将完整显示其内部文本。相当于AutoSize,控件会随着内容增大或缩小。 ? orientation ? gravity ? layout_gravity ? padding
? app的默认布局文件会在MainActivity中的OnCreate()方法中,通过代码setContentView()
将Activity加载到View对象中。当运行程序时,才能在界面上看到编写好的布局。 ? setContentView()的参数为R.layout.布局资源名称。
? 布局文件的添加,主要在Layout文件夹上点右键,以此选择New->Android XML File,在
弹出的窗口中选择相应的布局,并填写文件名称即可。
4、Android中的布局的种类
LinearLayout
线性布局有两种方式指定控件位置,一种是水平方向,一种是竖直方向。设置线性布局为水平或垂直显示需要设置的属性。 RelativeLayout
像素单位(px,pt,dp,sp) TableLayout
表格布局就是让控件以表格的形式来排列组件的,只要将组件或信息放在单元格中,控件就可以整齐的排列。 在TableLayout中,行数由TableRow对象控制的,即布局中有多少TableRow对象,就有多少行。 GridLayout
网格布局是Android4.0新增的布局,它实现了控件的交错显示,能够避免因布局嵌套对设备性能的影响,更利于自由布局的开发。网格布局用一组无限细的直线将绘图区域分成行、列和单元,并指定控件的显示区域和控件在该区域的显示方式。 FrameLayout
帧布局为每个加入其中的控件创建一个空白区域(称为一帧,每个控件占据一帧)。采用帧布局设计界面时,只能在屏幕左上角显示一个控件,如果添加多个控件,这些控件会按照顺序在屏幕的左上角重叠显示,且会透明显示之前控件的文本。 AbsoluteLayout
绝对布局需要通过指定x、y坐标来控制每一个控件的位置,放入该布局的组件需要通过android:layout_x和android:layout_y两个属性指定其准确的坐标值,并显示在屏幕上。
5、样式与主题
Android系统中,包含了很多定义好的样式和主题,这些样式和主题用于定义布局显示在界面上的风格。
? 样式:用于定义界面元素显示风格,包含一个或多个View控件属性集合。样式只
能作用于单个View,使用样式可以指定多个控件的相同属性,减少代码书写量。 ? 主题:也是包含一个或多个View控件属性集合。它可以影响多个View,是全局性
的。主题通过在AndroidManifest.xml中的结点和来确定主题的应用范围是整个应用,还是单个Activity。
? 注意:如果一个应用使用了主题,同时单个view也使用了样式,在属性冲突时,
样式优先级高。
? 尽管Android系统提供了很多样式和主题,但有时这些效果并不能满足实际需求,
此时还可以自定义样式或者主题。
6、国际化
国际化是指软件开发时,应该具备支持多种语言和地区的功能,为不同国家和地区的用户,提供符合来访者阅读习惯的页面或数据。
由于国际化Internationalization这个单词的首字母“I”和尾字母“N”之间有18个字符,因此国际化被简称为I18N。
为了提供不同语言版本,开发者只需要在res目录下新建对应的values文件夹。 values文件夹的命名规则。
7、单元测试
? JUnit是一个测试框架,它是Android SDK1.5加入的自动化测试功能。在完成某个功能
后对该功能进行单独测试,而不需要把程序安装到手机或模拟器中进行测试,这样会大大提高程序开发的准确性。
? JUnit单元测试既可以嵌入到项目中,也可以作为一个单独的项目,针对某个项目进行
测试。具体步骤如下: 1)配置JUnit环境 2)创建测试类
3)运行测试 ? 配置Junit环境,在进行Junit测试时,首先需要在AndroidManifest.xml的结点
下配置指令集
8、程序调试
LogCat用于输出Android程序中的日志信息。它支持五种输出方式,级别由低到高分别是:
Verbose(V):显示全部信息,黑色,可通过Log.v()等方法进行信息输出。 Debug(D):显示调试信息,蓝色 Info(I):显示一般信息,绿色 Warning(W):显示警告信息,橙色 Error(E):显示错误信息,红色 Assert(A):Android4.0新增加的日志级别
9、Toast的使用
? Toast会显示一个小消息告诉用户一些必要信息,该消息在短时间内自动消失,不会干扰用户操作。
? Toast组件有两个方法makeText()和show(),其中makeText()方法用于设置需要显示的字
符串,show()方法显示消息框。
? Toast toast = Toast.makeText(Context,Text,Time); toast.show(); 简写形式如下:
Toast.makeText(context,\这是弹出消息!\
第三章 Activity
1、教学要求
? ? ? ? ?
掌握Activity的生命周期。
掌握Activity的4种启动模式。 掌握隐式意图和显式意图的使用。 学会使用Intent传递数据。
学会Activity之间数据传递与回传
2、Activity相关定义
? Activity是Android应用程序的四大组件之一,它负责管理Android应用程序的用户
界面。一个应用程序一般会包含若干个Activity,每一个Activity组件负责一个用户界面的展现。
? Activity是通过调用setContentView()方法来显示指定组件的。该方法既可以接收
View对象为参数,也可以接收布局文件对应的资源id为参数。
? Activity就像一个界面管理员,用户在界面上的操作是通过Activity来管理的,支持
多种操作事件,如:onKeyDown(int keyCode,KeyEvent event)、onKeyUp(int keyCode,KeyEvent event)、onTouchEvent(MotionEvent event)等。
3、Activity的创建
在Android应用中,可以创建一个或多个Activity,创建步骤如下所示: 1)定义一个类继承自android.app.Activity或者其子类;
2)在res/layout目录中创建一个xml文件,用于创建Activity的布局; 3)在AndroidManifest.xml文件中注册Activity; 4)重写Activity的onCreate()方法,并在该方法中使用setContentView()加载指定的布局文件;
4、Activity的生命周期
生命周期就是一个对象从创建到销毁的过程,每一个对象都有生命周期。同样,Activity
- SharedPreferences sp = getSharedPreferences(“data”,MODE_PRIVATE);//data表示文件名
- Editor editor = sp.edit(); //获取编辑器 - editor.putString(“name”, “传智播客”); //存入String类型数据 - editor.putInt(“age”, 8); //存入int类型数据 - editor.commit(); //提交修改
QQ登录案例
第五章 SQLite数据库
1、教学要求
学会SQLite数据库的基本操作。 学会使用sqlite3工具操作数据库。 学会使用ListView控件展示数据。
2、SQLite数据库简介
?
SQLite是一个轻量级数据库,第一个版本诞生于2000年5月。它最初是为
嵌入式设计的,占用资源非常低,在内存中只需要占用几百KB的存储空间。 ? SQLite是遵守ACID关联式的数据库管理系统。ACID是指数据库事务正确执
行的基本要素,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 ? SQLite没有服务器进程,它通过文件保存数据,该文件是跨平台的,可以放
在其他平台中使用。并且支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)五种数据类型。
3、SQLite的操作
SQLiteOpenHelper类常用方法
SQLiteDatabase类常用方法
Cursor类常用方法
SQLite事务操作
事务执行完成后一定要endTransaction方法关闭事务,当执行到该方法时,判断是否有执行成功标记,如果有,则提交数据,否则回滚数据。最后关闭事务,如果不关闭,则会在超时自动关闭,这种方式会降低数据库并发效率,因此,通常情况下,该方法在finally中执行。
开始数据库事务、关闭事务、关闭数据库的方法。 自学sqlite3
在Android SDK的platform-tools目录下提供了一\工具,它是一个简单的SQLite数据库管理工具,类似于MySQL提供的命令行窗口在有些时候,开发者利用该工具来査询、 管理数据库。 * :\\Android\\sdk\\platform-tools\\ sqlite3
如何在命令行通过sqlite3工具访问数据库**,并查询表*中的数据。
4、数据的展示—ListView
常见属性
BaseAdapter
即基本的适配器。它实际上就是一个抽象类,该类拥有四个抽象方法。在Android开发中,就是根据这几个抽象方法来对ListView进行数据适配的。
SimpleAdapter
SimpleAdapter继承自BaseAdapter,实现了BaseAdapter的四个抽象方法,分别是getCount()、getItem()、getItemId()、getView()方法。
ArrayAdapter
ArrayAdapter也继承自BaseAdapter,与SimpleAdapter相同。ArrayAdapter通常用于适配TextView控件,例如Android系统中的设置菜单(Setting)。
SimpleAdapter继承自BaseAdapter,实现了BaseAdapter的四个抽象方法,分别是getCount()、
getItem()、getItemId()、getView()方法(表5-5)。 因此,开发者只需要在创建SimpleAdapter实例时,在构造方法中传递相应参数即可。SimpleAdapter构造方法如:
Public SimpleAdapter(Context context, List< ? extends Map
Context context:getView()方法中需要用到Context将布局转换为View对象。 List Extends Map
Int resource: Item布局的资源ID。 String [] from: Map集合里的Key。 Int [] to: Item布局相应的控件id. ListView的优化
1) 复用ConvertView 2) 使用ViewHolder类
第六章 广播接收者
1、教学要求
学会自定义广播。
掌握有序广播和无序广播的使用。
掌握常用广播接收者(开机启动,短信接收)的使用。
2、广播接受者的创建与注册
要使用广播接收者接收其他应用程序发出的广播,先要在本应用中创建广播接收者并进行注册。注册广播有两种方式,常驻型广播和非常驻型广播。
1、创建广播接收者
public class MyBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { } } //要对监听到的广播进行处理,需要创建一个继承自BroadcastReceiver 的类,并重写onReceive方法。当监听到有广播发出时,就会调用onReceive方法,在onReceive()中事件处理即可。
(3)自定义广播的接收与发送
(4)有序广播与无序广播的接收
sendOrderedBroadcast()方法,该方法参数的作用
(5)广播的拦截
有序广播的拦截abortBroadcast( ) (6)定向广播
第七章 服务
1、教学要求
掌握服务的生命周期。 掌握服务的两种启动方式。
学会使用服务与Activity进行通信。
学会调用其他应用的服务,实现跨进程通信。
2、什么是服务、服务的创建
服务(Service)是Android中的四大组件之一,它能够长期在后台运行且不提供用户界面。即使用户切到另一应用程序,服务仍可以在后台运行。
服务的创建方式与创建Activity类似,只需要继承Service类,然后在清单文件中注册即可。
1、创建服务
public class MyService extends Service { public IBinder onBind(Intent arg0) { return null; } }
上述代码还没有实现具体的功能。值得注意的是,onBind()是Service类中唯一的抽象方法,所以必须要在子类中实现。
由于服务是Android的四大组件之一,因此,需要再清单文件中进行注册,注册代码如下:
在清单文件中配置
至此,整个服务便创建完成了,从上述过程看,服务的创建非常简单,需要注意的是,一定不要忘记在清单文件中对服务进行注册,否则服务不会生效。
3、服务的生命周期
与其他组件不同的是,Service不能自己主动运行,需要调用相应的方法来启动。 启动服务的方法是Context.startService()和Context.bindService()。使用不同的方法启动服务,服务的生命周期也会不同。
(1)startService方式开启服务的生命周期 当其他应用调用startService()方法时,服务会先执行onCreate(),onStartCommand()方法,此时,服务处于运行状态,直到自身调用stopSelf()方法或者其他组件调用stopService()方法时服务停止,最终被系统销毁。
这种方式开启的服务,服务会长期的在后台运行,并且服务的状态与开启者的状态没有关系。
Context.startService()方式启动
Context.startService()方式的生命周期: 启动时,startService –> onCreate() –> onStart(),停止时,stopService–> onDestroy()如果调用者直接退出而没有停止Service,则Service 会一直在后台运行。
Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。
采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法.
(2)bindService方式开启服务的生命周期 当其他组件调用bindService()启动服务时,服务被创建,接着客户端通过Ibinder接口与服务通信。客户端通过unbindService()方法关闭连接,多个客户端能绑定在同一服务上,并且当他们都解绑时,系统将直接销毁服务(服务不需要被停止)。随着服务的启动,会执行onCreate() ? onBind()方法,服务处于绑定状态, 客户端通过unbindService()方法关闭连接,解除绑定时,系统将直接销毁服务,服务不需要被停止。
这种方式开启的服务与开启者的状态有关,当调用者销毁了,服务也会被销毁。
startService方式与bindService方式开启服务时,服务生命周期中所执行的方法时不同的,如:
onCreate():第一次创建服务时执行的方法 onDestroy():服务被销毁时执行的方法
onStartCommand():客户端通过调用startService(Intent, Service)显示启动服务时执行该方法。
onBind():客户端通过调用bindService(Intent, Service, int)启动服务时执行该方法。
onUnbind():客户端调用unBindService(ServiceConnection conn)断开服务绑定时执行的方法。
这些方法都是Service生命周期中重要的回调方法,通过这些方法可以观察服务的创建、开启、绑定、解绑、销毁等过程。
4、服务的启动方式
使用startService()方式开启服务的具体代码如下所示: Intent intent = new Intent(this, StartService.class); Context.startService(intent); Context.stopService(intent);
服务也是Android中的四大组件之一,因此需要在清单文件中注册 当程序使用startService()和stopService()启动、关闭服务时,服务与调用者之间基本不存在太多的关联,也无法与访问者进行通信、数据交互等。如果服务需要与调用者进行方法调用和数据交互时,应该使用bindService()和unbindService()启动、关闭服务。 bindService(Intent service,ServiceConnection conn, int flags) Intent对象用于指定要启动的Service ServiceConnection对象用于监听调用者与Service的连接状态。 flags指定绑定时是否自动创建Service(如果Service还未创建)。 5、服务的通信 本地的通信 在Android系统中,服务的通信方式有两种,一种是本地服务通信,一种是远程服务通信。 本地服务通信是指应用程序内部的通信,而远程服务通信是指两个应用程序之间的通信。使用这两种方式进行通信时必须满足一个前提,就是服务必须以绑定方式开启。 在进行本地服务通信时,可以使用Service类提供的IBinder onBind(Intent intent)方法,该方法返回的IBinder对象会作为参数传递给ServiceConnection类中 onServiceConnected(ComponentName name,IBinder service)方法,这样访问者就可以通过IBinder对象与Service进行通信。 Service类 IBinder Onbind(Intent intent)方法ServiceConnection类onServiceConnected(ComponentName name, IBinder service)方法通过IBinder对象实现通信 远程通信 远程服务通信是通过AIDL(Android Interface Definition Language)实现的,它是一种接口定义语言(Interface Definition Language),其语法格式非常简单,与Java中定义接口很相似。 但还存在差异: 1、AIDL定义接口的源代码必须以.aidl结尾 2、AIDL接口中用到的数据类型,除基本类型,String,CharSequence,List,Map之外,其他类型全部需要导入包,即使他们在同一个包中。 定义AIDL接口,实质上只是定义了进程间通信接口,服务端、客户端都需要使用Android SDK目录下的platform-tools子目录下的aidl.exe工具为该接口提供实现。如果使用ADT工具进行开发,则ADT会自动实现AIDL接口。 远程服务通信是通过AIDL(Android Interface Definition Language)实现的,它是一种接口定义语言(Interface Definition Language),其语法格式非常简单,与Java中定义接口很相似。 package cn.itcast.service; interface IService{ String getName(); int getPrice(); } 定义好AIDL接口之后,接着需要在应用程序中创建Service的子类。该Service的onBind()方法所返回的IBinder对象应该是ADT所生成的IService.Stub的子类。 第八章 内容提供者 1、教学要求 了解什么是内容提供者。 学会使用内容提供者。 学会使用ContentResolver操作其他应用的数据。 学会使用内容观察者观察其他应用数据的变化。 2、内容提供者 Android中内容提供者的作用 为了实现这些功能,Android系统提供了一个跨应用进行数据访问的组件,这个组件就是内容提供者ContentProvider。 通过ContentResolver操作A应用数据B应用操作暴露的数据ContentResolver返回操作结果返回操作结果A应用使用ContentProvider暴露的数据 定义一个类继承android.content包下的ContentProvider类(抽象类)。子类需要重写它的onCreate()、delete()、getType()、insert()、query()、update()这几个抽象方法。 ContentProvider是四大组件之一,必须要在清单文件中注册 3、数据暴露的安全性问题 当使用provider暴露敏感数据时,为了数据安全,在注册ContentProvider时,还可以为其设定一些列的权限,具体操作如下: 利用android:permission属性,如果在注册provider时使用了该属性,则其他应用访问该ContentProvider时必须加上该权限,否则会报异常。如:PersonDBProvider注册了下述权限,android:permission=“mobile.permission.PROVIDER”,则其他应用访问该Provider时需要加上 此外,还可以为Provider配置android:readpermission属性,如果在注册了provider时使用了该属性,那么其他应用在使用query方法查询数据时,必须加上该权限。 android:writePermission属性,如果在注册provider时使用该属性,那么其他应用通过 ContentProvider的增、删、改这个几个方法操作数据时需要加上该权限。 如果在注册Provider时为其指定了自定义权限(即系统内不存在的权限)。为了让权限生效,首先需要单击清单文件中的permission标签页的Add按钮,进行添加。 4、Uri简介 ContentProvider的几个抽象方法,这几个抽象方法中有一个参数Uri,它代表了数据的操作方法。Uri是由scheme、authorites、path三部分组成。 content://cn.itcast.db.personprovider/person schemeauthoritiespath scheme:“content://”是一个标准的前缀,表明这个数据被内容提供者所 控制,它不会被修改; ? authorities:“cn.itcast.db.personprovider”是在清单文件中指定的 android:authorities属性值,该值必须唯一,它表示了当前的内容提供者; ? path:“/person”代表资源(或者数据),当访问者需要操作不同数据时,这 个部分是动态改变的。 Uri类常用方法 Uri.parse(String str)方法是将字符串转化成Uri对象的。为了解析Uri对象,Android系统提供了一个辅助工具类UriMatcher用于匹配Uri。 UriMatcher类中的常用方法如表所示: 方法名称 方法说明 创建UriMatcher对象时调用,参数通常使用UriMatcher.NO_MATCH,表示路径不满足条件返回-1 ? public UriMatcher(int code) public void addURI(String 添加一组匹配规则,authority即Uri的authoritites部分,authority, String path, int code) path即Uri的path部分 匹配Uri与addURI方法相对应,匹配成功则返回addURI方法中传入的参数code的值。 public int match(Uri uri) 5、内容提供者的访问 在Android系统中,ContentResolver充当着桥梁的角色。应用程序通过ContentProvider暴露自己的数据,通过ContentResolver对应用程序暴露的数据进行操作。 在使用ContentProvider暴露数据时提供了相应的Uri,因此,访问现有的ContentProvider时要指定相应的Uri,然后通过ContentResolver对象来实现数据的操作。 6、内容观察者 使用ContentProvider将数据共享出来后,再使用ContentResolver查询ContentProvider共享出来的数据。如果应用程序需要监听ContentProvider共享的数据是否发生变化,可以 使用ContentObserver(内容观察者)对数据进行监听。 当数据发生变化是向消息中心发送消息观察消息中心的消息,通过消息观察A应用数据变化消息中心C应用注册ContentObserverA应用使用ContentProvider暴露数据并调用ContentResolver的notifyChange()方法观察到变化的数据触发onChange()方法操作A应用中的数据B应用使用ContentResolver 内容观察者常用方法 方法名称 方法说明 ContentObserver(Handler ContentObserver的派生类都需要调用该构造方法。参数可以是handler) 主线程Handler(可以更新UI ),也可以是任何Handler对象。 public void onChange(boolean selfChange) 当观察到的Uri代表的数据发生变化时,会触发该方法。
正在阅读:
Android复习纲要06-05
错题簿(修复的)12-30
《三国演义》阅读竞赛题10-11
新的学期作文450字06-27
人弃我取人取我予02-18
电子完税系统白皮书11-23
四年级数学下册全册教案 - 图文03-13
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 纲要
- 复习
- Android
- 《水文学》习题集与答案
- 高二语文基础知识竞赛试题
- 2016-2017学年教科版思想品德八年级上册全部教学设计教案
- 浅谈晶体缺陷
- 浙师大行知宏观习题
- 2012中考英语复习专项练习题(名词、代词和冠词)
- javabase
- 解构主义学派1
- 职业道德讲义
- 手把手教你填写DS160表格(图解)
- 金针菇种植项目可行性研究报告 - 图文
- 全日制普通高级中学数学教学大纲(最新版)
- 2016年大学计算机基础试题题库及答案计算机等级考试题库资料
- 七年级上英语期中试卷2
- 小学英语新课程专题学习1
- 北师大版小学语文四年级上册期末测试卷
- 初三物理全册教案1 - 图文
- 2002年全国硕士研究生入学统一考试英语试题
- 上海大学数据库2原理研讨+作业的个人解答
- 九上数学一元二次方程、二次函数中考真题专项练(带答案详解详析