Android四大组件.doc

合集下载

安卓开发试题及答案

安卓开发试题及答案

安卓开发试题及答案一、单选题(每题2分,共10分)1. Android开发中,哪个文件是用来定义应用程序的启动界面?A. AndroidManifest.xmlB. activity_main.xmlC. strings.xmlD. styles.xml答案:B2. 下列哪个不是Android四大组件?A. ActivityB. ServiceC. Content ProviderD. Intent答案:D3. 在Android开发中,以下哪种布局不是线性布局?A. LinearLayoutB. RelativeLayoutC. ConstraintLayoutD. FrameLayout答案:C4. 在Android中,下列哪个方法用于启动一个新的Activity?A. startActivity()B. startService()C. bindService()D. stopService()答案:A5. Android中,下列哪个类是用于处理网络请求的?A. HttpURLConnectionB. HttpUrlConnectionC. HttpURLConnectionD. HttpConnection答案:C二、多选题(每题3分,共15分)1. 下列哪些是Android开发中常用的布局?A. LinearLayoutB. RelativeLayoutC. ConstraintLayoutD. TableLayout答案:ABCD2. 在Android开发中,下列哪些是Activity的生命周期方法?A. onCreate()B. onStart()C. onResume()D. onDestroy()答案:ABCD3. 下列哪些是Android开发中常用的数据存储方式?A. SharedPreferencesB. SQLiteC. FileD. ContentProvider答案:ABCD4. 在Android开发中,下列哪些是Intent的常用操作?A. startActivity()B. startActivityForResult()C. startService()D. bindService()答案:ABCD5. 下列哪些是Android开发中常用的网络请求库?A. RetrofitB. VolleyC. OkHttpD. Gson答案:ABC三、判断题(每题2分,共10分)1. AndroidManifest.xml文件中定义了应用程序的所有权限。

第一行代码Android知识点总结

第一行代码Android知识点总结

第一行代码知识点总结1、Android四层架构:Linux内核层(提供底层驱动)、系统运行库层(提供特性支持,一些核心库)、应用框架层(提供各种API)和应用层2、Android四大组件:活动(activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)3、Android应用特色开发:四大组件、丰富的系统控件、SQL数据库(轻量级,运算速度快的嵌入式关系型数据库)、强大的多媒体和地理位置定位(LBS)。

4、Android程序设计讲究逻辑和视图分离,通常在布局文件中编写在界面4.1Android的日志工具Log:Log.d()打印调试信息对应debug。

Log.v()打印琐碎、意义最小日志,对应verbose,Log.i()打印比较重要的数据对应info;Log.w()打印警告信息对应error;Log.e()打印错误信息对应error。

Log.d(类名,打印内容)4.2活动:主要用于和用户进行交互、基本用法4.3活动中的提醒方式Toast4.4、drawable存放图片,mipmap存放应用图标,values放字符串、样式,颜色等配置,layout放布局文件4.5、Android Studio是采用Gradle来构建项目5、Intent的使用:显式Intent和隐式Intent()6、活动的生命周期7、返回栈的定义8、Android是使用任务来管理活动的9、活动状态:运行、暂停、停止、销毁状态10、Activity类中的七个回调方法:onCreate()onStaart()、onResume()、onPause()、onStop()、onDestroy()和onRestart()11、活动的三种生存期:完整、可见、前台12、活动的四种启动模式:standard、singleTop、singleTask 和singleInstance13、常用控件:TextView、Button、EditText、ImageView、ProgressBar(进度条)、AlertDialog(对话框)、ProgressDialog (显示对话框时出现进度条)14、基本布局:线性布局(LinearLayout)、相对布局(RelativeLayout)、帧布局(FrameLayout)百分比布局、AbsoluteLayout、TableLayout15、常用和最难用的控件ListView16、滚动控件:RecyclerView17、碎片的定义、使用方式、碎片的生命周期、状态和回调18、广播主要的两种类型:标准广播和有序广播;注册广播的方式:静态注册和动态注册;广播接收器继承BroadcastReceiver19、本地广播(LocalBroadcastManager)20、Android系统中三种数据持久化方式:文件储存、SharedPreference储存及数据库储存,还有保存在手机SD卡中21、SQliteOpenHelper帮助类:SQliteOpenHelper中有两个抽象方法onCreate()和onUpgrade();两种重要的实例方法getReadableDatabase()和getWritableDatabase()22、LitePal操作数据库23、跨程序共享数据:内容提供器24、ContentResolver的基本用法:ContentResolver类、ContentResolver中提供给了一系列的方法用于对数据进行CRUD操作包括增删改查操作;ContentResolver增删改查方法不接收表名参数,而是用Uri参数代替。

