1、
面向对象设计模式你知道的有哪些?
单例模式、简单工厂、工厂方法、抽象工厂、代理模式、适配器模式等
2、
什么是
MVC
?
MVC
全名是
Model View Controller
,是模型
(model)
-视图
(view)
-控制器
(controller)
的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
MVC
被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
3、
在
Android
中如何理解
MVC
M
(
Model
)用于封装数据源的元类型,例如使用
GSON
解析时
JSON
数据对应的类
V
(
View
)用于用户交互界面,在
Android
中通常指各种控件(
android.view.View
的各种子类型)
C
(
Controller
)用于封装逻辑,在
Android
中又可以将其分为数据控制器(
Data Controller
)和视力控制器(
View Controller
)。数据控制器用于操作各种数据源(网络数据源、本地数据源等),例如各种网络访问框架、本地数据库操作框架均属于数据控制器。视图控制器用于操作各种界面逻辑,如
Android
中的
Activity
、
Fragment
、
Adapter
等
4、
在
Android
中,你通常如何实现网络访问操作
1)
使用
URLConnection+Handler
实现
2)
使用
URLConnection+AsyncTask
实现
3)
将上述两点中的
URLConnection
换成
OKHttp
4)
Volley
框架
5)
xUtils
中的
httpUtils
框架
5、
在
Android
中你通常如何实现
JSON
数据解析
1)
使用系统原生的
JSONObject
和
JSONArray
实现解析
2)
使用
GSON
实现
JSON
数据解析
6、
在
Android
中你通常如何实现网络图片显示
1)
原生方式实现网络图片文件载到本地,再加载本地图片文件
2)
使用
Volley
中的网络图片加载功能
3)
使用
xUtils
中的
imageUtils
中的图片加载功能
4)
使用
Universal-Image-Loader
5)
使用
Picasso
6)
使用其他的第三方图片加载库
7、
在
Android
中使用
Universal-Image-Loader
进行网络图片访问时,缓存分为几级?都是什么?
三级。分别是内存缓存、本地文件缓存和网络缓存
8、
你在
Android
中如何操作本地
SQLite
数据库
1)
使用系统原生的
SQLite
操作
a)
使用
SQL
语句直接操作
b)
使用
Insert
、
Update
、
Delete
、
Query
方法操作
2)
使用
xUtils
中的
DbUtils
3)
使用其他第三方
SQLite
封装库
9、
你在
Android
中,使用过的
Adapter
有哪些?如何选择各种
Adapter
ArrayAdapter
:使用数组或
List<T>
数据源,绑定时一项只有一个控件能够进行绑定
SimpleAdapter
:使用
List<Map<String,?>>
数据源,绑定时一项可以有多个控件进行绑定
继承
SimpleAdapter
:使用
List<Map<String,?>>
数据源,可以在
SimpleAdapter
绑定的基础上添加一些不能绑定的数据
BaseAdapter
:自定义绑定的各种操作(重写
4
个方法的含意)
SimpleCursorAdapter
:使用本地数据库或都
ContentProvider
返回的
Cursor
作为数据源
10、
在使用
BaseAdapter
实现
ListView
数据绑定时,如何提高性能
1)
使用
convertView
的复用
2)
使用
ViewHolder
,减少
findViewById
的数量
3)
在项中使用异步数据访问,加载图片
4)
数据分页加载、显示
11、
是否使用过
RecyclerView
,谈谈如何使用
RecyclerView
显示数据
RecyclerView
绑定数据时,使用继承于
RecyclerView.Adapter
的子类进行数据绑定,另外还需要使用继承于
RecyclerView.ViewHolder
的子类
继承于
RecyclerView.ViewHolder
的子类用于封装
RecyclerView
数据项所对应的控件及控件中的所有子控件
继承于
RecyclerView.Adapter
的子类需要重写三个方法:
1)
getItemCount
方法,返回
RecyclerView
的项的数量
2)
onCreateViewHolder
方法用于创建
RecyclerView
项所对应的控件
3)
onBindViewHolder
方法用于将数据源的数据绑定到
RecyclerView
的项上
使用
RecyclerView
进行数据绑定显示时,使用
MVC
模式,分离了数据绑定的各部分组件,使其耦合性降低
12、
你在项目中使用的版本控制工具有哪些?通常在什么时间提交代码?
常用的版本控制工具有:
SVN
、
Git
、
Visual Source Safe
(
VSS
)
通常一个功能点或一个逻辑做完就要提交(
Commit
)代码
13、
以
QQ
第三方登录为例,说说第三方登陆的流程是怎么样的
1)
在
app
中点击第三方登录
2)
若手机中安装了
QQ
,则跳转到
QQ App
,由
QQ App
授权
3)
若手机中没有安装
QQ
,则打开网页版,先进行登录,再进行授权
4)
授权后返回
app
,若登录、授权成功,返回成功信息及用户
Token
;若失败则返回错误信息
5)
使用返回的用户
Token
,可以获取到公开的用户信息(由用户授权访问的信息),如
QQ
昵称、头像等。用户的登录帐号(
QQ
号)、登录密码等是不会返回的。
14、
远程消息推送的流程?
由于国内的特殊原因,通常远程消息推送都是使用第三方提供的推送服务,或自行开发基于
XMPP
的推送服务器。
以个推为例:
1)
客户
App
向个推服务器注册远程消息服务,个推服务器返回相应的
CID
(
Client Id
),通常客户端
App
将
CID
上传至应用程序服务器,与服务器中的用户帐户进行绑定
2)
在特定情况下,应用程序服务器向个推服务器发送远程推送请求,将用户的
CID
及要发送的消息发送给个推服务器
3)
个推服务器按
CID
(或用户群组、昵称等)向用户设备发送远程推送消息
4)
客户端
App
中的
Receiver
接收到消息广播,获取消息中的内容,根据内容执行相应的操作
15、
实现支付宝第三方支付的流程是什么?
1)
商家注册支付宝用户帐户,生成加密用的密钥(私钥与公钥),将公钥上传至支付宝服务器,并下载支付宝提供的加密密钥中的公钥
2)
用户
App
集成支付宝
SDK
后,按要求构建商品订单字符串
3)
使用用户加密密钥中的私钥加密数据,并将其通过支付宝
SDK
发送给支付宝手机客户端或网页版支付页面
4)
由支付宝手机客户端或网页版支付页面完成支付功能,并返回支付结果
5)
用户
App
使用支付宝密钥中的公钥解密返回的数据(
JSON
字符串),并解析
JSON
内容,向用户显示成功或失败信息
16、
你将开发一个应用程序,包含用户注册、登录及第三方登录功能,你将如何设计这个流程
1)
在应用程序服务器中,使用数据库保存用户信息,使用网络数据接口实现用户登录、注册功能
2)
在应用程序服务器中,提供第三方登录注册及获取对应用户信息的接口
3)
在应用程序服务器中,统一注册、登录及第三方登录映射的本地用户信息
17、
如何实现使用手机定位获取用户所在的城市
1)
使用百度地图或高德地图等第三方地图
SDK
,使用其内部提供的定位及地理编码获取城市信息
2)
使用系统原生方式
a)
使用
GPS
传感器获取经纬度
b)
使用
Geocoder
进行地理编码,获取城市信息
18、
Android
中本地数据持久化有哪些方式
1)
SharedPreferences
2)
SD
卡文件
3)
本地
SQLite
数据库
4)
ContentProvider
19、
两个
Activity
中怎么传递(共享)数据
1)
使用
startActivity
时,使用
Intent
传递数据
2)
在使用
startActivityForResult
,
setResult
时,使用
Intent
传递数据
3)
在同一应用程序的两个无关联的
Activity
中,使用类中的静态成员方法共享数据
4)
在同一应用程序的两个无关联的
Activity
中,使用自定义
Application
中定义属性及
set
、
get
方法共享数据
20、
如何生成签名的
APK
文件
1)
定义
keystore
文件
2)
使用
keystore
文件生成
APK
基于两种平台的操作过程:
Eclipse
、
Android Studio
21、
横竖屏切换时候
Activity
的生命周期
1)
不设置
Activity
的
android: configChanges
时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。
2)
设置
Activity
的
android: configChanges=
“
orientation
”时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次。
3)
设置
Activity
的
android: configChanges=
“
orientation|keyboardHidden
”时,切屏不会重新调用各个生命周期,只会执行
onConfiguration
方法
22、Activity
被系统回收,如何保存及恢复状态
1)
保存数据状态:在
Activity
的
onSaveInstanceState
方法中,将需要保存的数据写入
Bundle
中
2)
恢复数据状态:在
Activity
的
onCreate
方法中,判断参数
savedInstanceState
是否为空,是否包含你所需要的状态,如果有则由其恢复状态
23、
网络数据访问及
JSON
解析时,通常需要处理的错误有哪些(按顺序说明)
1)
网络连接错误,如连接超时等
2)
网络返回状态码不是
200
,例如:
403
、
404
等
3)
返回的
InputStream
不能转换为字符串
4)
转换的字符串不能解析为
JSON
数据
5)
解析后的
JSON
数据中的服务器返回的逻辑错误
24、
列举出网络访问返回的状态码及其含意
特别注意红色字体部分
1xx -
信息提示
这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个
1xx
响应。
·
100 - Continue
初始的请求已经接受,客户应当继续发送请求的其余部分。(
HTTP 1.1
新)
·
101 - Switching Protocols
服务器将遵从客户的请求转换到另外一种协议(
HTTP 1.1
新)
2xx -
成功
这类状态代码表明服务器成功地接受了客户端请求。
·
200 - OK
一切正常,对
GET
和
POST
请求的应答文档跟在后面。
·
201 - Created
服务器已经创建了文档,
Location
头给出了它的
URL
。
·
202 - Accepted
已经接受请求,但处理尚未完成。
·
203 - Non-Authoritative Information
文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝,非权威性信息(
HTTP 1.1
新)。
·
204 - No Content
没有新文档,浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而
Servlet
可以确定用户文档足够新,这个状态代码是很有用的。
·
205 - Reset Content
没有新的内容,但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容(
HTTP 1.1
新)。
·
206 - Partial Content
客户发送了一个带有
Range
头的
GET
请求(分块请求),服务器完成了它(
HTTP 1.1
新)。
3xx -
重定向
客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。
·
300 - Multiple Choices
客户请求的文档可以在多个位置找到,这些位置已经在返回的文档内列出。如果服务器要提出优先选择,则应该在
Location
应答头指明。
·
301 - Moved Permanently
客户请求的文档在其他地方,新的
URL
在
Location
头中给出,浏览器应该自动地访问新的
URL
。
·
302 - Found
类似于
301
,但新的
URL
应该被视为临时性的替代,而不是永久性的。注意,在
HTTP1.0
中对应的状态信息是“
Moved Temporatily
”。出现该状态代码时,浏览器能够自动访问新的
URL
,因此它是一个很有用的状态代码。注意这个状态代码有时候可以和
301
替换使用。例如,如果浏览器错误地请求
http://host/~user
(缺少了后面的斜杠),有的服务器返回
301
,有的则返回
302
。严格地说,我们只能假定只有当原来的请求是
GET
时浏览器才会自动重定向。请参见
307
。
·
303 - See Other
类似于
301/302
,不同之处在于,如果原来的请求是
POST
,
Location
头指定的重定向目标文档应该通过
GET
提取(
HTTP 1.1
新)。
·
304 - Not Modified
客户端有缓冲的文档并发出了一个条件性的请求(一般是提供
If-Modified-Since
头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的
文档还可以继续使用。
·
305 - Use Proxy
客户请求的文档应该通过
Location
头所指明的代理服务器提取(
HTTP 1.1
新)。
·
307 - Temporary Redirect
和
302
(
Found
)相同。许多浏览器会错误地响应
302
应答进行重定向,即使原来的请求是
POST
,即使它实际上只能在
POST
请求的应答是
303
时才能重定向。由于这个原因,
HTTP 1.1
新增了
307
,以便更加清除地区分几个状态代码:当出现
303
应答时,浏览器可以跟随重定向的
GET
和
POST
请求;如果是
307
应答,则浏览器只能跟随
对
GET
请求的重定向。(
HTTP 1.1
新)
4xx -
客户端错误
发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。
·
400 - Bad Request
请求出现语法错误。
·
401 - Unauthorized
访问被拒绝,客户试图未经授权访问受密码保护的页面。应答中会包含一个
WWW-Authenticate
头,浏览器据此显示用户名字
/
密码对话框,然后在填写合适的
Authorization
头后再次发出请求。
IIS
定义了许多不同的
401
错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在
IIS
日志中显示:
·
401.1 -
登录失败。
·
401.2 -
服务器配置导致登录失败。
·
401.3 -
由于
ACL
对资源的限制而未获得授权。
·
401.4 -
筛选器授权失败。
·
401.5 - ISAPI/CGI
应用程序授权失败。
·
401.7
–访问被
Web
服务器上的
URL
授权策略拒绝。这个错误代码为
IIS 6.0
所专用。
·
403 - Forbidden
资源不可用。服务器理解客户的请求,但拒绝处理它。通常由于服务器上文件或目录的权限设置导致。禁止访问:
IIS
定义了许多不同的
403
错误,它们指明更为具体的错误原因:
·
403.1 -
执行访问被禁止。
·
403.2 -
读访问被禁止。
·
403.3 -
写访问被禁止。
·
403.4 -
要求
SSL
。
·
403.5 -
要求
SSL 128
。
·
403.6 - IP
地址被拒绝。
·
403.7 -
要求客户端证书。
·
403.8 -
站点访问被拒绝。
·
403.9 -
用户数过多。
·
403.10 -
配置无效。
·
403.11 -
密码更改。
·
403.12 -
拒绝访问映射表。
·
403.13 -
客户端证书被吊销。
·
403.14 -
拒绝目录列表。
·
403.15 -
超出客户端访问许可。
·
403.16 -
客户端证书不受信任或无效。
·
403.17 -
客户端证书已过期或尚未生效。
·
403.18 -
在当前的应用程序池中不能执行所请求的
URL
。这个错误代码为
IIS 6.0
所专用。
·
403.19 -
不能为这个应用程序池中的客户端执行
CGI
。这个错误代码为
IIS 6.0
所专用。
·
403.20 - Passport
登录失败。这个错误代码为
IIS 6.0
所专用。
·
404 - Not Found
无法找到指定位置的资源。这也是一个常用的应答。
·
404.0 -
(无)–没有找到文件或目录。
·
404.1 -
无法在所请求的端口上访问
Web
站点。
·
404.2 - Web
服务扩展锁定策略阻止本请求。
·
404.3 - MIME
映射策略阻止本请求。
·
405 - Method Not Allowed
请求方法(
GET
、
POST
、
HEAD
、
DELETE
、
PUT
、
TRACE
等)对指定的资源不适用,用来访问本页面的
HTTP
谓词不被允许(方法不被允许)(
HTTP 1.1
新)
·
406 - Not Acceptable
指定的资源已经找到,但它的
MIME
类型和客户在
Accpet
头中所指定的不兼容,客户端浏览器不接受所请求页面的
MIME
类型(
HTTP 1.1
新)。
·
407 - Proxy Authentication Required
要求进行代理身份验证,类似于
401
,表示客户必须先经过代理服务器的授权。(
HTTP 1.1
新)
·
408 - Request Timeout
在服务器许可的等待时间内,客户一直没有发出任何请求。客户可以在以后重复同一请求。(
HTTP 1.1
新)
·
409 - Conflict
通常和
PUT
请求有关。由于请求和资源的当前状态相冲突,因此请求不能成功。(
HTTP 1.1
新)
·
410 - Gone
所请求的文档已经不再可用,而且服务器不知道应该重定向到哪一个地址。它和
404
的不同在于,返回
407
表示文档永久地离开了指定的位置,而
404
表示由于未知的原因文档不可用。(
HTTP 1.1
新)
·
411 - Length Required
服务器不能处理请求,除非客户发送一个
Content-Length
头。(
HTTP 1.1
新)
·
412 - Precondition Failed
请求头中指定的一些前提条件失败(
HTTP 1.1
新)。
·
413
–
Request Entity Too Large
目标文档的大小超过服务器当前愿意处理的大小。如果服务器认为自己能够稍后再处理该请求,则应该提供一个
Retry-After
头(
HTTP 1.1
新)。
·
414 - Request URI Too Long URI
太长(
HTTP 1.1
新)。
·
415
–不支持的媒体类型。
·
416
–
Requested Range Not Satisfiable
服务器不能满足客户在请求中指定的
Range
头。(
HTTP 1.1
新)
·
417
–执行失败。
·
423
–锁定的错误。
5xx -
服务器错误
服务器由于遇到错误而不能完成该请求。
·
500 - Internal Server Error
服务器遇到了意料不到的情况,不能完成客户的请求。
·
500.12 -
应用程序正忙于在
Web
服务器上重新启动。
·
500.13 - Web
服务器太忙。
·
500.15 -
不允许直接请求
Global.asa
。
·
500.16
–
UNC
授权凭据不正确。这个错误代码为
IIS 6.0
所专用。
·
500.18
–
URL
授权存储不能打开。这个错误代码为
IIS 6.0
所专用。
·
500.100 -
内部
ASP
错误。
·
501 - Not Implemented
服务器不支持实现请求所需要的功能,页眉值指定了未实现的配置。例如,客户发出了一个服务器不支持的
PUT
请求。
·
502 - Bad Gateway
服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答。亦说
Web
服务器用作网关或代理服务器时收到了无效响应。
·
502.1 - CGI
应用程序超时。
·
502.2 - CGI
应用程序出错。
·
503 - Service Unavailable
服务不可用,服务器由于维护或者负载过重未能应答。例如,
Servlet
可能在数据库连接池已满的情况下返回
503
。服务器返回
503
时可以提供一个
Retry-After
头。这个错误代码为
IIS 6.0
所专用。
·
504 - Gateway Timeout
网关超时,由作为代理或网关的服务器使用,表示不能及时地从远程服务器获得应答。(
HTTP 1.1
新)。
·
505 - HTTP Version Not Supported
服务器不支持请求中所指明的
HTTP
版本。(
HTTP 1.1
新)
25、
如何保证一个
Service
不被用户关闭
定义监视电池电量变化的广播接收器,在其中判断
Service
是否在运行,如果没有运行,则启用
Serivice
26、
如何在应用程序中使用带某些固定数据的
SQLite
数据库
方法一:在
OpenDatabaseHelper
的
onCreate
中,使用
SQL
语句添加这些数据
方法二:开发时,将数据添充到
SQLite
数据库中,将数据库文件添加到应用程序资源文件里。第一次运行时,将数据库复制到
SD
卡,应用程序打开此
SQLite
数据库文件
27、
使用
Android Studio
时,如何加载第三方库
1)
加载
jar
包:将
jar
包复制到
libs
目录,在
gradle
中添加文件绑定
2)
加载
so
包:将
so
包复制到
jniLibs
目录
3)
加载模块:将项目导入到
Android Studio
中,在
gradle
中添加模块绑定
4)
加载
Marven
库:直接在
gradle
中添加库绑定
28、
你在做一个页面,实现网络数据访问,
JSON
解析,然后将结果显示在
ListView
中,执行后发现程序没有崩溃,没有异常信息,但界面没有任何显示,你将如何进行调试排错?
按以下顺序进行检查:
1)
将所有
try…catch
中的异常信息进行打印,查看是否有异常产生
2)
如可以,将网络访问的
URL
在
Log
中输出,并在浏览器中访问,看是否有结果
3)
在
Log
中打印网络返回的字符串(需要将
InputStream
转换为字符串)
4)
字符串转换为
JSON
时是否转换成功
5)
JSON
数据封装为
Model
类时是否可功,在
Log
中打印
Model
的所有属性值
6)
在
Adapter
的
getCount
方法里,使用
Log
输出返回的结果
7)
在
getView
方法里
a)
检查对应的元数据
b)
检查控件是否为空,及显示的样式等
c)
检查控件与数据的绑定
29、
AsyncTask
必须要重写的方法和可以重写的方法有哪些?在什么时候执行?在哪个线程中执行?
必须重写的方法:
1)
doInBackground
方法,此方法中写异步执行的代码,并返回异步执行的结果。此方法在子线程中执行
可以重写的方法:
1)
onPreExecute
方法:在
doInBackground
之前执行
2)
onPoseExecute
方法:在
doInBackground
之后执行,其参数为
doInBackground
方法返回的结果
3)
onProgress
方法:异步执行的进度发生变化时执行
4)
onCancel
方法:异步任务被取消时执行
以上
4
个方法均在
UI
线程(主线程)中执行。
30、
Content Provider
的
URI
的组成部分有哪些?
URI
由是部分组成:
A
,标准的前缀
: ContentProvider
(内容提供者)的
scheme
已经由
Android
所规定,
scheme
为:
content://
B
,唯一标识整个
Content Provider:
主机名(或叫
Authority
)用于唯一标识这个
ContentProvider
,外部调用者可以根据这个标识来找到它。
C
,描述了数据的路径,确定返回哪类数据
:
路径(
path
)可以用来表示我们要操作的数据,路径的构建应根据业务而定
D
,
ID
唯一标注请求的数据
:
我们要请求数据的
ID
。此部分是非必须的。
31、
Android
中的动画有哪些?
Android
中动画可以分为两大类:帧动画、补间动画
1)
补间动画:你定义一个开始和结束,中间的部分由程序运算得到。主要有:旋转、平移、放缩和渐变;
AlphaAnimation
(渐变型动画)、
scaleAnimation
(缩放型动画)、
TranslateAnimation
(平移型动画)、
RotateAnimation
(旋转型动画)
2)
逐帧动画:
Frame
(把一连串的图片进行系列化连续播放,如同放电影的效果),它是通过播放一张一张图片来达到动画的效果
32、Android
中音乐的播放方式有哪些
1)
MediaPlayer
:主要用于播放音频,可以播放视频,但是一般不用其进行视频播放。
2)
SoundPool
:主要用于播放一些短促的声音片段,主要优势是
cpu
资源占有量低,反应延迟小。
33、Android
中视频的播放方式有哪些
1)
VideoView
2)
SurfaceView+ MediaPlayer
3)
其他第三方视频播放控件
34、
如何在
ListView
中播放视频
1)
在
ListView
的
Item
中,定义
FrameLayout
,用户承载视频播放控件和替代显示内容
2)
点击
Item
替代内容的播放按钮时,切换
FrameLayout
显示的内容,播放视频
3)
监听
ScrollListener
,对于正在播放视频的
Item
滚动出屏幕外时,停止视频的播放
4)
Item
项播放与全屏播放的切换及状态保存
35、
如何实现传感器开发
1)
获取系统服务(
SENSOR_SERVICE)
返回一个
SensorManager
对象
sensormanager = (SensorManager)getSystemSeriver(SENSOR_SERVICE);
2)
通过
SensorManager
对象获取相应的
Sensor
类型的对象
sensorObject = sensormanager.getDefaultSensor(sensor Type);
3)
声明一个
SensorEventListener
对象用于侦听
Sensor
事件,并重载
onSensorChanged
方法
SensorEventListener sensorListener = new SensorEventListener(){};
4)
注册相应的
SensorService
sensormanager.registerListener(sensorListener, sensorObject, Sensor TYPE);
5)
销毁相应的
SensorService
sensormanager.unregisterListener(sensorListener, sensorObject);
36、
说说你常用的
Android
应用程序首页面的布局结构
1)
RadioGroup+Fragment
2)
TabLayout+ViewPager+Fragment
3)
DrawerLayout+Fragment
4)
…
37、
如何实现
ListView
或
GridView
嵌套时的高度自适应
1
)自定义类继承
ListView
或
GridView
,重写
onMeasure
方法
2
)在布局
Layout
文件中,定义这个子类的控件,并将其高度设置为
wrap_content
38、
简述广告轮播的实现
1)
使用
ViewPager+
控件或
Fragment
实现内容的展示
2)
使用
Timer
实现定时器
39、
你使用过哪些
ListView
的上、下拉刷新
1)
使用
onScrollListener
结合
ListView
的
headerView
及
footerView
实现
2)
使用第三方如
PullToRefreshListView
实现
3)
使用
SwipeRefreshLayout
实现
40、
如何实现侧滑菜单
1)
DrawerLayout
2)
第三方
SlideMenu
3)
SlidePaneLayout
另:
NavigationView
实现常规的侧滑菜单布局
41、
Android 5.0
的新特性有哪些
1)
全新
Material Design
设计风格
2)
支持多种设备
3)
全新的通知中心设计
4)
支持
64
位
ART
虚拟机
5)
Project Volta
电池续航改进计划
6)
全新的“最近应用程序”
7)
改进安全性
8)
不同数据独立保存
9)
改进搜索
10)
新的
API
支持,蓝牙
4.1
、
USB Audio
、多人分享等其它特性
42、Android 6.0
的新特性有哪些
1)
锁屏下语音搜索
2)
指纹识别
3)
更完整的应用权限管理
4)
Doze
电量管理
5)
Now on Tap
功能
6)
App Links
43、
你将要实现如下的界面,其中数据需要分页加载,请说出你实现此界面的思路
1)
主界面使用
ListView
,考虑分页可以使用
PullToRefreshListView
或者
SwipeRefreshLayout
嵌套
ListView
2)
在
ListView
的
headerView
中,加载上部分的各选项,可选用
LinearLayout
嵌套
LinearLayout
实现
3)
设置
onScrollListener
监听器,监听滚动条的位置,若头视图滑出屏幕,则显示右上“按人气”视图
4)
网络访问部分
5)
网络访问返回的数据与界面的结合
6)
上面各选项点击与网络访问的结合
以下问题请结合你选择的公司及项目进行回答
44、
你所在公司有多少人?开发人员有多少人?
Android
有多少人?
45、
你所开发的
X
项目团队是如何组成的?
46、
如果你是
X
项目开发时的
Leader
,你如何进行项目分工的
47、
你开发的
X
项目使用的网络访问框架是什么?为什么选择这个框架?
48、
在开发
X
项目时,你遇到的最大的技术问题是什么?如何解决的?
49、
你所在公司对于开发过程中的源代码注释书写有什么要求
50、
你如何看待
Android
开发与
iOS
开发