Android面试总结

  前一阵子在校期间,面试了几家公司的Android开发的岗位,对几位面试官提问率比较高一些问题做了个总结,在电脑里沉睡好多天了,今天刚把博客搬家到博客园,是时候发出来了。

1.android系统的架构

应用程序层-应用程序框架层-系统运行库层-linux核心层

解释:

Linux核心层:负责硬件的驱动程序,网络、电源、系统安全以及内存管理等功能。

运行库层:即c/c++函数库部分,大多数都是开放源代码的函数库

应用程序框架层:存放一些api

2.android常用的五种布局

FrameLayout(框架):元素置于左上区域,元素会重叠覆盖

LinearLayout(线性):以水平或垂直方式定位内部空间,默认垂直

AbsoluteLayout(绝对):坐标轴布局,layout_x, layout_y

RelativeLayout(相对):相对布局,根据另外一个组件或者顶层父组件确定下一个组件位置。

TableLayout(表格):TableRow代表一行。

3.五种存储方式:

(1)SharedPreferences存储数据,用来存储简单的配置信息,采用XML格式将数据存储到设备中。缺点:只能在同一个包内使用

(2)文件存储数据;常用,I/O,openFielInput(), openFileOutput()方法读取设备上的文件

(3)SQLiteandroid自带的标准数据库,支持sql语句,轻量级嵌入式数据库。

(4)ContentProvider存储数据;用于程序之间进行数据交换。

(5)网络存储数据

4.Activity, Intent, ContentProvider, Service各有什么区别

a) Activity活动,是最基本的android应用程序组件,每一个屏幕都是一个Activity

b) Intent 意图:描述应用想干什么。最重要的部分是动作和动作对应的数据。

c) ContentProvider:内容提供器:当你想将你的应用数据和其他应用共享时,它起作用。

d) Service:服务,具有一段较长生命周期,且没有用户界面的程序。

5.Adapter类型:

ArrayAdapter

BaseAdapter

CursorAdapter

HeaderViewListAdapter

ListAdapter

ResourceCursorAdapter

SimpleAdapter

SimpleCursorAdapter

SpinnerAdapter

WrapperListAdapter

6.如何启动Service,如何停用ServicebindServicestartService的区别

第一步:集成Service

Public class SMSService extends Service{}

第二步:在AndroidManifest.xml文件中的节点里对服务进行配置

服务不能自己运行,两种启动方式:bindService startService

startService()启用服务,调用者与服务直接没有联系。即时调用者退出了,服务仍然运行。

Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate方法,接着调用onStart()。如果调用startService()方法前服务已经被创建,多次调用startService()不会导致多次创建服务,但会导致多次调用onStart()方法。采用startService()启动的服务,只能用Context.stopService()结束,服务结束时会调用onDestroy()

bindService():调用者与服务绑定在了一起,调用者退出,服务终止。

采用bindService()启动服务,在服务未被创建时,系统会先调用服务的onCreate()

结合调用onBind().这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind(),接着onDestroy()。如果用bindService()前服务以及被绑定,多次调用bindService()不会多次创建服务或绑定。如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService(),调用该方法也会导致系统调用服务的onUnbind()-->onDestroy();

7.Android工程目录结构

一般来说包含以下:

1src

Java源代码在此

2gen

编译器自动生成的一些java代码

3Android 4.2

Android平台文件夹

4Android Dependencies

该目录在ADT1.6后出现,是ADT第三方库新的引用形式,当我们引用第三方库时,将文件拷贝到libs文件夹下,ADT就会自动完成对该库的引用

5bin

该目录时编译之后的文件以及一些中间文件的存放目录,ADT先将工程编译成Android JAVA虚拟机(Dalvik Virtual Machine)文件classes.dex.最后将该classes.dex封装成apk包。

6libs

存放第三方类库

7res

存放项目中的资源文件

-drawable-hdpi; drawable-mdpi, drawable-xhdpi

-layout:界面布局文件

-menu:存放定义了应用程序菜单资源的xml文件

-values:存放定义了多种类型的资源文件。

8.AndroidManifest.xml

用来描述App性质和它的每一个组件的一种控制型文件。例如:权限,版本信息等。

8.Sqlite

创建数据库对象

SQLiteDatabase db = openOrCreateDatabase(“test.db”, Context.MODE_PRIVATE, null);

db.execSQL(sql语句);

Cursor c = db.rawQuery();查询语句

while(c.moveToNext()){

int id = c.getInt(c.getColumnIdex(“_id”));

...

}

c.close();

db.delete()

db.close();

数据库文件存放路径:/data/data/[PACKAGE_NAME]/databases

posted @ 2015-06-22 23:19  codingblock  阅读(412)  评论(0)    收藏  举报