一、选择题
1、以下那个控件可以用来显示图片D
a)ImageView
b)TextView
c)Button
d)以上都可以
2、针对ListView组件描述错误的是C
a)ListView自带滚动面板功能,如果数据超出屏幕范围,可以自动滚动
b)ListView在使用时,必须通过Adapter来加入数据
c)ListView如果想改变显示内容,只需要调整对应的List集合中的数据即可。
d)ListView中可以通过OnItemClickListener来完成针对某一项目的点击监听
3、Android在退出程序时,想保存一些信息,可以在哪个方法中完成?
a)onCreate
b)onStart
c)onStop
d)onDestory
4、Android开发中常用的数据库是:C
a)SQL Server
b)MySQL
c)SQLite
d)Oracle
5、以下调整宽度和高度的属性,哪个不是Android系统提供的?C
a)Match_parent
b)Wrap_content
c)Fill_content
d)Fill_parent
6、从其他应用中读取共享的数据库数据,需要用到的是query方法,返回Cursor数据,
那么这个方法是哪个对象的方法?B
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)Canvas
c)BufferedImage
d)Drawable
10、以下属性中哪个属性是LinearLayout拥有但RelativeLayout没有的属性C
a)android:layout_width
b)android:layout_height
c)android:layout_weight
d)android:background
二、简答题
1、请描述Activity的生命周期流程
答:activity的生命周期方法有:onCreate()、onStart()、onReStart()、onResume()、onPause()、onStop()、onDestory();
可见生命周期:从onStart()直到系统调用onStop()
前台生命周期:从onResume()直到系统调用onPause()
2、列举Android开发中用到的常用权限,以及编写哪些功能时会用到这些权限(写出
权限的作用即可,不需要写权限名)
(1)网络相关的:
android.permission.INTERNET 允许程序打开网络套接字
android.permission.CHANGE_NETWORK_STATE 允许程序改变网络连接状态
android.permission.ACCESS_NETWORK_STATE 允许程序访问有关GSM网络信息
(2)位置相关
android.permission.WRITE_GSERVICES
允许程序修改Google服务地图(Allows an application to modify the Google service map. )
(3)wifi相关
android.permission.ACCESS_COARSE_LOCATION 允许一个程序访问CellID或WiFi热点来获取粗略的位置
android.permission.ACCESS_WIFI_STATE 允许程序访问Wi-Fi网络状态信息
android.permission.CHANGE_WIFI_STATE 允许程序改变Wi-Fi连接状态
(4)蓝牙相关
android.permission.BLUETOOTH 允许程序连接到已配对的蓝牙设备
android.permission.BLUETOOTH_ADMIN 允许程序发现和配对蓝牙设备
(4)广播相关
android.permission.BROADCAST_PACKAGE_REMOVED
允许程序广播一个提示消息在一个应用程序包已经移除后(Allows an application to broadcast a notification that an application package has been removed) android.permission.BROADCAST_STICKY
允许一个程序广播常用intents(Allows an application to broadcast sticky intents)
android.permission.RECEIVE_BOOT_COMPLETED
允许一个程序接收到ACTION_BOOT_COMPLETED广播在系统完成启动(Allows an application to receive the ACTION_BOOT_COMPLETED that is broadcast after the system finishes booting. )
(5)短信相关
android.permission.READ_SMS
允许程序读取短信息(Allows an application to read SMS messages.)
android.permission.RECEIVE_SMS
允许程序监控一个将收到短信息,记录或处理(Allows an application to monitor incoming SMS messages, to record or perform processing on them.)
android.permission.SEND_SMS
允许程序发送SMS短信(Allows an application to send SMS messages)
android.permission.WRITE_SMS
允许程序写短信(Allows an application to write SMS messages)
android.permission.RECEIVE_MMS
允许一个程序监控将收到MMS彩信,记录或处理(Allows an application to monitor incoming MMS messages, to record or perform processing on them. ) android.permission.RECEIVE_WAP_PUSH
允许程序监控将收到WAP PUSH信息(Allows an application to monitor incoming
WAP push messages. )
(6)拨打电话相关
android.permission.CALL_PHONE
允许一个程序初始化一个电话拨号不需通过拨号用户界面需要用户确认(Allows an application to initiate a phone call without going through the Dialer user interface for the user to confirm the call being placed.)
android.permission.CALL_PRIVILEGED
允许一个程序拨打任何号码,包含紧急号码无需通过拨号用户界面需要用户确认(Allows an application to call any phone number, including emergency numbers, without going through the Dialer user interface for the user to confirm the call being placed)
android.permission.PROCESS_OUTGOING_CALLS
允许程序监视、修改有关播出电话(Allows an application to monitor, modify, or abort outgoing calls)
android.permission.READ_CONTACTS
允许程序读取用户联系人数据(Allows an application to read the user’s contacts data.)
android.permission.WRITE_CONTACTS
允许程序写入但不读取用户联系人数据(Allows an application to write (but not read) the user’s contacts data. )
4、一个应用长时间没有响应(Application Not Response)主要是由于什么原因引起的,
怎样解决(提示:线程)
可能触发ANR的情况
1. 长时间的I/O处理,比如读写大文件,网络访问时造成的阻塞。
2. 执行耗时的运算,Android默认为超过5000ms即5秒开始弹出ANR窗口,
某些应用可能首次执行时没有缓存十分耗时,可以通过Splash播放闪屏Logo等方式来延缓加载
3. Service和appWidget中也要注意多线程的使用,除非它和Activity工作在
不同的进程。
避免ANR的方法
1. 单独开工作者线程,通过独立的Thread或使用类似AsyncTask的方式来处
理耗时的内容。
2. 耗时的操作尽量分段处理,使用类似状态机的方法,类似Symbian的活动
对象将一个复杂的事情,分段执行。
3. UI线程中不要处理过多的内容,比如将一个5MB的文本,让TextView去
setText,要知道这种UI操作,没有什么好方法去解决的,所以Android123提示,遇到UI中需要执行复杂的操作,可以参考上面2提到的分段处理方式。
5、列出你开发中使用到的常用布局,并说明这些布局的特点
Android布局是应用界面开发的重要一环,在Android中,共有五种布局方式,分别是:FrameLayout(框架布局),LinearLayout(线性布局),AbsoluteLayout(绝对布局,RelativeLayout(相对布局),TableLayout(表格布局)
i.FrameLayout:这个布局可以看成是墙角堆东西,有一个四方的矩形的左
上角墙角,我们放第一个东西,再放一个,那就放在原来的位置的上面,
这样依次的放,会盖住原来的东西。这个布局比较简单,也只能放一点比
较简单的东西。
ii.LinearLayout:线性布局从外框上可以理解为一个div,他首先是一个一个从上往下罗列在屏幕上。每一个LinearLayout里面又可分为垂直布局和水
平布局。
iii.RelativeLayout:相对布局可以理解为某一个元素为参照物,来定位的布局方式,主要属性有:相对于某一个元素和相对于父元素的地方。
iv.AbsoluteLayout:绝对布局犹如指定了absolute属性,用X、Y坐标来指定元素的位置,这种布局方式比较简单,但是在垂直随便切换时,往往会出
问题,而且多个元素的时候,计算比较麻烦。
v.TableLayout:表格布局类似于Html里面的Table,每一个TableLayout里面有表格行TableRow,TableRow里面可以具体定义每一个元素,设定他
的对齐方式。
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) layout:布局配置,这里放入都是xml文件,通过XML描述界面的显
示布局。
i. 一般来说,一个Activity肯定要对应一个xml布局文件。
c) menu:放入点菜单键后弹出的菜单内容,现在很少使用。
d) values:放入xml文件,用来配置一些固定的数值或文字的。
e) raw:放入其他文件,可以使用IO流读取,一般放入txt
f) anim:动画配置文件
7)AndroidManifest.xml:项目的核心配置文件,重要性等同于Web项目中的web.xml文件。
三、编程题
1、请继承SQLiteOpenHelper,编写一个数据库连接类,完成以下功能
创建一个版本为1,名称为“test.db”的数据库
在onCreate方法中创建一张名称为question的表,表中包含以下字段
id(主键,数字,自增长),title(文本),answer(文本)
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
publicclass DataBaseConnection extends SQLiteOpenHelper {
public DataBaseConnection(Context ctx){
super(ctx,"test.db",null,1);
}
public DataBaseConnection(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
publicvoid onCreate(SQLiteDatabase db) {
String sql="CREATE TABLE question("+
"id Integer primary key,"+
"title text not null"+
"answer text not null"
");";
db.execSQL(sql);
}
@Override
publicvoid onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub
}
}
2、现有两个Activity,分别为QuestionListActivity和DetailActivity,现在要从
QuestionListActivity中切换界面到DetailActivity,并传递一个名称为id,值为1的参
数,请编写代码实现。
QuestionListActivity 里面传参
int id =1;
Intent in=new Intent(QuestionListActivity.this,DetailActivity.class);
in.putExtra("id",id);
startActivity(in);
DetailActivity接收参数
Int id;
Id=getIntent().getStringExtra(“id”);