Android开发自学笔记(AndroidStudio)—4.1布局组件

Android开发自学笔记(AndroidStudio)—4.1布局组件

Android开发⾃学笔记(AndroidStudio)—4.1布局组件⼀、引⾔Android的界⾯是有布局和组件协同完成的,布局好⽐是建筑⾥的框架,⽽组件则相当于建筑⾥的砖⽡。

组件按照布局的要求依次排列,就组成了⽤户所看见的界⾯。

在Android4.0之前,我们通常说Android开发五⼤布局和四⼤组件,这五⼤布局就是:1. LinearLayout 线性布局2. FrameLayout 单帧布局,也有中⽂翻译为帧布局、框架布局。

3. RelativeLayout 相对布局4. AbsoluteLayout 绝对布局5. TableLayout 表格布局⽽在Android4.0之后⼜新增了⼀种GridLayout⽹格布局。

⼆、LinearLayout线性布局线性布局是Android开发中最常见的⼀种布局⽅式,它是按照垂直或者⽔平⽅向来布局,通过“android:orientation”属性可以设置线性布局的⽅向。

属性值有垂直(vertical)和⽔平(horizontal)两种。

线性布局的排列在某⾏或者某列并不会⾃动换⾏或换列,就是说如果采⽤⽔平布局,控件宽度超过屏幕显⽰的话,后⾯的控件都将被隐藏,不会⾃动换⾏。

常⽤的属性有:1. android:orientation:可以设置布局的⽅向2. android:id - 为控件指定相应的ID3. android:text - 指定控件当中显⽰的⽂字,需要注意的是,这⾥尽量使⽤string.xml4. android:gravity - 指定控件的基本位置,⽐如说居中,居右等位置5. android:textSize - 指定控件当中字体的⼤⼩6. android:background - 指定控件所⽤的背景⾊,RGB命名法7. android:layout_width - 指定控件的宽度8. android:layout_height - 指定控件的⾼度9. android:layout_weight - 指定控件的占⽤⽐例10. android:padding - 指定控件的内边距,也就是说控件当中的内容11. android:sigleLine - 如果设置为真的话,则将控件的内容显⽰在⼀⾏当中layout_weight属性以控制各个控件在布局中的相对⼤⼩。

APP测试面试题分享(附带参考答案)

APP测试面试题分享(附带参考答案)

APP测试⾯试题分享(附带参考答案)1、Android四⼤组件Android四⼤基本组件:Activity、BroadcastReceiver⼴播接收器、ContentProvider内容提供者、Service服务。

Activity:应⽤程序中,⼀个Activity就相当于⼿机屏幕,它是⼀种可以包含⽤户界⾯的组件,主要⽤于和⽤户进⾏交互。

⼀个应⽤程序可以包含许多活动,⽐如事件的点击,⼀般都会触发⼀个新的Activity。

BroadcastReceiver⼴播接收器:应⽤可以使⽤它对外部事件进⾏过滤只对感兴趣的外部事件(如当电话呼⼊时,或者数据⽹络可⽤时)进⾏接收并做出响应。

⼴播接收器没有⽤户界⾯。

然⽽,它们可以启动⼀个activity或serice 来响应它们收到的信息,或者⽤NotificationManager来通知⽤户。

通知可以⽤很多种⽅式来吸引⽤户的注意⼒──闪动背灯、震动、播放声⾳等。

⼀般来说是在状态栏上放⼀个持久的图标,⽤户可以打开它并获取消息。

ContentProvider内容提供者:内容提供者主要⽤于在不同应⽤程序之间实现数据共享的功能,它提供了⼀套完整的机制,允许⼀个程序访问另⼀个程序中的数据,同时还能保证被访问数据的安全性。

