android面试题之三
十一、对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行?
若在onPause()中进行保存,相应需要在onResume()中进行恢复。
若在onStop()中进行保存,相应需要在onStart()中进行恢复。
另外,还有一个方法onSaveInstanceState(Bundle)。这种情况下,只有当activity是被系统干掉而退出的时候,保存的状态才可以得到恢复,因为下次启动时调用的onCreate(Bundle)方法中的Bundle对象就上次退出时保存状态的Bundle对象。但Activity若不是被系统干掉而是正常退出的,onCreate中的Bundle就是null了。
十二、为什么要用ContentProvider?它和sql的实现上有什么差别?
使用它的原因:是为了实现不同应用程序之间数据的共享。
与sql相同点:它的底层是用SQLite 数据库实现的,所以其对数据做的各种操作都是以sql实现的,只是在上层提供的是Uri。
与sql区别:可以屏蔽数据存储的细节,对用户完全透明,用户只需关心操作数据的Uri就可以了,所以从安全性角度考虑,使用ContentProvider更优。
十三、谈谈 UI 中, Padding 和 Margin 有什么区别?
Padding:用在容器内部,指容器内部内容相对该容器边框的距离。
Margin:用在容器外部,指自己相对其他(上下左右)View的距离。
十四、请介绍下 Android 的数据存储方式。
Android提供了五中数据存储方式:SharedPreferences存储、文件存储、SQLite数据库存储 、ContentProvider存储、网络存储。
1、SharedPreferences存储:用来存储一些简单的配置信息,采用的是键值对的方式进行存储。
2、文件存储:文件存储数据是一种较常用的方式,在Android中常采用openFileInput()和openFileOutput()方法读取/写入文件。常用来存储大数量的数据,缺点是更新数据困难。
3、SQLite数据库存储:SQLite是一个轻量级的数据库,支持基本SQL语法,是常被采用的一种数据存储方式。Android为此数据库提供了一个名为SQLiteDatabase的类,封装了一些操作数据库的API。
以上三种方式存储对应的目录是:/data/data/PackageName/Shared_Pref、/data/data/PackageName/files、/data/data/PackageName/database。
4、ContentProvider存储:Android系统中能实现所有应用程序共享的一种数据存储方式,由于数据通常在各应用间的是互相私密的,所以此存储方式较少使用,但是其又是必不可少的一种存储方式。例如音频,视频,图片和通讯录,一般都可以采用此种方式进行存储,每个ContentProvider都会对外提供一个公共的URI(包装成Uri对象),如果应用程序有数据需要共享时,就需要使用ContentProvider为这些数据定义一个URI,然后其他的应用程序就通过Content Provider传入这个URI来对数据进行操作。使用ContentProvider的好处在于统一了数据访问方式。
5、网络存储:前面介绍的几种存储都是将数据存储在本地设备上,除此之外,还有一种存储(获取)数据的方式,即通过网络来实现数据的存储和获取。我们可以调用WebService返回的数据或是解析HTTP协议实现网络数据交互。
具体需要熟悉java.net.*,Android.net.*这两个包的内容,可以参阅相关文档。
在实际应用中,常常需要根据设计目标、性能需求、空间需求等来选择合适的数据存储方式.
十五、说说android 中 mvc 的具体体现
mvc是model、view、controller的缩写。
1.视图层(view):一般采用xml文件进行界面的描述,使用的时候可以非常方便的引入,当然,如果你对android了解得比较多的话,就一定可以想到在android中也可以使用javascript+html等的方式作为view层,当然这里需要进行java和javascript之间的通信,android提供了它们之间非常方便的通信实现。
2.控制层(controller):android的控制层的重任通常落在了众多的activity的肩上,通过事件控制等完成与业务逻辑层之间的交互,而耗时操作都应放在model层,这样做的一个原因是android中的activity的响应时间是5s,如果耗时的操作放在activity里面,程序就很容易被回收掉。
3.模型层(model):对数据库的操作、对网络等的操作以及业务计算操作和一些高耗时的计算操作都应该在model里面处理。
android面试题之三的更多相关文章
- Android多线程分析之三:Handler,Looper的实现
Android多线程分析之三:Handler,Looper的实现 罗朝辉 (http://www.cnblogs.com/kesalin/) CC 许可,转载请注明出处 在前文<Android多 ...
- 【Android面试】Android面试题集锦 (陆续更新)(最新2012-6-18) eoe上看到的
===============eoeAndroid社区推荐:======================= 1.Android开发新浪面试题[开发者必看哦]下载地址 http://www.eoeand ...
- 安卓Android面试题大全
56个问题都是经常用到的,可以深入研究下,也是必须掌握的开发必备知识. 安卓Android面试题汇总 搜集了一些Android面试题目,供将要面试或者正在面试的朋友参考. 1, 谈谈你对Activit ...
- Android 面试题总结
Android 面试题总结(不断更新) 1.INETNT几种有关Activit的启动方式FLAG_ACTIVITY_BROUGHT_TO_FRONT 将ACTIVITY带到最前面FLAG_ACTIVI ...
- Android面试题整理【转载】
面试宝典(5) http://www.apkbus.com/android-115989-1-1.html 面试的几个回答技巧 http://blog.sina.com.cn/s/blog_ad ...
- 19、android面试题整理(自己给自己充充电吧)
(转载,出处丢失,请原作者原谅,如有意见,私信我我会尽快删除本文) JAVA 1.GC是什么? 为什么要有GC?GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问 ...
- Android OTA 升级之三:生成recovery.img
Android OTA 升级之三:生成recovery.img 作者: 宋立新 Email:zjujoe@yahoo.com 前言 得到了ota升级包后,我们就可以用它来升级系统了.Android 手 ...
- Android面试题基础(转)
71道经典Android面试题和答案 1.下列哪些语句关于内存回收的说明是正确的? (b ) A. 程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释 ...
- Android面试题(文章内容来自他人博客)
腾讯面试题 1.int a = 1; int result = a+++3<<2; 2.int a = 2; int result = (a++ > 2)?(++a):(a+=3); ...
随机推荐
- c++栈管理库TCMalloc、jeMalloc
示例:http://blog.csdn.net/chosen0ne/article/details/9338591
- 用JQUERY实现给当前页面导航一个CSS
今天遇到一个问题 当我在导航中点击一个标签后 希望用户知道自己所在导航的位置 只需要根据点击的页面是否加载完成 给这个标签用JS 添加一个CCcurr的 也就是我们常说的current CLASS 代 ...
- LeetCode Backpack
Given n items with size Ai, an integer m denotes the size of a backpack. How full you can fill this ...
- C/C++中字符串的输入问题
standard C I/O 头文件:#include <stdio.h> . getchar() 原型:int getchar(void); 功能:从标准输入获取并返回下一个字符,并释放 ...
- malloc/free和new/delete的区别汇总
一.基本概念 malloc/free 1.函数原型及说明: void* malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针.如果分配失败,则返回 ...
- 循环获取<ul>下拉列表的的值。进行对比,正确的家样式
$(function () { //要对比的值 var mysqlanswer = $("#wds-mysqlcuranswer").val(); // topic-opt ...
- 建造者模式->代码示例
<?php interface Builder{ public function head(); public function body(); public function foot(); ...
- 高质量程序设计指南C/C++语言——有了malloc/free为什么还要new/delete?
- Android Studio ADB响应失败解决方法
当启动Android Studio时,如果弹出 adb not responding. you can wait more,or kill "adb.exe" process ma ...
- angulajs 如何在controller 之间共享数据
当在一个controller中 通过设置$scope的数据,来影响其它control的范围时,可以使用$rootScope 举个例子: 在一个control A范围内设置 mainApp.contro ...