android面试题
19. Intent传递数据时,可以传递哪些类型数据?
1.一般的基本数据类型 Intent .putextra() intent.getStringextra();
2.数据的uri, intent.setData() intent.getData();
20. 说说Activity,Intent,Service是什么关系 。
麦当劳和麦当娜的关系是什么关系?
这种问题,就讲下activity,讲一下service,说一下 通过intent去激活组件,传递数据.
说自己项目中有这样一个网络更新的功能,显示界面就用的activity, 后台有个service每隔半小时都去访问下服务器获取更新的数据…
开启服务用的是intent来开启
21. 请描述一下Broadcast Receiver。
有很多广播接收者 ,系统已经实现了.
广播分两种
有序广播
无序广播
指定接收者的广播 . 是不可以被拦截掉的
onReceive() 方法.
abortBroadcast();
有序广播有一个特例
sendOrderedBroadcast(intent, receiverPermission, resultReceiver, scheduler, initialCode, initialData, initialExtras);
resultReceiver 广播接受者 如果我们显示的指定了广播接收者
无论如何 都会接受广播 时间 abortBroadcast(); 的方法不会终止广播时间
Sticky
sendStickyBroadcast(intent) // 阴魂不散的广播
Wifi设置
用于接收系统的广播通知, 系统会有很多sd卡挂载,手机重启,广播通知,低电量,来短信等,一个apk的安装成功….
手机卫士中自定义一个broadcast receiver
sms_received
来获取短信到来的广播, 根据黑名单来判断是否拦截该短信.
画画板生成图片后,发送一个sd挂载的通知,通知系统的gallery去获取到新的图片.
Intent intent = new Intent(Intent.ACTION_MEDIA_MOUNTED,Uri.parse(" file://"+Environment.getExternalStorageDirectory ()));
sendBroadcast(intent);
22. 在manifest和代码中如何注册和使 用 broadcast receiver 。
设置广播接收者的优先级,设置广播接受者的action名字 等…
详细见工程代码.
代码中注册,如果代码没有执行,就接受不到广播事件
registerReceiver(receiver, filter)
23. 请介绍下ContentProvider是如何实现数据共享的。
把自己的数据通过uri的形式共享出去
android 系统下 不同程序 数据默认是不能共享访问
需要去实现一个类去继承ContentProvider
public class PersonContentProvider extends ContentProvider{
public boolean onCreate(){
//..
}
query(Uri, String[], String, String[], String)
insert(Uri, ContentValues)
update(Uri, ContentValues, String, String[])
delete(Uri, String, String[])
}
content:// 代表contentprovider
技巧: 1.看urlmarcher.
2. 根据匹配码 查看增删改查的具体实现
24. 请介绍下Android的数据存储方式。
文件 访问权限. sdcard
/ context.openFileInput(name) 默认是私有的访问权限
数据库 sqlite
网络 socket tcp udp ,
http httpurlconnection
ftp的网络
25. 为什么要用ContentProvider?它和sql的实现上有什么差别?
屏蔽数据存储的细节,对用户透明,用户只需要关心操作数据的uri就可以了,对应的参数 .
不同app之间共享,操作数据
但是contentprovider 还可以去增删改查本地文件. xml文件的读取,更改,
网络数据读取更改
Sql也有增删改查的方法.
26. 请介绍下Android中常用的五种布局。
FrameLayout(帧布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)
FrameLayout
从屏幕的左上角开始布局,叠加显示, 实际应用 播放器的暂停按钮.
LinearLayout
线性布局,这个东西,从外框上可以理解为一个div,他首先是一个一个从上往下罗列在屏幕上。每一个LinearLayout里面又可分为垂直布局
(android:orientation="vertical")和水平布局(android:orientation="horizontal"
)。当垂直布局时,每一行就只有一个元素,多个元素依次垂直往下;水平布局时,只有一行,每一个元素依次向右排列。
AbsoluteLayout
绝对布局犹如div指定了absolute属性,用X,Y坐标来指定元素的位置android:layout_x="20px"
android:layout_y="12px"
qq斗地主 qq游戏大厅 800*480 800*480.apk fwvga 854*480
指定平板机型的游戏开发中经常用到绝对布局 widget 绝对布局
指定机型的平板游戏开发. 2.3 3.0
1. 界面布局 任务管理器 gridview
2. 手机 任务管理 listview
lephone
lepad
RelativeLayout
相对布局可以理解为某一个元素为参照物,来定位的布局方式。主要属性有:
相对于某一个元素
android:layout_below="@id/aaa" 该元素在 id为aaa的下面
android:layout_toLeftOf="@id/bbb" 改元素的左边是bbb
相对于父元素的地方
android:layout_alignParentLeft="true" 在父元素左对齐