只有需要在多个应⽤程序间共享数据时才需要内容提供者。

例如:通讯录数据被多个应⽤程序使⽤,且必须存储在⼀个内容提供者中。

它的好处:统⼀数据访问⽅式。

Service服务:是Android中实现程序后台运⾏的解决⽅案,它⾮常适合去执⾏那些不需要和⽤户交互⽽且还要长期运⾏的任务(⼀边打电话,后台挂着QQ)。

服务的运⾏不依赖于任何⽤户界⾯,即使程序被切换到后台,或者⽤户打开了另⼀个应⽤程序,服务仍然能够保持正常运⾏,不过服务并不是运⾏在⼀个独⽴的进程当中,⽽是依赖于创建服务时所在的应⽤程序进程。

当某个应⽤程序进程被杀掉后,所有依赖于该进程的服务也会停⽌运⾏(正在听⾳乐,然后把⾳乐程序退出)。

android 笔试题及答案

android 笔试题及答案

android 笔试题及答案一、选择题1. 下列哪个不是Android应用的组成部分?A. 清单文件(AndroidManifest.xml)B. Java源代码文件C. 图片和资源文件D. 执行文件答案:D2. Android系统的内核基于以下哪个操作系统?A. WindowsB. LinuxC. macOSD. iOS答案:B3. 在Android开发中,以下哪个不是常用的布局文件?A. LinearLayoutB. RelativeLayoutC. FrameLayoutD. TableView答案:D4. 在Android中,以下哪个不是四大组件?A. ActivityB. ServiceC. IntentD. ContentProvider答案:C5. 在Android中,以下哪个不是常用的存储方式?A. SharedPreferencesB. SQLite数据库C. 文件存储D. 内存缓存答案:D二、填空题1. Activity的生命周期包括以下几个方法:onCreate、onStart、______、onStop、onDestroy。

填空答案:onResume2. ______是Android系统提供的轻量级跨进程通信方式。

填空答案:AIDL(Android Interface Definition Language)3. 在Android中,使用______可以发送一个广播给其他应用或系统组件。

填空答案:Intent4. 在Android开发中,______是一种将组件从布局文件中实例化的机制。

填空答案:LayoutInflater5. 使用______可以将一个应用发布到Google Play商店。

填空答案:Android Studio、Android Developer Console三、问答题1. 什么是Fragment?它的作用是什么?答案:Fragment是Android中一种可重复使用的界面组件,它可以嵌入到Activity中,并且可以独立地管理自己的生命周期。

Android平台简单介绍

Android平台简单介绍

Android平台简单介绍1. 起源和发展Android是由Android公司的创始⼈Andy Rubin创造的,⽽后被Google收购,Google的⽬标是将Android打造成⼀个标准化、开放式的移动操作系统平台。

Android是开放源代码的移动操作系统软件,提供了丰富的功能和酷炫的⽤户界⾯。

Google不断优化和改进Android系统,并开放原⽣的安卓系统源代码允许各个软件⼚商或者⼿机⼚商进⾏定制化的修改。

同时Google也提供了丰富的Android API和强⼤的开发环境,使得在Android平台上开发Android App变得⼗分便捷。

Android是⽬前移动端市场占有率最⾼的⼿机操作系统,事实上,Android已经不仅仅⽤在⼿机端,还⼴泛⽤于TV、⼿表等各种可穿戴设备以及各种智能硬件。

2. Android平台架构Android平台是基于Linux内核构建起来的,从上到下主要包含四个层次:应⽤程序层,这⼀层主要包含各种应⽤程序软件,包括最基本的通话、短信、联系⼈、浏览器等App,还包括⼤量开发者开发的各种App;应⽤程序框架层,所有的App都是基于应⽤框架层开发的,应⽤框架层提供了⼤量的API供开发者使⽤,开发者也可以提交⾃⼰开发的功能模块;系统环境层,这⼀层包含了⽀持上层功能所需要的⼤量C/C++函数库,还包括Android运⾏时环境,Android运⾏时环境包括Java核⼼库以及Android虚拟机;Linux内核层,Android内核建⽴在Linux 2.6之上,这⼀层提供最基础的诸如内存管理、进程管理、⽹络协议栈等操作系统级服务;关于Android虚拟机,在5.0版本之前使⽤的是Dalvik虚拟机,⽽⾃5.0版本之后使⽤的是ART。

