1001班Android试题答案(1)

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

一、选择题

1 2 3 4 5 6 7 8 9

D ABCD C B A AC AB AD ABC

10 11 12 13 14 15 16 17 18

A A A C A

B D B A ABCD

二、填空题

1.Activity,Broadcast,Service,ContentProvide

2.startService ,bindService

3.onRestart(),onResume(),onPause(),onStop()

4.SharedPreferences存储,文件存储,SQLite存储,ContentProvider,网络存储

5.startActivityResult()

三、简答题(3题,每题6分,共18分)

1.在android中,请简述jni的调用过程。(6分)

答:1)安装和下载Cygwin,下载Android NDK

2)在ndk项目中JNI接口的设计

3)使用C/C++实现本地方法

4)JNI生成动态链接库.so文件

5)将动态链接库复制到java工程,在java工程中调用,运行java工程即可

2.Android为什么要设计4大组件,他们之间的联系,不设计行不行?(6分)

答:主要是为了实现MVC模式,然而java中最难的模式也是这个,很少有产品能将这个模式做得很好

3.简述Android应用程序结构是哪些?(6分)

答:Android应用程序结构是:

Linux Kernel(Linux内核)、Libraries(系统运行库或者是c/c++核心库)、Application Framework(开发框架包)、Applications (核心应用程序)

4. 请继承SQLiteOpenHelper实现:(10分)

1).创建一个版本为1的“diaryOpenHelper.db”的数据库,

2).同时创建一个“diary”表(包含一个_id主键并自增长,topic字符型100 长度,content字符型1000长度)

3).在数据库版本变化时请删除diary表,并重新创建出diary表。

public class DBHelper extends SQLiteOpenHelper {

public final static String DA TABASENAME = "diaryOpenHelper.db";

public final static int DATABASEVERSION = 1;

//创建数据库

public DBHelper(Context context,String name,CursorFactory factory,int version)

{

super(context, name, factory, version);

}

//创建表等机构性文件

public void onCreate(SQLiteDatabase db)

{

String sql ="create table diary"+

"("+

"_id integer primary key autoincrement,"+

"topic varchar(100),"+

"content varchar(1000)"+

")";

db.execSQL(sql);

}

//若数据库版本有更新,则调用此方法

public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)

{

String sql = "drop table if exists diary";

db.execSQL(sql);

this.onCreate(db);

}

}

四、调用与被调用:我们的通信使者Intent(16分)

要说Intent了,Intent就是这个这个意图,应用程序间Intent进行交流,打个电话啦,来个

电话啦都会发Intent, 这个是Android架构的松耦合的精髓部分,大大提高了组件的复用性,比如你要在你的应用程序中点击按钮,给某人打电话,很简单啊,看下代码先:

Java代码

Intent intent = new Intent();

intent.setAction(Intent.ACTION_CALL);

intent.setData(Uri.parse("tel:" + number));

startActivity(intent);

扔出这样一个意图,系统看到了你的意图就唤醒了电话拨号程序,打出来电话。什么读联系人,发短信啊,邮件啊,统统只需要扔出intent就好了,这个部分设计地确实很好啊。那Intent通过什么来告诉系统需要谁来接受他呢?

通常使用Intent有两种方法,第一种是直接说明需要哪一个类来接收代码如下:

Java代码

Intent intent = new Intent(this, MyActivity.class);

intent.getExtras().putString("id", "1");

startActivity(intent);

Intent intent = new Intent(this,

MyActivity.class);intent.getExtras().putString("id", "1");tartActivity(intent);

第一种方式很明显,直接指定了MyActivity为接受者,并且传了一些数据给MyActivity,

在MyActivity里可以用getIntent()来的到这个intent和数据。

第二种就需要先看一下AndroidMenifest中的intentfilter的配置了

Xml代码

android:name="android.intent.action.VIEW"

/>

android:value="android.intent.action.EDIT"

/>

android:value="android.intent.action.PICK"

/>

android:name="android.intent.category.DEFAULT"

/>

android:mimeType="vnd.android.cursor.dir/vnd.google.note"

/>

这里面配置用到了action, data, category这些东西,那么聪明的你一定想到intent里也会有这些东西,然后一匹配不就找到接收者了吗?

action其实就是一个意图的字符串名称。

上面这段intent-filter的配置文件说明了这个Activity可以接受不同的 Action,当然相应的程序逻辑也不一样咯,提一下那个 mimeType,他是在ContentProvider里定义的,你要是自己实现一个ContentProvider就知道了,必须指定 mimeType才能让数据被别人使用。不知道原理说明白没,总结一句,就是你调用别的界面不是直接new那个界面,而是通过扔出一个intent,让系统帮你去调用那个界面,这样就多么松藕合啊,而且符合了生命周期

被系统管理的原则。

想知道category都有啥,Android为你预先定制好的action都有啥等等,请亲自访问官方链接Intent

ps:想知道怎么调用系统应用程序的同学,可以仔细看一下你的logcat,每次运行一个程序的时候是不是有一些信息比如:

Starting activity: Intent

{ action=android.intent.action.MAINcategories={UNCHER}

相关文档
最新文档