71道Android开发面试题目
- 格式:doc
- 大小:135.50 KB
- 文档页数:24
常见Android⾯试题及答案(详细整理)1. 请描述⼀下Activity ⽣命周期。
答: 如下图所⽰。
共有七个周期函数,按顺序分别是: onCreate(), onStart(), onRestart(), onResume(), onPause(),onStop(), onDestroy()。
onCreate(): 创建Activity时调⽤,设置在该⽅法中,还以Bundle的形式提供对以前存储的任何状态的访问。
onStart(): Activity变为在屏幕上对⽤户可见时调⽤。
onResume(): Activity开始与⽤户交互时调⽤(⽆论是启动还是重新启动⼀个活动,该⽅法总是被调⽤。
onPause(): Activity被暂停或收回cpu和其他资源时调⽤,该⽅法⽤户保护活动状态的,也是保护现场。
onStop(): Activity被停⽌并转为不可见阶段及后续的⽣命周期事件时调⽤。
onRestart(): Activity被重新启动时调⽤。
该活动仍然在栈中,⽽不是启动新的Activity。
1、完整⽣命周期: 即从⼀个Activity从出现到消失,对应的周期⽅法是从onCreate()到onDestroy()。
2、可见⽣命周期: 当Activity处于可以⽤户看见的状态,但不⼀定能与⽤户交互时,将多次执⾏从onStart()到onStop()。
3、前景⽣命周期: 当Activity处于Activity栈最顶端,能够与其他⽤户进⾏交互时,将多次执⾏从onResume()到onPause()。
2. 两个Activity之间跳转时必然会执⾏的是哪⼏个⽅法。
答: 两个Activity之间跳转必然会执⾏的是下⾯⼏个⽅法。
onCreate()//在Activity⽣命周期开始时调⽤。
onRestoreInstanceState()//⽤来恢复UI状态。
onRestart()//当Activity重新启动时调⽤。
Android 70道面试题汇总不再愁面试android70道面试题汇总不再愁面试本文为开发者奉献了70道经典android面试题加答案--重要知识点几乎都涉及到了,你还等啥,赶紧收藏吧!!1.以下哪些语句关于内存废旧的表明就是恰当的?(b)a、程序员必须建立一个线程去释放出来内存b、内存回收程序负责释放无用内存c、内存回收程序允许程序员直接释放内存d、内存回收程序可以在指定的时间释放内存对象2.下面异常就是属runtimeexception的就是(abcd)(多挑选)a、arithmeticexceptionb、illegalargumentexceptionc、nullpointerexceptiond、bufferunderflowexception3.math.round(11.5)等于多少().math.round(-11.5)等于多少(c).ca、11,-11b、11,-12c、12,-11d、12,-12b=x>50&&y>60||x>50&&y60||xa、trueb、falsec、1d、011.activity5.对一些资源以及状态的操作方式留存,最出色就是留存在生命周期的哪个函数中展开(d)a、onpause()b、oncreate()c、onresume()d、onstart()6.intent传递数据时,下列的数据类型哪些可以被传递(abcd)(多选)a、serializableb、charsequencec、parcelabled、bundle7.android中以下属intent的促进作用的就是(c)a、同时实现应用程序间的数据共享b、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失c、可以同时实现界面间的转换,可以涵盖动作和动作数据,相连接四大组件的纽带d、处置一个应用程序整体性的工作8.下列属于sax解析xml文件的优点的是(b)a、将整个文档树在内存中,便于操作,支持删除,修改,重新排列等多种功能b、不用事先调入整个文档,占用资源少c、整个文档调入内存,浪费时间和空间d、不是长久留驻在内存,数据不是长久的,事件过后,若没留存数据,数据就可以消失9.下面的对自定style的方式正确的是a、</p><p><itemname=\>fill_parent</item>b、</p><p><itemname=\>fill_parent</item>c、fill_parentd、fill_parent10.在android中使用menu时可能需要重写的方法有(ac)。
Android开发工程师岗位面试题及答案1.请介绍一下您在Android开发方面的经验。
答:我在过去的X年中,一直从事Android应用开发工作。
我曾参与开发了多个项目,涵盖了各种领域,如电子商务、社交媒体以及物联网。
我熟悉AndroidSDK、Java和Kotlin编程语言,能够设计并优化用户界面、处理数据、进行性能调优等。
2.请解释一下MVC(Model View Controller)和MVVM (ModelView View Model)的架构模式。
答:MVC是一种将应用程序分为模型、视图和控制器的架构,用于分离数据、用户界面和应用逻辑。
MVVM是MVC的演变,引入了ViewModel层来处理视图和数据之间的通信,通过数据绑定实现更松散的耦合。
3.在Android中,什么是Content Provider?它的作用是什么?答:Content Provider用于在不同的应用程序之间共享数据。
它提供了一种标准的接口,允许应用访问和修改其他应用的数据,如联系人、媒体文件等。
4.如何在Android应用中处理不同屏幕尺寸和分辨率的适配?答:为了适配不同屏幕,可以使用不同的布局文件、尺寸单位和限定符。
例如,可以创建不同分辨率的资源文件夹,以确保应用在各种屏幕上都能正确显示。
5.请讲解一下Android中的线程和异步任务处理。
答:在Android中,主线程负责处理UI更新,而耗时操作应该在后台线程中执行,以避免阻塞主线程。
可以使用Thread、Handler、Async Task或RxJava等来管理线程和执行异步任务。
6.什么是Depend encyIn jection(依赖注入)?为什么在Android 开发中使用它?答:依赖注入是一种设计模式,用于将依赖关系从代码中分离出来,以提高可维护性和测试性。
在Android开发中,使用依赖注入可以更轻松地管理组件之间的依赖关系,例如使用Dagger框架。
安卓面试题及答案详解版1. 问题:什么是Android操作系统?答案: Android操作系统是一种基于Linux内核的开源操作系统,主要用于触屏移动设备,如智能手机和平板电脑。
它由Google公司开发并发布,允许设备制造商和开发者自由地修改和分发。
2. 问题:请解释Android的架构。
答案: Android架构从下到上分为四个层次:- 应用层:包含用户界面和应用程序。
- 应用框架层:提供应用程序开发接口(API)。
- 运行时环境层:包括Android核心库和Android运行时环境。
- Linux内核层:提供底层的硬件抽象层、内存管理、进程管理等功能。
3. 问题: Android应用是如何打包的?答案: Android应用通常使用APK(Android Package)格式进行打包。
APK文件是一个压缩文件,包含应用的代码、资源、资产、库和AndroidManifest.xml文件。
4. 问题:什么是Activity?答案: Activity是Android应用程序中的基本构建块,用于定义用户界面和用户交互。
每个Activity都是一个独立的屏幕,用户可以与之交互。
5. 问题:请解释Intent的概念。
答案: Intent是Android中用于请求操作的抽象描述符。
它可以用于启动Activity、启动服务或广播信息。
Intent可以显式地指定目标组件,也可以隐式地通过Intent Filter来匹配。
6. 问题:如何在Android中处理网络请求?答案:在Android中处理网络请求通常使用HTTP客户端库,如OkHttp或Retrofit。
这些库提供了简化的API来发送HTTP请求和接收响应。
7. 问题:解释Android中的Context对象。
答案: Context是Android中一个非常关键的类,它允许访问应用程序环境的全局信息。
Context可以用于启动Activity、获取资源、启动服务等。
1. 以下哪个不是Android操作系统的主要组件?A. ActivityB. ServiceC. ContentProviderD. SQLite数据库答案:D2. 以下哪个不是Android开发中常用的布局文件扩展名?A. xmlB. javaC. layoutD. res答案:B3. 以下哪个不是Android应用启动模式?A. StandardB. SingleTopC. SingleInstanceD. None答案:D4. 以下哪个不是Android应用中的生命周期方法?A. onCreate()B. onStart()C. onResume()D. onDestroy()答案:B5. 以下哪个不是Android开发中的线程管理类?A. HandlerB. ThreadPoolExecutorC. AsyncTaskD. BroadcastReceiver答案:D6. 以下哪个不是Android应用中的广播接收器?A. IntentReceiverB. BroadcastReceiverC. AlarmManagerD. Service答案:C7. 以下哪个不是Android应用中的文件存储方式?A. Internal StorageB. External StorageC. Shared PreferencesD. Database答案:D8. 以下哪个不是Android开发中的网络请求库?A. RetrofitB. VolleyC. OkHttpD. URLConnection答案:D9. 以下哪个不是Android应用中的动画类型?A. View AnimationB. Property AnimationC. Transition AnimationD. AnimationDrawable答案:C10. 以下哪个不是Android应用中的触摸事件回调方法?A. onTouchEvent()B. onLongClick()C. onClick()D. onDoubleClick()答案:D11. 以下哪个不是Android应用中的UI组件?A. ButtonB. EditTextC. ListViewD. Toast答案:D12. 以下哪个不是Android开发中的数据库操作类?A. SQLiteDatabaseB. SQLiteOpenHelperC. ContentResolverD. Cursor答案:C13. 以下哪个不是Android开发中的布局管理器?A. ConstraintLayoutB. LinearLayoutC. RelativeLayoutD. FrameLayout答案:D14. 以下哪个不是Android开发中的图片处理库?A. GlideB. PicassoC. FrescoD. Bitmap答案:D15. 以下哪个不是Android开发中的屏幕适配方法?A. dpB. spC. pxD. pt答案:D请注意,以上题目仅为基础选择题,实际面试中可能涉及更深入的技术问题。
第1篇第一部分:基础知识1. 安卓系统简介- 请简述安卓系统的起源和发展历程。
- 描述安卓系统的核心组件及其功能。
2. 安卓架构- 解释安卓的四个主要层:应用程序层、应用程序框架层、系统库层和Android运行时层。
- 说明每个层的作用以及它们之间的关系。
3. AndroidManifest.xml- 描述AndroidManifest.xml文件的作用。
- 列举在AndroidManifest.xml中需要定义的关键元素,并解释其意义。
4. 四大组件- 解释Activity、Service、BroadcastReceiver和ContentProvider的定义和用途。
- 说明它们的生命周期和启动模式。
5. Android应用生命周期- 描述Activity、Service、BroadcastReceiver和ContentProvider的生命周期方法。
- 解释onCreate、onStart、onResume、onPause、onStop和onDestroy等生命周期回调。
6. 布局文件- 解释布局文件的类型(如线性布局、相对布局、帧布局等)。
- 说明如何使用XML布局文件和Java布局文件。
7. 资源文件- 描述资源文件的作用和类型(如字符串、颜色、图片等)。
- 解释资源文件的加载和引用。
8. Intent- 解释Intent的概念及其在Android中的作用。
- 说明Intent的用途,包括启动Activity、Service、BroadcastReceiver和发送数据。
9. 权限- 描述Android中的权限系统。
- 列举一些常见的权限类型及其用途。
第二部分:进阶知识10. 多线程与并发- 解释多线程编程在Android中的重要性。
- 说明如何使用Thread、Handler、AsyncTask和Executor等实现多线程。
- 讨论线程同步和线程安全问题。
11. 内存管理- 描述Android的内存管理机制。
Android面试题-带答案1.介绍一下Android系统的体系结构答:应用层:android的应用程序通常涉及用户界面和交互。
应用框架层:UI组件、各种管理器等。
函数库层:系统C库、媒体库、webkit、SQLite等。
linux核心库:linux系统运行的组件。
2.Android的四大组件是哪些,它们的作用?答:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态,做很多持久化的事情,妥善管理生命周期及一些跳转逻辑service:后台服务于Activity,封装有一个完整的功能逻辑实现,接受上层指令,完成相关的事物,定义好需要接受的Intent提供同步和异步的接口Content Provider:是Android提供的第三方应用数据的访问方案,可以派生Content Provider类,对外提供数据,可以像数据库一样进行选择排序,屏蔽内部数据的存储细节,向外提供统一的借口模型,大大简化上层应用,对数据的整合提供了更方便的途径BroadCast Receiver:接受一种或者多种Intent作触发事件,接受相关消息,做一些简单处理,转换成一条Notification,统一了Android的事件广播模型3.请介绍下Android的数据存储方式。
答:一.SharedPreferences方式二.文件存储方式三.SQLite数据库方式四.内容提供器(Content provider)方式五. 网络存储方式4.说说mvc模式的原理答:mvc是model,view,controller的缩写,mvc包含三个部分:模型(model)对象:是应用程序的主体部分,所有的业务逻辑都应该写在该层。
视图(view)对象:是应用程序中负责生成用户界面的部分。
也是在整个mvc架构中用户唯一可以看到的一层,接收用户的输入,显示处理结果。
控制器(control)对象:是根据用户的输入,控制用户界面数据显示及更新model对象状态的部分,控制器更重要的一种导航功能,响应用户出发的相关事件,交给m层处理。
70道Android面试题70道Android面试题(大全)1.GC是什么? 为什么要有GC?GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。
2.XML包括哪些解释技术,区别是什么?DOM和SAXDOM将文档解析成一颗文档树,可在节点上进行遍历、增加、修改和删除。
一次性读入内存,对内存消耗大。
SAX至上而下解析文档,以事件进行驱动。
不会一次性读入内存,对内存消耗小,不能任意读取节点,并且不能对节点进行增加、修改和删除。
3.switch语句能否作用在byte上,能否作用在long上,能否作用在String上?switch能作用在byte、char、short和int上,JDK1.7后可以作用在String上。
4."=="和equals方法究竟有什么区别?==和equals都可以比较地址。
==是运算符,equals是方法,方法可以通过重写改变其行为,如String的equals就是比较字符串内容。
5.构造方法能否被重写和重载?构造方法不能被重写但是能被重载。
6.面向对象的特征有哪些?封装、继承、多态和抽象。
7.抽象类和接口的区别?1).抽象类是abstract class修饰,接口是interface修饰。
2).抽象类可以有任意类型的属性,接口只能有静态常量修饰的属性。
3).抽象类可以有普通方法和抽象法方法,接口的方法都是抽象方法。
4).抽象类和接口都不能实例化,但是抽象类有构造方法,接口没有构造方法。
5).抽象类只能单根继承,接口可以多重实现。
8.内部类可以引用它的包含类的成员吗?有没有什么限制?可以引用。
如果需要指定当前类时要用外部类.this来引用。
1.问题:什么是Android的生命周期?答案:Android的生命周期是指一个Android组件(如Activity、Service、Broadcast Receiver等)从创建到销毁的过程。
每个Android组件都有自己的生命周期,并且在其生命周期内会经过一系列的生命周期过程和回调方法。
2.问题:什么是Activity?答案:Activity是Android中一个重要的组件,它是用户界面层的一个基本单元,用于实现与用户交互的界面。
Activity代表一个单独的用户界面屏幕,并且在应用程序中可以包含多个Activity。
3.问题:什么是Service?答案:Service是Android中的一个后台服务组件,它可以在没有用户界面的情况下运行,用于执行一些需要长时间运行的任务。
Service可以在应用程序的任何地方使用,例如在后台播放音乐、下载文件等。
4.问题:什么是Broadcast Receiver?答案:Broadcast Receiver是Android中的一个广播接收器组件,用于接收来自系统或其他应用程序的广播消息。
当接收到广播消息时,Broadcast Receiver会执行相应的操作,例如显示通知、更新UI等。
5.问题:什么是AndroidManifest.xml文件?答案:AndroidManifest.xml是Android应用程序的配置文件,它包含了应用程序的基本信息和组件的声明。
这个文件是每个Android应用程序都必须包含的,它描述了应用程序的基本信息和组件之间的关系。
6.问题:什么是Fragment?答案:Fragment是Android中的一个UI片段,它代表应用程序中的一个部分UI。
Fragment可以独立于Activity存在,并且可以在不同的Activity之间共享。
Fragment可以包含布局、数据和其他UI组件,并且可以独立于Activity进行管理和复用。
第1篇第一部分:Android基础1. Android开发环境搭建- 请简要描述Android开发环境搭建的步骤,包括安装Android Studio、配置SDK、模拟器等。
2. Android系统架构- 请简述Android系统的架构,包括四大组件(Activity、Service、BroadcastReceiver、ContentProvider)的作用和相互关系。
3. Activity生命周期- 请描述Activity的生命周期方法,包括onCreate、onStart、onResume、onPause、onStop、onDestroy等,并说明它们在何时被调用。
4. Intent- 请解释Intent的概念和作用,并说明如何创建和使用Intent进行组件间的通信。
5. Service- 请描述Service的生命周期方法,并说明如何创建一个前台Service和后台Service。
6. BroadcastReceiver- 请解释BroadcastReceiver的概念,并说明如何注册、发送和接收广播。
7. ContentProvider- 请解释ContentProvider的概念,并说明如何实现数据的共享。
8. AndroidManifest.xml- 请解释AndroidManifest.xml文件的作用,并列举其中需要配置的重要元素。
9. Android布局- 请描述几种常见的布局方式,如线性布局(LinearLayout)、相对布局(RelativeLayout)、帧布局(FrameLayout)等。
10. Android资源- 请解释Android资源的概念,并说明如何管理字符串资源、图片资源等。
第二部分:Java基础1. Java基本语法- 请简述Java的基本语法,包括变量、数据类型、运算符等。
2. 面向对象编程- 请解释面向对象编程的概念,并说明如何实现类的封装、继承和多态。
71道Android开发面试题目。
精选哦!![复制链接]本帖最后由 anzhuo 于 2012-1-11 11:21 编辑打包下载:Android面试题带答案.doc(108.5 KB, 下载次数: 1374)Android面试题1. 下列哪些语句关于内存回收的说明是正确的? (b ) A、程序员必须创建一个线程来释放内存B、内存回收程序负责释放无用内存C、内存回收程序允许程序员直接释放内存D、内存回收程序可以在指定的时间释放内存对象2. 下面异常是属于Runtime Exception 的是(abcd)(多选) A、ArithmeticExceptionB、IllegalArgumentExceptionC、NullPointerExceptionD、BufferUnderflowException3. Math.round(11.5)等于多少(). Math.round(-11.5)等于多少(c). c A、11 ,-11 B、11 ,-12 C、12 ,-11 D、12 ,-124. 下列程序段的输出结果是:(b )void complicatedexpression_r(){int x=20, y=30;boolean b;b=x<50&&y<60||x<50&&y<-60 x-y="">60||x<-50 y-br="" style="font-size:14px;font-style:normal;font-weight:700;f ont-family:Tahoma,;" microsoft="" yahei="" simsuncolor="" /> System.out.println(b);}A、trueB、falseC、1D、011.activity5. 对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行(d) A、onPause() B、onCreate() C、 onResume() D、onStart()6. Intent传递数据时,下列的数据类型哪些可以被传递(abcd)(多选)A、Serializable B、charsequence C、ParcelableD、Bundle7. android中下列属于Intent的作用的是(c) A、实现应用程序间的数据共享B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带D、处理一个应用程序整体性的工作8. 下列属于SAX解析xml文件的优点的是(b) A、将整个文档树在内存中,便于操作,支持删除,修改,重新排列等多种功能B、不用事先调入整个文档,占用资源少C、整个文档调入内存,浪费时间和空间D、不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会消失9. 下面的对自定style的方式正确的是(a) A、B、C、fill_parentD、fill_parent10. 在android中使用Menu时可能需要重写的方法有(ac)。
(多选) A、onCreateOptionsMenu()B、onCreateMenu()C、onOptionsItemSelected()D、onItemSelected()11. 在SQL Server Management Studio 中运行下列T-SQL 语句,其输出值(c)。
SELECT @@IDENTITYA、可能为0.1B、可能为3C、不可能为-100D、肯定为012. 在SQL Server 2005中运行如下T-SQL语句,假定SALES 表中有多行数据,执行查询之后的结果是(d)。
BEGIN TRANSACTION AUpdate SALES Set qty=30 WHERE qty<30 br="" style="font-size:14px;font-style:normal;font-weight:400;f ont-family:Tahoma,;" microsoft="" yahei="" simsuncolor="" /> BEGIN TRANSACTION BUpdate SALES Set qty=40 WHEREqty<40 br="" style="font-size:14px;font-style:normal;font-weight:400;f ont-family:Tahoma,;" microsoft="" yahei="" simsuncolor="" /> Update SALES Set qty=50 WHEREqty<50 br="" style="font-size:14px;font-style:normal;font-weight:400;f ont-family:Tahoma,;" microsoft="" yahei="" simsuncolor="" /> Update SALES Set qty=60 WHEREqty<60 br="" style="font-size:14px;font-style:normal;font-weight:400;f ont-family:Tahoma,;" microsoft="" yahei="" simsuncolor="" /> COMMIT TRANSACTION BCOMMIT TRANSACTION AA、SALES表中qty列最小值大于等于30B、SALES表中qty列最小值大于等于40C、SALES表中qty列的数据全部为50D、SALES表中qty列最小值大于等于6013. 在android中使用SQLiteOpenHelper这个辅助类时,可以生成一个数据库,并可以对数据库版本进行管理的方法可以是(ab) A、getWriteableDatabase()B、getReadableDatabase()C、getDatabase()D、getAbleDatabase()14. android 关于service生命周期的onCreate()和onStart()说法正确的是(ad)(多选题) A、当第一次启动的时候先后调用onCreate()和onStart()方法B、当第一次启动的时候只会调用onCreate()方法C、如果service已经启动,将先后调用onCreate()和onStart()方法D、如果service已经启动,只会执行onStart()方法,不在执行onCreate()方法15. 下面是属于GLSurFaceView特性的是(abc)(多选) A、管理一个surface,这个surface就是一块特殊的内存,能直接排版到android的视图view上。
B、管理一个EGL display,它能让opengl把内容渲染到上述的surface上。
C、让渲染器在独立的线程里运作,和UI线程分离。
D、可以直接从内存或者DMA等硬件接口取得图像数据16. 下面在AndroidManifest.xml文件中注册BroadcastReceiver方式正确的(a) A、android:name="android.provider.action.NewBroad"/<B、android:name="android.provider.action.NewBroad"/<C、android:name="android.provider.action.NewBroad"/<D、android:name="android.provider.action.NewBroad"/<17. 关于ContenValues类说法正确的是(a)A、他和Hashtable 比较类似,也是负责存储一些名值对,但是他存储的名值对当中的名是String类型,而值都是基本类型B、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的名是任意类型,而值都是基本类型C、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的名,可以为空,而值都是String类型D、他和Hashtable比较类似,也是负责存储一些名值对,但是他存储的名值对当中的名是String类型,而值也是String类型18. 我们都知道Hanlder是线程与Activity通信的桥梁,如果线程处理不当,你的机器就会变得越慢,那么线程销毁的方法是(a)A、onDestroy()B、onClear()C、onFinish()D、onStop()19. 下面退出Activity错误的方法是(c) A、finish()B、抛异常强制退出C、System.exit()D、onStop()20. 下面属于android的动画分类的有(ab)(多项) A、TweenB、FrameC、DrawD、Animation21. 下面关于Android dvm的进程和Linux的进程,应用程序的进程说法正确的是(d) A、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM都是在Linux中的一个进程,所以说可以认为是同一个概念.B、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念.C、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例.而每一个DVM不一定都是在Linux 中的一个进程,所以说不是一个概念.D、DVM指dalivk的虚拟机.每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的 Dalvik虚拟机实例.而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念.22. Android项目工程下面的assets目录的作用是什么b A、放置应用到的图片资源。