Dalvik虚拟机是⼀种解释执⾏的虚拟机,由于其在运⾏App时进⾏动态编译,使得运⾏App的速度⽐较慢。

ART采⽤AOT(Ahead of Time)的技术在安装App时就进⾏编译,使得运⾏App的效率得到较⼤提升。

android service用法

android service用法Android Service是Android中的一个非常重要的概念,它是一种可以在后台运行的组件。

Service可以用来执行长时间运行的操作而不需要用户交互。

这些操作可以是播放音乐、下载文件、上传日志等等。

Service是Android四大组件之一,它与Activity、BroadcastReceiver、Content Provider共同构成了Android应用程序的组成部分。

当我们开发Android应用程序时,会不可避免地遇到一些需要在后台运行一段时间的任务,这时就可以用到Service来解决这些问题。

Service的用途:1.执行一些耗时的任务,不会阻塞UI线程。

2.在后台接收和处理广播,并且不会为了响应广播而启动用户界面。

3.提供远程接口,用于与其他应用程序进行通信。

Android系统根据服务的工作状态,将Service分为两种类型:Started Service和Bound Service。

1.Started Service最常用的一种是Started Service,它是一种没有任何输入或输出数据流的服务,只负责执行一些计算或操作,这些操作不需要与应用程序的其他组件进行交互。

- onCreate()方法:当Service第一次创建时,系统会调用该方法,只会调用一次。

使用startService()方法启动Service。

startService()方法可以传递Intent作为参数,在Intent中可以携带数据。

Bound Service需要与其他组件进行交互,它可以被客户端连接和解绑。

客户端可以在Activity、Service、BroadcastReceiver里面创建与Bound Service的连接。

Bound Service通常需要提供一些公共方法供客户端调用。

Bound Service的生命周期:Service的生命周期分为创建、运行和销毁三个阶段。

Service 组件详解,告别Unable to start service Intent!

Service 组件详解,告别Unable to start service Intent!很多人在使用service的过程中由于一些细节的问题导致Unable to start service Intent,在此,我搜集了一下service的一些资料,和大将共享...下次大家再遇到这样的错误,相信就能迎刃而解了.!let's go!1.Service是什么Service是Android的四大组件之一,即Android系统的服务(不是一个线程,是主程序的一部分),与Activity不同,它是不能与用户交互的,不能自己启动的,需要调用Context.startService()来启动,运行后台,如果我们退出应用时,Service进程并没有结束,它仍然在后台行。

比如我们播放音乐的时候,有可能想边听音乐边干些其他事情,当我们退出播放音乐的应用,如果不用Service,我们就听不到歌了,所以这时候就得用到Service了。

2.Service生命周期①onCreate() 创建Service②onStart(Intent intent, int startId) 启动Service③onDestroy() 销毁Service④onBind() 返回一个IBinder接口对象给Service3.启动和停止Service①启动:startService(Intent intent)来启动Service,这时Service会调用自身的onCreate()方法(该Service未创建),接着调用onStart()方法。

②停止:stopService(Intent intent)来停止Service,这时Service会调用自身的onDestory()方法。

4.绑定Service调用bindService(Intent service, ServiceConnection conn, int flags)来绑定一个Service,这时Service会调用自身的onCreate()方法(该Service未创建),接着调用onBind() 方法返回客户端一个IBinder接口对象。

Android系统四大组件的注册与激活

