Android面试题(二)
来源:互联网 发布:linux 删除u盘分区 编辑:程序博客网 时间:2024/06/11 18:51
1.service的生命周期
2service是否是在mainThread中运行的,service能进行耗时操作吗?
没有明确的指明service的运行线程,service实在mainthread中运行的。
service里面不能执行耗时的操作(网络请求,拷贝数据库,大文件)
3.Service有哪些启动方法,有什么区别,怎样停用Service?
(1)通过startService
Service会经历onCreate(),onStart(),然后处于运行状态,stopService()时候调用 onDestroy方法
如果是调用者自己直接退出而没有调用stopService的haunted,Service会一直在后台 运行
(2)通过bindService
Service会运行onCreate,然后调用onBind(),这时候调用者和Service绑定在一起。调用者退出了,Service就会调
用onUnbind->onDestroy方法
4Android service保活
(参考http://blog.csdn.net/u011200604/article/details/52217423#t8)
①利用activity提升权限
②3.2. 利用 Notification 提升权限
③
5自定义view的相关方法
1、自定义View的属性
2、在View的构造方法中获得我们自定义的属性
[ 3、重写onMesure ]
4、重写onDraw
6:Serializable和Parcelable的区别
相同点:都能实现序列化且可用于Intent间的数据传递
Serializable是Java中的序列化接口,使用简单但开销大,序列化和反序列化过程需要大量I/O操作。
Parcelable更适合Android平台,使用麻烦但效率高,主要用在内存序列化上。
7Android 65k(65536 2的16次方)限制。
由于Android方法太多,导致打包的时候dex文件的方法数量超过65536。
解决办法:
Android Studio 允许用户通过 Gradle 的设置来使用多个 DEX 文件,这样每个文件中 的方法数就会减少,也就可以绕过这个限制。
具体操作办法:
修改 build.gradle 文件
修改项目的 build.gradle 文件启用 MultiDex 并包含 MultiDex 库:
android { compileSdkVersion 21 buildToolsVersion "21.1.0" defaultConfig { ... minSdkVersion 14 targetSdkVersion 21 ... // Enabling multidex support. multiDexEnabled true } ...}dependencies { compile 'com.android.support:multidex:1.0.0'}
修改 manifest 文件
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.multidex.myapplication"> <application ... android:name="android.support.multidex.MultiDexApplication"> ... </application></manifest>
如果用户不想在 manifest 文件中将 MultiDexApplication 指定为全局 Application,而是想继续使用原先指定的 Application, 则可以在全局 Application 中重写
attachBaseContext() 方法,并加上 MultiDex.install(this),如下: @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this);}
8Android 四大组件?
Activity,Service,ContentProvider,BroadcastReceiver
9Android 中的context有哪几种?
Activity,Service,BroadcastReceiver,Application
10Android中的dialog为什么不能用的context是那种,为什么?
用的是activity.this, 不是用的appliation级别的,原因是:dialog是依附于activity的,他的生命周期和activity的生命周期是一样的。application的生命周期和activity的生命周期是不同的。
11andriod中的数据存储有哪些?
1.SharedPreferences共享偏好
2 文件存储:
1.Internal Storage内部存储空间
2.External Storage外部存储空间
3.SQLite Database数据库
4.contentprovider存储数据
5.网络存储。
12文件存储和数据库存储那个效率更高一些?
数据量大时使用数据库效率高
数据量小时使用文件效率高
文件适用于存储一些简单的文本数据或者二进制数据,SharedPreferences适用于存储一些键值对,而数据库则适用于那些复杂的关系型数据。
数据库存储的数据可以跨程序应用,存储复杂的关系型数据。
13请介绍下Android中常用的五种布局
FrameLayout(帧布局)
LinearLayout(线性布局)
AbsuLayout(绝对布局)
RelativeLayout(相对布局)
14notifyDataSetChanged和notifyDataSetInvalidated的区别
notifyDataSetInvalidated(),会重绘整个控件(还原到初始状态)
notifyDataSetChanged(),重绘当前可见区域
15postInvalidate与invalidate有什么区别?
都用于刷新界面
postInvalidate()用在子线程
invalidate()用在主线程
16Handler机制
andriod提供了Handler 和 Looper 来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(MessageExchange)。
Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的MessageQueue(消息队列)。
Handler: 你可以构造Handler对象来与Looper沟通,以便push新消息到MessageQueue里;或者接收Looper从Message Queue取出)所送来的消息。
Message Queue(消息队列):用来存放线程放入的消息。
线程:UIthread 通常就是main thread,而Android启动程序时会替它建立一个MessageQueue。
- Android面试题(二)
- android面试题(二)
- android面试题(二)
- Android 面试题 (二)
- Android面试题(二)
- Android面试题(二)
- Android 面试题(二)
- android 面试题二
- Android面试题二
- Android面试题二
- android面试题二
- android 面试题二
- Android面试题二
- Android 面试题 二
- Android面试题(二)
- Android面试题二
- Android面试题二
- Android 面试题二
- 线上应用故障排查之一:高CPU占用
- 开辟子线程
- eclipse环境配置
- Windows-Py-Faster-rcnn
- TI DSP TMS320C66x学习笔记之DSP优化经验
- Android面试题(二)
- linux文件锁-续篇
- 百度地图集成
- 在linux系统上如何安装redis
- Mac上安装Android Studio2.2.2
- HDU1503 Advanced Fruits
- ES2015字符串的扩展
- angular2 国内环境搭建
- PAT_A 1016. Phone Bills (25)