
安卓面试突破专题课程
Android 基础与底层机制
1. 数据库的操作类型有哪些,如何导入外部数据库?(Ricky)
读懂题目。如果碰到问题比较模糊的时候可以适当问问面试官。
配合面试官来面试:面试是一个相互了解的过程,要充分利用面试的题目和时间把自己
的能力和技术展现出来,面试官能够看到你的真实技术。
1) 使用数据库的方式有哪些?
(1) openOrCreateDatabase(String path);
(2) 继承 SqliteOpenHelper 类对数据库及其版本进行管理(onCreate,onUpgrade)
当 在 程 序 当 中 调 用 这 个 类 的 方 法 getWritableDatabase() 或 者
getReadableDatabase();的时候才会打开数据库。如果当时没有数据库文件的
时候,系统就会自动生成一个数据库。
2) 操作的类型:增删改查 CRUD
直接操作 SQL 语句:SQliteDatabase.execSQL(sql);
面向对象的操作方式:SQLiteDatabase.insert(table, nullColumnHack, ContentValues);
如何导入外部数据库?
一般外部数据库文件可能放在 SD 卡或者 res/raw 或者 assets 目录下面。
写一个 DBManager 的类来管理,数据库文件搬家,先把数据库文件复制到”/data/data/包名
/databases/”目录下面,然后通过 db.openOrCreateDatabase(db 文件),打开数据库使用。
我上一个项目就是这么做的,由于 app 上架之前就有一些初始数据需要内置,也会碰到数
据的升级等问题,我是这么做的…… 同时我碰到最有意思的问题就是关于数据库并发操作的
问题,比如:多线程操作数据库的时候,我采取的是封装使用互斥锁来解决……
2. 是否使用过本地广播,和全局广播有什么差别?(Ricky)
引入本地广播的机制是为了解决安全性的问题:
1) 正在发送的广播不会脱离应用程序,比用担心 app 的数据泄露;
2) 其他的程序无法发送到我的应用程序内部,不担心安全漏洞。(比如:如何做一个杀
不死的服务---监听火的 app 比如微信、友盟、极光的广播,来启动自己。)
3) 发送本地广播比发送全局的广播高效。(全局广播要维护的广播集合表 效率更低。
全局广播,意味着可以跨进程,就需要底层的支持。)
本地广播不能用静态注册。----静态注册:可以做到程序停止后还能监听。
使用:
(1) 注册
LocalBroadcastManager.getInstance(this).registerReceiver(new
XXXBroadCastReceiver(), new IntentFilter(action));
(2) 取消注册:
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver)
3. 是否使用过 IntentService,作用是什么, AIDL 解决了什么问题? (小米) (Ricky)
如果有一个任务,可以分成很多个子任务,需要按照顺序来完成,如果需要放到一个服
务中完成,那么使用 IntentService 是最好的选择。
一般我们所使用的 Service 是运行在主线程当中的,所以在 service 里面编写耗时的操作
代码,则会卡主线程会 ANR。为了解决这样的问题,谷歌引入了 IntentService.
IntentService 的优点:
评论0