Ac t i v i t y、 S e r v i c e、 C o n t e n t Pr o v i d e r 、 Br o a d c a s t Re c e i v e r 。
通 过在 清单 文 件 中添 加 < s e v r i c e >元素 来注 册 服务 , 注册 服 务时 也 可 以添加 意 图过 滤 器元 素 来过 滤该 服 务 能被 哪 些意 图启 动。 因为服 务没有 界面 , 所 以不 用指定 l a b e l 属性。
关 键 A n d r o i d; 注册 ; 激活 ; 组件
中圈 分类 号 : T P 3 1 1
文 献标 识码 : A
文 章编 号 : 1 6 7 1 —7 5 9 7( 2 0 1 3 )0 3 1 — 0 1 6 - 0 1
A c t i * i t y的配 置 通 常 需 要 指 定 三个 属性 : n a m e 、i c o n以及 l a b e l 。 n a m e 属性指定实现这个 a c t i v i t y 的类 。i c o n指定 这 个 a c t i v i t y 对 应 的 图标 。L a b e l 指定 该 a c t i v i t y 对应 的标 签。
如果 该 A n d r o i d 应 用需 要 多个 用 户界 面 , 那 么这个 A n d r o i d 应 用 将 会包 含 多个 A c t i v i t y , 多个 A c t i v i t y 组成 A c t i v i t y 栈 , 当 前活 动
的A c t i v i t y 位 于栈 顶 。
1 四大组件 介绍

作 为手 机 应用 程 序 , 大部 分 都 有 一 个 和用 户 交互 的界 面 ,

Android的系统架构

Android的系统架构Android的系统架构和其它操作系统一样,采用了分层的架构。

android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和linux核心层。

Android是以Linux为核心的手机操作平台,作为一款开放式的操作系统,随着Android的快速发展,如今已允许开发者使用多种编程语言来开发Android 应用程序,而不再是以前只能使用Java开发Android应用程序的单一局面,因而受到众多开发者的欢迎,成为真正意义上的开放式操作系统。

在Android中,开发者可以使用Java作为编程语言来开发应用程序,也可以通过NDK使用C/C++作为编程语言来开发应用程序,也可使用SL4A来使用其他各种脚本语言进行编程(如:python、lua、tcl、php等等),还有其他诸如:Qt(qt for android)、Mono(mono for android)等一些著名编程框架也开始支持Android编程,甚至通过MonoDroid,开发者还可以使用C#作为编程语言来开发应用程序。

另外,谷歌还在2009年特别发布了针对初学者的Android Simple 语言,该语言类似Basic语言。

而在网页编程语言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已经支持Android开发。

而在Android系统底层方面,Android使用C/C++作为开发语言。

应用程序(部分)早期的Android应用程序开发,通常通过Android SDK(Android软件开发包)下使用Java作为编程语言来开发应用程序,但通过不同的软件开发包,则使用的编程语言也不同。

例如开发者可以通过Android NDK(Android Native开发包)使用C语言或者C++语言来作为编程语言开发应用程序。

同时谷歌还推出了适合初学者编程使用的Simple语言,该语言类似微软公司的Visual Basic语言。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Android四大组件(Activity,服务(Service),广播(
Broadcast Receiver

),Content Provider(数据共享))

Activity
应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监
听并处理用户的事件做出响应。

Activity的生命周期:
onCreate(),onStart(),onRestart(),onResume(),onPause(),onStop(),onDestory(
);

一、 onCreate :当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始化工
作。
onCreate 方法有一个参数,该参数可以为空( null ),也可以是之前调用
onSaveInstanceState ()方法保存的状态信息。
二、 onStart :该方法的触发表示所属活动将被展现给用户。
三、 onResume :当一个活动和用户发生交互的时候,触发该方法。
四、 onPause :当一个正在前台运行的活动因为其他的活动需要前台运行而转入后台
运行的时候,触发该方法。这时候需要将活动的状态持久化,比如正在编辑的数据库记录等。
五、 onStop :当一个活动不再需要展示给用户的时候,触发该方法。如果内存紧张,
系统会直接结束这个活动,而不会触发 onStop 方法。 所以保存状态信息是应该在onPause
时做,而不是onStop时做。活动如果没有在前台运行,都将被停止或者Linux管理进程为了
给新的活动预留足够的存储空间而随时结束这些活动。因此对于开发者来说,在设计应用程
序的时候,必须时刻牢记这一原则。在一些情况下,onPause方法或许是活动触发的最后的
方法,因此开发者需要在这个时候保存需要保存的信息。
六、onRestart :当处于停止状态的活动需要再次展现给用户的时候,触发该方法。
七、 onDestroy :当活动销毁的时候,触发该方法。和 onStop 方法一样,如果内存
紧张,系统会直接结束这个活动而不会触发该方法。

