北航-Android移动开发 - 试卷及答案

更新时间:2023-11-26 01:55:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、 选择题

1、 以下那个控件可以用来显示图片

a) ImageView b) TextView c) Button

d) 以上都可以

2、 针对ListView组件描述错误的是

a) ListView自带滚动面板功能,如果数据超出屏幕范围,可以自动滚动 b) ListView在使用时,必须通过Adapter来加入数据

c) ListView如果想改变显示内容,只需要调整对应的List集合中的数据即可。 d) ListView中可以通过OnItemClickListener来完成针对某一项目的点击监听 3、 Android在退出程序时,想保存一些信息,可以在哪个方法中完成?

a) onCreate b) onStart c) onStop d) onDestory 4、 Android开发中常用的数据库是:

a) SQL Server b) MySQL c) SQLite d) Oracle

5、 以下调整宽度和高度的属性,哪个不是Android系统提供的?

a) Match_parent b) Wrap_content c) Fill_content d) Fill_parent

6、 从其他应用中读取共享的数据库数据,需要用到的是query方法,返回Cursor数据,

那么这个方法是哪个对象的方法? a) ContentProvider b) ContentResolver c) SQLiteOpenHelper d) SQLiteDataBase 7、 下列不属于Android布局的是

a) LinearLayout b) RelativeLayout c) AnnotationLayout d) FrameLayout

8、 Android项目中assets目录的作用是什么?

a) 放置字符串,颜色等信息 b) 放置图片资源

c) 放置较大的文件资源 d) 放置界面布局配置

9、 以下哪个对象是自定义组件中用来绘制内容的对象

a) Bitmap

b) c) d) 10、

a) b) c) d) Canvas

BufferedImage Drawable

以下属性中哪个属性是LinearLayout拥有但RelativeLayout没有的属性 android:layout_width android:layout_height android:layout_weight android:background

二、 简答题

1、 请描述Activity的生命周期流程

使用一张流程图来查看整个Activity的生命周期。

(1).启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。

(2).当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。

(3)当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。

(4).当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。

(5)用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。

(6).当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。

(7).用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。

2、 列举Android开发中用到的常用权限,以及编写哪些功能时会用到这些权限(写出

权限的作用即可,不需要写权限名)

android.permission.READ_CALL_LOG:允许应用读取用户的通话记录

android.permission.READ_CONTACTS:允许应用读取用户的联系人数据 android.permission.WRITE_CONTACTS: 允许应用写(非读)用户的联系人数据

android.permission.CALL_PHONE-允许应用启动一个用户确认电话被拨打,而不是通过拨打电话的用户界面的拨打程序.

android.permission.WRITE_EXTERNAL_STORAGE:允许应用写(非读)用户的外部存储器 android.permission.SEND_SMS允许应用发送短信

3、 比较Android与IOS系统,列举Android系统的优缺点 优点 Android iOS 开放性(Open Source),支持的厂商很多,可整个生态系统比较好。开发者比较容易从AP以进行厂商软件和硬件定制 P Store获益,大家愿意付费买应用,让开发者更有开发动力。 内置丰富的google服务,当然现在很多都被苹果对iOS可以完全掌控,可以让产品体验追厂商定制或渠道定制了 平台发展迅速,市场应用丰富 产品定价范围宽,适合各种人群 求极致。 应用整体水平较高,用户都比较喜欢 封闭,只有苹果一家在玩,难于扩大市场。 大部分好的应用都需要付费。 产品定价较高,适合较高消费水平人群 缺点 版本过多,升级过快 由于开原性,很容易被复制(山寨) 用户体验不一致 由于平台的开放性,用户信息和安全等方面存开发门槛较高,需要熟悉Objective C/C/C++在明显的隐患 语言和苹果开发环境。 第三方应用商店很多,很杂,选择上导致存在 一定的难度,应用品质也相对较差 第三方软件开发者盈利模式相对有限,盗版严 重

4、 一个应用长时间没有响应(Application Not Response)主要是由于什么原因引起的,

怎样解决(提示:线程)