一个Activity的启动顺序:
onCreate()——>onStart()——>onResume()
当另一个Activity启动时:
第一个Activity onPause()——>第二个Activity onCreate()——>onStart()——>onResume()
——>第一个Activity onStop()
当返回到第一个Activity时:
第二个Activity onPause() ——> 第一个Activity
onRestart()——>onStart()——>onResume() ——>第二个Activity onStop()——>onDestroy()
服务(Service)
本地服务 Local Service 用于应用程序内部。
startService(new Intent("注册的服务名"));开启
stopService(new Intent("注册的服务名"));关闭

生命周期:onCreate() onStart() onDestrory()
在AndroidManifest.xml添加:
1.
2.
3.
4.
5.

6.

Service是一个后台运行的,没有界面的Android组件,可用于处理耗时操作。

Service不是一个线程,有自己的生命周期。
创建一个Service步骤:
(1)创建一个类,继承Service。
(2)在AndroidManifest.xml文件中配置
(3)复写相应的方法:
abstract IBinder onBind():该方法是Service子类必须要实现的方法.
void onCreate():当Service被创建时回调该方法.
void onStartCommand():当Service被启动时回调该方法.
void onDestroy():当Service被关闭前回调该方法.
它可以启动并运行,直至有人停止了它或它自己停止。在这种方式下,它
以调用Context.startService()启动,而以调用Context.stopService()结束。
它可以调用Service.stopSelf() 或 Service.stopSelfResult()来自己停止。
不论调用了多少次startService()方法,你只需要调用一次stopService()来停
止服务。
用于实现应用程序自己的一些耗时任务,比如查询升级信息,并不占用应用
程序比如Activity所属线程,而是单开线程后台执行,这样用户体验比较好。

生命周期
使用context.startService() 启动Service是会会经历:
context.startService() ->onCreate()- >onStart()->Service running
context.stopService() | ->onDestroy() ->Service stop

广播(Broadcast Receiver)

发送广播: .new Intent with action name
Intent intent = new Intent(String action);
或者 只是new Intent, 然后
intent.setAction(String action);

sendBroadcast(Intent);
接收广播:
1. extend BroadcastReceiver
2. 注册:
1.静态注册: 1.
2.
3.y.SMS_RECEIVED" />
4.

5.

1. 2.动态注册:1.
IntentFilter filter = newIntentFilter("android.provider.Telephony.SMS_RECEIV
ED");
2. IncomingSMSReceiver receiver = newIncomingSMSReceiver();
3. registerReceiver(receiver, filter);

动态注册退出程序时:Context.unregisterReceiver()
一个receiver可以接收多个action的,即可以有多个intent-filter,需要在
onReceive里面对intent.getAction(action name)进行判断。
3. 在监听系统广播时,要添加相应权限!!!

Content Provider(数据共享))

Android提供了一些主要数据类型的ContentProvider,比如音频、视频、图片
和私人通讯录等。可在android.provider包下面找到一些Android提供的
ContentProvider。通过获得这些ContentProvider可以查询它们包含的数据,
当然前提是已获得适当的读取权限。

创建ContentProvider
a. 创建一个继承了ContentProvider父类的类

b. 定义一个名为CONTENT_URI,并且是public static final的Uri类型的类变量,你必须为
其指定一个唯一的字符串值,最好的方案是以类的全名称, 如:
public static final Uri CONTENT_URI =
Uri.parse( “content://com.google.android.MyContentProvider”);

c. 定义你要返回给客户端的数据列名。如果你正在使用Android数据库,必须为其定义一个叫
_id的列,它用来表示每条记录的唯一性。

d. 创建你的数据存储系统。大多数Content Provider使用Android文件系统或SQLite数据
库来保持数据,但是你也可以以任何你想要的方式来存储。

E.
查询返回一个Cursor类型的对象。所有执行写操作的方法如insert(), update() 以及

delete()都将被监听。我们可以通过使用ContentResover().notifyChange()方法来通知监
听器关于数据更新的信息。

相关文档
最新文档