Android应用程序通常是运行在一个单独的线程(例如,main)里。这意味着你的应用程序所做的事情如果在主线程里占用了太长的时间的话,就会引发ANR对话框,因为你的应用程序并没有给自己机会来处理输入事件或者Intent广播。因此,运行在主线程里的任何方法都尽可能少做事情。

可能处于加载大量数据中,并且没有使用多线程,界面上无法显示数据,导致不响应。 解决方案:采用多线程,将加载数据的功能放在thread,通过handler提醒界面数据更改

5、 列出你开发中使用到的常用布局,并说明这些布局的特点

View的布局方式的类,都是直接或间接继承自ViewGroup类,如下图所示:

我开发中使用到的常用布局有

1) LinearLayout:线性布局

其特点是将多个组件穿到一条线上显示。可以通过属性调整其横向还是纵向摆放。如果是纵向排列,那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为多少;如果是横向摆放,那么将是一个单行N列的结构。android:layout_weight描述该子元素在剩余空间中占有的大小比例

2) Relative Layout:相对布局

其特点是允许子元素指定他们相对于其它元素或者父元素的位置(例如底部对齐,或中间偏左), 例如android:layout_below, android:layout_above, android:layout_toLeftOf,

android:layout_alignTop, android:layout_centerVertical等。注意在指定位置关系时,引用的id必须在引用之前,先被定义,否则将出现异常。可以实现多重界面覆盖

3) TableLayout,表格布局

其特点是适用于N行N列的布局格式。一个TableLayout由许多TableRow组成,一个 TableRow就代表TableLayout中的一行。HTML中的表格布局非常类似,TableRow 就像HTML表格的标记。TableRow是LinearLayout的子类,ablelLayout并不需要明确地声明包含多少行、多少列,而是通过TableRow,以及其他组件来控制表格的行数和列数, TableRow也是容器,因此可以向TableRow里面添加其他组件,没添加一个组件该表格就增加一列。如果想TableLayout里面添加组件,那么该组件就直接占用一行。在表格布局中,列的宽度由该列中最宽的单元格决定,整个表格布局的宽度取决于父容器的宽度(默认是占满父容器本身)。TableLayout继承了LinearLayout

4)FrameLayout 帧布局

其特点是它是最简单的布局格式,他可以防止任何空件,但是都只能罗列到左上角,不能进行

复杂的布局

5)AbsoluteLayout 绝对布局

其特点是可以让子元素指定准确的x/y坐标值,并显示在屏幕上。AbsoluteLayout 没有页边框,允许元素之间互相重叠(尽管不推荐)。他是绝对坐标,所以在实际中不提倡使用。

6、 描述一个Android项目开发时,整个项目中应该包含哪些目录和核心文件,这些目录和文件的主要作用是什么?

在Android项目中包含以下目录:

1) src:源代码目录,保存着所有的java源程序

2) gen:自动生成的java代码,会根据项目中加入的配置和资源来生成,一定不要手工修改 3) assets:放入一些相对比较大的文件,以供程序读取。

a)

一般建议1Mb以上的文件就放到该目录下。

4) bin:编译后的文件所在的目录,里面包含了apk文件 5) libs:支持类库。

6) res:资源目录,大部分要用到的文件,需要放到此目录下。

a)

drawable-xxxx:图片,所有在应用中需要用到的图片,要放到这些目录中 i. –xxxx:表示对应的分辨率级别。

ii. 这里的文件名称必须符合java命名规范,而且不能有大写 b) c) d) e) f)

layout:布局配置,这里放入都是xml文件,通过XML描述界面的显示布局。 i. 一般来说,一个Activity肯定要对应一个xml布局文件。 menu:放入点菜单键后弹出的菜单内容,现在很少使用。 values:放入xml文件,用来配置一些固定的数值或文字的。 raw:放入其他文件,可以使用IO流读取,一般放入txt anim:动画配置文件

Android项目的核心文件:

AndroidManifest.xml:项目的核心文件,标示这个android项目在整个平台的唯一

性、版本、activity的标示以及权限等信息,重要性等同于Web项目中的web.xml文

件。

三、编程题

1、请继承SQLiteOpenHelper,编写一个数据库连接类,完成以下功能 创建一个版本为1,名称为“test.db”的数据库

在onCreate方法中创建一张名称为question的表,表中包含以下字段 id(主键,数字,自增长),title(文本),answer(文本)

publicclass DataBaseConnection extends SQLiteOpenHelper { }

// 初始化固定的值

privatestaticfinalintDBVERSION = 1;

privatestaticfinal String DBNAME = \; // 为了方便使用,这里自己完成一个构造方法 public DataBaseConnection(Context ctx) { super(ctx,DBNAME, null, DBVERSION); }

public DataBaseConnection(Context context, String name, CursorFactory factory, int version) { super(context, name, factory, version); }

@Override

publicvoid onCreate(SQLiteDatabase conn) {

// 当第一次运行程序时, 需要在这里直接建立出数据库中的表 String sql = \ +

\ integer primary key,\ + \ text ,\ + \text \ + \ ;

// 执行这条sql

conn.execSQL(sql); }

2、现有两个Activity,分别为QuestionListActivity和DetailActivity,现在要从QuestionListActivity中切换界面到DetailActivity,并传递一个名称为id,值为1的参数,请编写代码实现。

public class QuestionListActivityextends Activity { @Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main); //创建线程

Thread t=new Thread(){ @Override

public void run() { try {

Thread.sleep(2000);

// 建立Intent对象,设置要从哪儿,切换到哪儿

Intent in = new Intent(QuestionListActivity.this, DetailActivity.class);

// 设置要传递的参数

in.putExtra(\ startActivity(in); finish();

} catch (InterruptedException e) { e.printStackTrace(); } } }; t.start(); } }

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 接收:

public class DetailActivityextends Activity { @Override

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

setContentView(R.layout.activity_second);

// 接收上一个Activity传入的参数

String param = getIntent().getStringExtra(\

Toast.makeText(this, \接收到的参数为: \Toast.LENGTH_LONG).show(); } }

补充:

1、 列出你开发中使用到的常用组件

TextView - 文本显示控件 EditView - 文本编辑框 Button - 按钮控件

ImageButton - 图片按钮控件 ImageView - 图片显示控件 CheckBox - 复选框控件 RadioButton - 单选框控件 Spinner-下拉列表

DatePicker-日期选择控件 TimePicker-时间选择控件 ProgressBar-进度条控件 SeekBar-可拖动的进度条控件 VideoView - 视频播放控件 RatingBar - 评分控件 ScrollView - 滚动条控件 GridView(网格控件) ListView(列表控件)

ExpandableList(支持展开/收缩功能的列表控件

AutoCompleteTextView-支持自动完成功能的可编辑文本控件

MultiAutoCompleteTextView-支持自动完成功能的可编辑文本控件,允许输入多值【多值之间会自动地用指定的分隔符分开】 ZoomControls - 放大/缩小按钮控件 Include - 整合控件 WebView - 浏览器控件 Tab - 选项卡控件

Chronometer - 计时器控件

TextSwitcher(文字转换器控件(改变文字时增加一些动画效果) Gallery(缩略图浏览器控件)

ImageSwitcher(图片转换器控件(改变图片时增加一些动画效果)

2、常用的输入和输出流(转换流和缓冲流)

BufferedReader reader = new BufferedReader(new InputStreamReader(a .getAssets().open(\ + allTxtFile[i]), \));

1. 抽象类InputStream\\OutputStream 方法read(), write(), close()

流结束的判断方法 read()的返回值为-1, readLine()返回值为null 2. 文件读写类FileInputStrea\\FileOutputStream

方法: read()方法将文件读入一个byte类型的数组,其数组长度可由in.avalialbe()方法获得

read(byte[], int off, int len) off指从流中读入的字节所放入数组中的开始数字, len指读入长度

write(byte[], int off, int len) off指定数组的起始位置,从该位置起的字节写入流中,len指写入长度

byte数组的最大长度为60M,如超出则需要将文件分段

还没写好。。。。。注意:

读取SD卡的方法

Activity中怎样设置界面。 Activity的作用

本文来源:https://www.bwwdw.com/article/a6kt.html

Top