Android数据库操作
Android数据库操作(精选8篇)
Android数据库操作 第1篇
SQLiteDatabase数据库操作
SQLiteDatabase 打开管理工具 SQLiteExpertSetup
创建数据库
自动创建数据库功能
SQLiteOpenHelper .getReadableDatabase() 或.getWriteableDatabase
创建DBOpenHelper extends SQLiteOpenHelper
{
public DBOpenHelper(Context context)
{
super(context,“itcast.db”,null,1); //数据库名称,版本号 默认保存目录 <包>/databases/
}
public void onCreate(SQLiteDatabase db) //是在数据库每一次被创建时调用的
{
//通过类SQLiteDatabase的实例来操作SQL语句
db.execSQL(“CREATE TABLE person(personid integer primary key autoincrement,name varchar(20))”);
}
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)
{
//文件版本号发生变更时调用,如版本由1变为2
db.execSQL(“ALTER TABLE person ADD phone VARCHAR(12) NULL”);
}
}
Person表类
public class Person
{
private Integer id;
private String name;
private String phone;
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id=id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name=name;
}
public String getPhone()
{
return phone;
}
public void setPhone(String phone)
{
this.phone=phone;
}
public String toString()
{
return “Person [id=” +id+“ , name=”+ name +“, phone=”+phone+“]”;
}
}
业务PersonService
private DBOpenHelper dbOpenHelper;
public PersonService(Context context){
this.dbOpenHelper = new DBOpenHelper(context);
}
public class PersonService{
public void save(Person person)
{
SQLiteDatabase db=dbOpenHelper.getWriteableDatabase();
db.execSQL(“insert into person(name,phone) values (?,?)”, new Object[]{person.getName(),+person.getPhone()});
//db.close();
}
public void delete(Person person)
{
SQLiteDatabase db=dbOpenHelper.getWriteableDatabase();
db.execSQL(“delete from person where personid=?”, new Object[]{id});
}
public void update(Person person)
{
SQLiteDatabase db=dbOpenHelper.getWriteableDatabase();
db.execSQL(“update person set name=?,phone=? where personid=?”,new Object[]{person.getName(),person.getPhone(),person.getId()});
}
public void find(Person person)
{
SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
Cursor cursor= db.rawQuery(“select * from person where personid=?”, new String[]{id.toString()}); //cursor用于对查询结果集进行随机访问
if(cursor.moveToFirst())
{
int personid=cursor.getInt(cursor.getColumnIndex(“personid”));
String name=cursor.getString(cursor.getColumnIndex(“name”));
String phone=cursor.getString(cursor.getColumnIndex(“phone”));
return new Person(personid,name,phone);
}
cursor.close();
return null;
}
/**
*分页获取记录
*@param offset 跳过前面多少条记录
*@param maxResult 每页获取多少条记录
*@return
**/
public List
getScrollData(int offset,int maxResult)
{
List
persons = new ArrayList
();
SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
Cursor cursor= db.rawQuery(“select * from person order by personid asc limit ?,?”, new String[]{String.valueOf(offset),String.valueOf(maxResult)});
while(cursor.moveToNext()) //类似ResultSet.next()
{
int personid=cursor.getInt(cursor.getColumnIndex(“personid”));
String name=cursor.getString(cursor.getColumnIndex(“name”));
String phone=cursor.getString(cursor.getColumnIndex(“phone”));
person.add(new Person(personid,name,phone));
}
cursor.close();
return persons;
}
public long getCount()
{
SQLiteDatabase db=dbOpenHelper.getReadableDatabase();
Cursor cursor=db.rawQuery(“select count(*) from person”,null);
cursor.moveToFirst();
long result=cursor.getLong(0);
cursor.close();
return result;
}
}
测试类:
public class PersonServiceTest extendsAndroidTestCase
{
private static final String TAG=“PersonServiceTest”;
public void testCreateDB() throws Exception
{
DBOpenHelper dbOpenHelper=new DBOpenHelper(getContext());
dbOpenHelper.getWriteableDatabase();
}
public void testSave() throws Exception
{
PersonService service = new PersonService(this.getContext());
for(int i=0;i<20;i++)
{
Person person =new Person(“zhangxx”+i,“132234324”+i);
service.save(person);
}
}
public void testDelete() throws Exception
{
PersonService service= new PersonService(this.getContext());
service.delete(21);
}
public void testUpdate() throws Exception
{
PersonService service= new PersonService(this.getContext());
Person person=service.find(1);
person.setName(“zhangxiaoxiao”);
service.update(person);
}
public void testFind() throws Exception
{
PersonService service= new PersonService(this.getContext());
Person person=service.find(1);
Log.i(TAG,person.toString());
}
public void testScrollData() throws Exception
{
PersonService service= new PersonService(this.getContext());
List
person=service.getScrollData(0,5);
for(Person person :persons)
{
Log.i(TAG,person.toString());
}
}
public void testCount() throws Exception
Android数据库操作 第2篇
1.使用Android电源管理widget 从Android2.1系统开始内置了一个非常强 大的带能源管理widget,通过这个widget 你可以快速开启或者关闭 Wi-Fi,蓝牙,GPS,同步这些手机耗电大户,还可以方便的设定手机 屏幕亮度,长按手机屏幕,就可以在widgets 目录选择启用。
2.Android手机拨号屏幕如果你对手机拨号屏幕功能性有特殊要求,安 卓绝对会满足你,点击联系人列表里任意一个用户,按手机menu>选项,里面有关于单个联系人的详细设置。
3.为每个联系人定制铃声可以为女朋友或者家人设置单独的铃声, 这样听到铃声就知道谁来电话了。设置方法点击联系人列表里任意 一个用户,然后就可以设置铃声。
4.不要把手机闹钟(alarm clock)加入进程查杀列表里这是一个经典 的错误,很多用户都喜欢用进程管理程序自动杀掉一些程序以节省 电量或者腾出手机内存,不过如果不小心alarm clock 进程也杀掉了, 后果就是第二天早晨10:30才醒过来惊慌失措的奔向公司。
5.用文件夹组织内容虽然乔布斯花了很久才决定放开iOS 用户通过 文件夹组织内容的权限,事实上Android从面世开始就支持这个功能, Android文件夹不但支持放入程序图标,还可以存放通讯录, 甚至 facebook 联系人等信息,长按手机屏幕就可以在桌面建立文件夹。
6.重命名文件夹建立了文件夹后你可能需要修改它的名称,只需要 打开文件夹,长按顶部的名称就可以调出重命名文件夹的窗口。
7.查看系统日期Android新用户可能觉得查看系统日期有点麻烦,其实 只要按住屏幕顶部左上方的提醒栏,就会显示今天的日期,赶快试 试吧。
8.挂载你的SD 卡Android系统基于Linux 内核,所以使用外部磁盘之 前必须mount 挂载后才可以正常使用。使用USB 线连接手机和电脑 时,手机会提示挂载SD 卡,必须点击完成挂载后才可以在SD 卡里 拷贝或者删除数据。
9.设置键盘快捷方式很多用户迷恋物理全键盘的另外一个重要原因 就是Android支持大量的键盘快捷键,通过快捷键可以快速调用相关程 序,可以在系统设置>应用程序>快速启动里设置
10.下载更多Android动态壁纸Android2.1开始系统支持的另外一个功能 就是动态壁纸,虽然动态壁纸可能会让你的手机耗电量增加,不过 却能让你的手机看起来更酷,如果你喜欢耍酷,在AndroidMarket 搜索 live wallpaper,会有很多动态壁纸等待你选择。
11.快速切换主屏Android系统一般提供5个主屏,或许你觉得每次滑动 手指切换太麻烦,可以按一下home 键,然后就可以选择进入特定的 主屏,HTC Sense 的手机还支持多点触摸调出所有主屏幕供选择。
12.添加一个快速导航键Android2.1系统支持用户建立地图导航的快 捷方式,选择任意一个导航线路都可以在桌面建立一个快捷菜单, 可以在出行前设定好导航的线路,需要时点击快捷菜单节省时间,
13.设置双击屏幕放大的级别绝大多数不支持多点触摸的Android手机, 在使用浏览器浏览网页时都可以通过双击屏幕放大网页内容,而且 你还可以在浏览器设置里“默认缩放”选项选择三种放大级别,这样 每次使用双击放大时的效果都不同。
14.改变Android浏览器字体Android手机终端千差万别,不同屏幕和分辨率 的手机最佳的浏览字体都不同,只需要在浏览器设置里设置合适的 字体大小,就可以提高阅读效率。
15.搜索网页特定内容在浏览器设置>更多>查找选项可以用来搜 索网页内容里的特定字段,帮助你快速查找相关内容,这也是PC 浏 览器的标准功能之一。
16.语音输入Android2.1系统开始支持语音输入功能,虽然处理起来有 些延时,如果你勤加练习还是可以做到基本正确输入,这对练习英 语口语的同学也是一条途径。
17.Android字典造词功能在使用Android键盘输入一个特定词语时,你可以 长按它然后选择添加到建议词语区域,这样就可以把这个词加入安 卓字典,下次输入时只需打入前几个字目就可以调出这个词。
18.同步手机照片到Picasa 相册虽然Google 的Picasa 网络相册不及 Flickr 受欢迎。不过Android2.1的3D 相册开始支持自动同步手机照片 到Picasa 帐户,不需要第三方软件就可以设置同步给了很多用户使 用Picasa 的理由,不过悲剧的是Picasa 在国内无法正常打开,原因 大家都懂的。
19.下载网页图片浏览网页时想保存图片,只要长按图片就可以单独 保存,保存的图片可以在相册程序中查看。
20.管理Android通话记录Android通话记录非常方便,长按任意一条播出或 者接入电话记录就可以选择删除,非常easy。
21.使用Facebook 头像作为通讯录联系人照片如果你的Android手机安 装了Facebook 官方程序,可以设置自动从Facebook 下载头像作为 联系人照片。你还可以通过文件夹功能在手机桌面建立一个 Facebook 通讯录文件夹,区分你的现实世界好友和网络好友。
22.浏览器多功能按钮Android2.1浏览器地址栏有一个多功能的按钮, 当网页正在载入时,他显示为“X”用来取消载入,一旦页面载入完成 后它会变成书签添加和历史记录管理工具,使用起来非常方便。
23.Android网页浏览历史记录快捷键打开浏览器长按手机返回键就会 调出网页浏览历史记录窗口,比使用菜单调用要方便非常多,浏览 器重度使用者必备。
24.使用浏览器“标签页”功能PC 上的浏览器“标签页”已经算是基本 功能,Android手机浏览器其实也支持标签页浏览器,只是使用起来稍 显复杂:浏览网页时长按一个url 就可以选择在新窗口打开,然后使 用Menu 键,再选择窗口选项查看任意标签页。
25.Android设置过个Gmail 帐户从Android2.1系统开始支持多帐户设置, 打开Gmail 程序, 通过Menu>帐户>添加帐户就可以增加一个或者 多个gmail 帐户,不过目前Android多账户融合做的还不够完美,使用起 来会有一些问题。
Android数据库操作 第3篇
1 Android安全体系结构
操作系统的安全性目的就是为了保护移动设备软件、硬件资源,包括CPU、内存、外部设备、文件系统和网络等。Android系统为了安全性,提供如下主要安全特征:操作系统严格的分层结构、应用沙盒、安全进程通信、授权和签名等。Android作为开放平台, 它的设计和实现细节完全暴露,因此对安全性要求更加严格,设计时首先要重点考虑的就是平台结构设计问题,Android系统的体系结构设计为多层结构[2],如图1所示。这种结构在给用户提供安全保护的同时还保持了开放平台的灵活性。
Android系统结构由4层组成,从上到下分别是:应用层(Applications)、应用框架层(Application Framework)、运行时(Android Runtime)、类库层(Libraries)和Linux内核(Linux Kernel)组成。应用层由运行在Android设备上的所有应用构成,包括预装的系统应用和用户自己安装的第三方应用。大部分应用是由Java语言编写并运行在Dalvik虚拟机中;另一部分应用是通过C/C++语言编写的本地应用。不论采用何种编程语言,两类应用运行的安全环境相同,都在应用沙箱中运行。应用框架层集中体现Android系统的组件设计思想。框架层由多个系统服务(System Service)组成。Android应用由若干个组件构成,组件和组件之间的通信是通过框架层提供的服务集中调度和传递消息实现的,而不是组件之间直接进行的。框架层协调应用层的应用工作提升了系统的整体安全性。类库层主要由类库和Android运行时两部分组成。其中类库由一系列的二进制动态库构成,大部分来源于优秀的第三方类库,另一部分是系统原生类库;通常使用C/C++语言开发。Android运行时由Java核心类库和Android虚拟机Dalvik共同构成。Java核心类库包括框架层和应用层所用到基本Java库。Dalvik是为Android量身打造的Java虚拟机,它与标准Java虚拟机(JVM) 主要差别在于Dalvik是基于寄存器设计的,而JVM是基于数据栈的,前者能够更快的编译较大的应用程序。Dalvik允许在有限的内存中同时运行多个虚拟机的实例,每一个Dalvik应用作为一个独立的Linux进程执行,可防止在某一虚拟机崩溃时所有应用都被关闭。最后一层是Linux内核层,该层提供核心系统服务包括安全、内存、进程、网络和设备驱动等功能。
2系统内核安全
在操作系统层Android充分利用已有的Linux内核安全机制,并在此基础上进行改进如应用沙盒和安全IPC(inter-process com- munication,进程通信),这些安全机制可以保证即使本地代码程序也被限制在应用沙盒中安全运行。2.1 Linux安全性
2.1 Linux安全性
Android平台的基础是Linux内核。Linux操作系统经过多年的发展,已经成为一个稳定的安全的被许多公司和安全专家信任的安全平台[3]。作为移动平台的基础,Linux内核为Android提供了如下安全功能:基于用户授权的模式、进程隔离、可扩展的安全IPC和移除不必要的不安全的内核代码。作为多用户操作系统,Linux内核提供了相互隔离用户资源的功能。通过隔离功能,一个用户不能使用另一个用户的文件、内存、CPU和设备等。
2.2应用沙盒
Android平台把Linux基于用户的授权模式作为标识和隔离应用程序资源的方式。系统为每个应用分配一个用户ID(UID), 并在该设备上一直保持这个数值;运行时,把应用当作编号为UID的用户在一个单独的进程运行。简而言之,Android系统中一个UID对应一个进程。这一点与其它操作系统不同,在其它操作系统中,一个UID可以拥有多个进程。Android采用这种方式作为内核层的应用沙盒(Application Sandbox)。通过分配UID给应用程序这种方式,增强了系统的安全性。默认情况下,应用之间不能相互操作,应用访问操作系统的功能也受到限制。例如,在没有授权的情况下应用A想要读取应用B的数据或想要使用电话功能都会被操作系统拒绝。由于应用沙盒位于内核层,所以这种安全模式可以作用到图1所示的Linux内核之上的所有层。在有的平台上,为了增强安全性,开发者被限制在指定的开发框架、API集或开发语言上。但在Android平台中,采用C/C++与采用Java编写的应用其安全性都一样,因为最终都运行在沙盒中。在有的操作系统中内存错误会导致系统安全性降低。但在Android中由于应用及其数据存在于沙盒中,内存错误至多影响当前应用而不会影响其它应用。
2.3 文件系统许可/加密
在Linux环境中,文件系统许可(permission )可以保证一个用户不能修改或读取另一个用户的文件。Android系统中每个应用都分配一个用户ID,应用作为一个用户存在,因此除非开发者明确指定某文件可以供其它应用访问,否则一个应用创建的文件其它应用不能读取或修改。文件系统加密功能可以对整个文件系统进行加密。内核利用dm-crypt技术创建加密文件系统。dm- crypt技术是建立在Linux内核2.6版本的device-mapper特性之上的。device-mapper是在实际的块设备之上虚拟层可以方便开发人员实现镜像、快照、级联和加密等处理。为了防止系统口令攻击(例如通过彩虹表或暴力破解等方法),口令采用SHA1加密算法进行保存。为了防止口令字典攻击,系统提供口令复杂性规则,规则由设备管理员制定,由操作系统实施。
2.4 其它
内核安全措施还包括丰富的数据加密函数、内存安全管理增强、刷机时保护用户数据等。Android系统为应用开发提供了一组实现加密功能的API函数,包括标准的加密算法[4]如AES, RSA, DSA, 和SHA等;及更高层的安全网络协议如SSL和HTTPS。据统计,操作系统中超过50%的安全漏洞都是由内存溢出引起的。为此,Android系统提供的SDK、编译器和工具可以增强保护内存的力度,更大程度防止内存溢出。随着更高版本的Android系统推出,内存管理的功能也不断增强,包括ProPolice、safe_iop、增强的dlmalloc、Address Space Layout Randomization (ASLR) 、PIE (Position Independent Executable)、dmesg_restrict等。其中ASLR是一种针对缓冲区溢出的安全保护技术,通过对堆、栈、共享库映射等线性区布局的随机化增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。ASLR可以有效的降低缓冲区溢出攻击的成功率。
3 Android应用安全
Android系统为移动设备提供了一个开源的平台和应用程序开发环境。通常程序开发语言采用Java,并运行在Dalvik虚拟机中,对于游戏等性能要求较高的程序也可以采用C/C++编写。程序安装包以.apk为扩展名。一个应用程序通常由配置文件(An- droidManifest.xml)、活动(Activity)、服务(Service)和广播接收器(Broadcast Receiver)组成等组成。
3.1 Android权限模式
所有的应用程序都运行在应用沙盒中,默认情况下,应用只能存取受限的系统资源。这种受限机制的实现方式有多种,包括不提供获取敏感功能的API函数、采用角色分离技术和采用权限模式。权限模式最常用,通过这种方式把用于存取敏感资源的API函数只授权给值得信任的应用程序,这些函数主要涉及的功能包括摄像头、GPS、蓝牙、电话、短信和网络等。应用程序为了能够存取这些敏感资源,必须在它的配置文件中声明存取所需资源的能力。当用户安装这种程序时,系统会显示对话框提示程序需要的权限并询问用户是否需要继续安装。如果用户继续安装,系统就把这些权限授予对应的程序。安装过程中,针对用户只想授权其中的某些权限的情况系统是不支持的。安装完毕后,用户可以通过“系统设置”功能允许或拒绝某些权限。对于系统自带的应用程序,系统不会提示请求用户授权。如果程序的配置文件中没有指定受保护资源的授权,但程序中调用了资源对应的API函数,则系统抛出安全异常。程序的配置文件中还可以定义安全级别(protectionLevel )属性,这个属性告诉系统其它哪些应用可以访问此应用。
3.2安全进程通信
尽管Linux内核提供了多种进程通信(IPC)机制,包括管道、信号、报文、信号量、共享内存和套接字等。但出于安全性考虑An- droid增加了新的安全IPC机制,主要包括Binder、Service,Intent和ContentProvider。Binder是一个轻量级的远程过程调用机制,它可以高效安全地实现进程内和进程间调用[5]。Service运行在后台并通过Binder向外提供接口服务,通常不具有可见的用户界面。In- tent是一个简单的消息对象,此对象表示想要做某事的“意向”。ContentProvider是一个数据仓库,通过它可以向外提供数据。例如一个程序可以获取另一个应用通过ContentProvider向外公布的数据。在编写程序时如果需要进程通信,虽然可以使用Linux提供的传统的方式,但还是推荐使用Android提供的安全IPC框架,这样可以避免传统方式存在的通信安全缺陷。
3.3应用程序安装包签名
所有的Android应用程序安装包(apk文件)必须进行签名,否则程序不能安装在Android设备或模拟器中。签名的目的用于标识程序作者、升级应用程序。当没有签名的应用在安装时,包管理器就会拒绝安装。签名的应用在安装时,包管理器首先验证APK文件中的签名证书是否正确,如果正确,首先把应用放置在应用沙盒中,然后系统为它分配一个UID,不现的应用有不同的UID;如果证书签名与设备中其它签名的应用相同,表示是同一个应用,则提示用户是否用新的应用更新老的相应。该签名证书可以由开发者自己设定称之为自签名(self-signed)证书,也可以由第三方的认证机构授权。系统提供自签名证书功能使得开发者不再需要借助外部的帮助或授权即可以自己进行签名。Google公司提供了完整方便的签名工具为用户开发提供便利。
4 结论
Android数据库操作 第4篇
互联网创造了经济神话,而2010年,移动互联网正以巨大的市场潜力、诱人的发展前景以及任何人都难以预测的发展速度,成为下一个焦点。
近日,市场研究公司Pew Research Centre“互联网和美国生活”研究项目发布了一份新的报告,该报告指出,现在将近90%的美国人拥有手机、电子图书阅读器或平板电脑等移动技术设备。基于消费市场的火爆,作为个人电脑和互联网智能手机等终端设备的灵魂,智能操作系统领域纷争此起彼伏,热闹非凡。
桌面之争 霸主老矣?
2010年对于个人电脑操作系统厂商来讲是重要的一年。作为市场上的领跑者,微软显示出强悍的霸主气势。CNZZ研究数据显示,到2010年末,Windows系列操作系统基本覆盖了国内个人电脑的桌面,使用率超过99%,其中Windows XP占市场份额的87.94%,Windows Vista占2.37%,Windows 7占8.42%。但数据同时也显示,从2010年下半年开始,Windows系列操作系统的使用率开始略有下降,平均每月减少0.06个百分点,全年使用率共减少0.28%。
事实上,消费者对垄断个人桌面长达5年之久的“史上最成功操作系统”Windows XP已经开始感到厌倦,尽管其让出的市场份额很小,但是相对庞大的中国市场而言,对于其他系统厂商依然意味着不小的利润和希望。而微软另一款自诞生以来便饱受争议的操作系统Windows Vista,2010年使用率一路下滑,至年底已经降至2.37%。与Windows XP处于同一时代的Windows Vista想必常常会有“既生瑜,何生亮”的感慨。
与老旧的Windows XP和生不逢时的Windows Vista相比,表现抢眼的Windows 7可谓集万千宠爱于一身。微软发布的数据显示,至2010年10月,其在上市的头一年里在全球已经卖出了2.4亿份,是微软销售最快的操作系统,2010年Windows 7的使用率也从年初的2.09%一路飙升至年末的8.42%。事实上,能在自家兄弟Windows XP的巨大压力下取得如此成绩实属不易。据媒体报道,微软将在2012年推出下一代操作系统Windows 8,这样看来,留给本代明星Windows 7的时间已经不多了,Windows XP在国内市场的压倒性优势将是其前进道路上最大的障碍。
在微软绞尽脑汁希望能让Windows XP的用户改用新系统的同时,其最大的个人电脑系统竞争者苹果公司也在加紧努力,以争夺更多的市场份额。今年苹果公司并没有推出新的Mac OS X系列操作系统,而是以继续推出新款电脑来吸引消费者。凭借品牌效应和精美设计,苹果电脑操作系统扩大了其市场份额。CNZZ数据显示,2010年桌面操作系统的使用率当中,苹果Mac OS占0.22%。尽管这一比例相比发达国家来讲还很低,但考虑到国内庞大的使用基数、苹果昂贵的售价以及该公司在今年的主要发展重点,这依然可以算是一个很好的成绩。
乔布斯2010年初发布iPad,刮起了一股平板电脑的旋风。在以开放、节能、环保、多功能、可移动为特点的移动互联网时代,外形介于笔记本和掌上电脑之间,处理能力大于掌上电脑,比之笔记本电脑,移动性和便携性都更胜一筹的平板电脑注定在2011年依然会大行其道。事实上,平板电脑这一概念最早由微软提出,比尔·盖茨声称平板电脑应该采用X86架构的CPU,必须能够安装X86版本的操作系统,如Windows系统、Linux系统或Mac OS系统,而基于移动环境开发的iPhone OS显然不符合微软定义的要求,而且乔布斯本人也从未将其称为平板电脑。日前英国芯片及操作系统集成商“速霸科技”携手Netbee公司等无线互联网手本技术联盟共同提出了“手本”的概念,并将其定义为:一种专注于移动互联网的专属设备,既像手机一样携带便利,又兼顾笔记本的强大功能,可见手本是专为无线互联网设计的设备。如此看来,严格意义上而言,iPad应归为“手本”。Netbee手本已于2010年7月14日在英国上市,采用woowuo操作系统,该系统为云操作系统,兼容所有X86架构系统的软件应用,并且支持一秒开机、开机直通互联网。
受益于iPad的成功,iPad处理器设计厂商ARM预计将公布利润增长70%的年度财报。据外媒报道,ARM全年的营收预计将增加大约1亿英镑,达到4亿英镑(6.34亿美元)。更为耐人寻味的是,微软已决定其下一代Windows操作系统将以ARM的微芯片设计为基础,可见事易时移,攻守之势异也。
尽管iPad的定位尚不够清晰明朗,但其面市9个月销量就已超过1400万台,在苹果充分培育市场的情况下,多家巨头纷纷选择跟进。北京时间2月10日凌晨,惠普召开WebOS新品发布会,推出了9.7英寸的平板电脑TouchPad,该平板电脑使用惠普去年斥资12亿美元收购Palm后获得的WebOS操作系统。而谷歌近日也将发布代号为“蜂巢”(Honeycomb)的谷歌Android 3.0操作系统,该系统将是全球首款专门针对平板电脑而设计的Android操作系统,具有3D效果和观看选项,可以充分利用平板电脑较大的屏幕。
尽管微软对Windows 7平板一直抱有乐观态度,但经营Windows 7对其而言可能就是一种苦痛。iPad的热销已经证明,平板电脑的成功并不需要在其中配备非常全面的操作系统。事实上,到目前为止,普通用户,甚至包括一些企业用户并没有非常在意平板电脑的操作系统,将来他们可能也不会太关注。
在移动互联时代,有人预测集移动商务、移动通信和移动娱乐为一体的平板电脑将成为“笔记本电脑的终结者”。而面对云集的强敌,作为桌面操作系统的昔日霸主,微软在2011年又该如何续写旧时辉煌?
互联网手机 硝烟四起
移动互联网的发展已经使手机进入到一个快速更新的时代,随着互联网手机与移动互联网应用更为紧密地结合在一起,功能手机将逐步被淘汰出局,从发展势头和市场份额来看,2011年互联网手机必成市场主流。
目前在手机市场上,硬件终端已不再是竞争重点,操作系统的竞争将日益突出。2011年,硝烟四起,Symbian还在吃老本、Android忙圈地、iOS称霸高端市场、WP7虎视眈眈、Meego蓄势待发、BlackBerry在中国初显野心,可谓多家争雄、看点十足。
作为手机操作系统中的老前辈,Symbian拥有多年的发展历史。近年来诺基亚加速推广基于Symbian操作系统的智能手机,在系统能力和易用性方面得到了市场和手机用户们的广泛认可,一直占据手机操作系统的市场霸主地位。但2月调研公司Canalys发布的调查报告显示,2010年第四季度谷歌Android系统首次超越Symbian,宣告其保持了10年的统治地位被彻底打破。
由此看来,过于保守和陈旧的Symbian系统已经不能搭载移动互联的创新欲望,崭露头角的Android正在打开局面。在报告中,数据对比论证了这一事实,去年第四季度Android手机销量为3290万部,而Symbian手机销量为3100万部。
作为互联网领域的霸主,Google向移动互联网渗透的意图早已显露,2007年Google发布基于Linux平台的开源手机操作系统Android,至今已有三年。市场研究公司尼尔森(Nielsen)发布的最新报告显示,2010年12月,谷歌手机激活数量拥有明显的领先优势,当时有43%的新用户都选择了基于Android系统的设备。随着Android市场份额的扩大,诺基亚等传统手机终端制造商感到了日益强大的威胁。
Android被大家认可前,曾有看法认为,市面上的手机只分两类:“iPhone和iPhone的模仿者”。确实在一段时间里,iPhone获得了长足的进步而其他品牌和系统却一度停滞不前。2010年iPhone 4的热销确保了苹果的应用营收,一直稳步前进的苹果在财富100强企业中的影响力也不断加深。
近日iPhone 4已进入Verizon商店,据摩根大通分析师菲尔·库西克(Phil Cusick)估算,Verizon无线 iPhone 4的预售量可能超过了50万台。按照Verizon的报告,仅在开售前两个小时,iPhone 4预售量就打破了运营商以前的首日销售记录。
经典的外观设计、流畅的操作体验、出色的硬件配置,还有海量的体验应用,这些都是苹果的杀手锏,但时过境迁,竞争壁垒已被打破,随着Google的奋起直追,这种情况已发生根本的改变。2011年2月,谷歌宣布推出Android网络商店,该商店将允许用户通过网络浏览器选择应用程序,并且把这些应用程序远程安装到用户的智能手机或平板电脑中。
随着新版Android操作系统“蜂巢(Honeycomb)”的即将面世,目前的发展势头似乎表明,谷歌的这一系统已经具备了全新的发展动力。但是,RIM新版的黑莓手机也已于近期浮出水面。
事实上,在企业领域,RIM仍是一支重要的主导力量,约有5500万用户,占据了企业用户的多数比例。2010年10月,RIM中国区总裁谢国睿在ICT中国高层论坛上表达了欲将中国打造成黑莓核心市场的意图,尽管执着于商务机血统的黑莓尚未获得中国用户的广泛认可,但是作为优秀的操作系统,BlackBerry OS打开中国市场相信只是时间问题。
除了Android系统的强势发展、苹果iPhone 4的震撼登场以及黑莓进军中国的决心之外,微软Windows Phone 7系统的问世无疑为竞争异常火爆的互联网智能手机市场再添一份火药味。过去几年微软Windows Mobile所占份额一路下滑,2010年其市场份额仅剩4.2%,但微软并没有放弃在该领域的努力。目前新生待命的WP7贡献尚不明朗,不知迟到的WP7是否能力挽狂澜,在2011年给微软的移动业务部门带来些许安慰。
面对Android手机销量的大涨,诺基亚凭借Symbian一统江湖的局面或将结束,众多厂商已经纷纷投向Android的怀抱。国内的联想、华为、中兴、酷派等都宣布推出基于Android操作系统的手机,Symbian操作系统主流终端生产厂商仅剩诺基亚。据Informa预测,2012年,Android手机销量将超过诺基亚Symbian手机。
就目前而言,Android凭借免费、开源和良好产业运作策略,赢得了更多的发展机遇,并已呈现愈战愈勇的态势。为推广Android平台技术,Google和几十个手机相关企业建立了开放手机联盟,正所谓“众人拾柴火焰高”,2011年Android的星星之火必成燎原,而Symbian面对Google、苹果等强大的竞争对手,挽回局面的时间并不充裕。
Android数据库操作 第5篇
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ForecastData situation = null;
................
Cursor cursor = mContext.getContentResolver().query(WEATHER_URI, null,
null, null, null);
try {
if (cursor != null && cursor.moveToFirst()) {
...........
cursor.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (cursor != null) {
cursor.close();
}
}
return situation;
}
初看一下没有什么问题,但如果Cursor cursor = mContext.getContentResolver().query这里返回的错误还是会有可能造成程序的未关闭Cursor,因此我们改成标准写法:
?
1
2
3
4
5
6
7
8
9
Cursor cursor = null;
try {
cursor = getContentResolver().query(URI, .....);// 1
//dosomething
} finally {
if (cursor != null) {
cursor.close();// 2
}
}
这样改了之后,运行了很多个版本都一直没有问题,
android开发数据库Cursor 错误android.database.CursorWindowAll
,直到有一天一个同事发现可能查询数据库比较耗时。因此把方法放到线程里面去执行,而已每次查询的时候都会创建一个线程。没有想到上面代码又出错误了,如果您稍不留意不会怀疑这块代码的问题,因为try-finally写法不存在逻辑上的问题。由于这里未考虑到多线程场景,try-finally并不能保证query打开游标在dosomething时,被其他线程再次调用query打开游标。所以当遇到存在多线程的调用时必须对游标打开到关闭时间段添加锁,即这里是对try-finally块加锁。
下面简单解释一下:
假设:线程A执行到1处创建了一个Cursor,然后dosomething比较耗时........
线程B又来查询数据库,因此到1处又创建一个Cursor,此时如果AB执行完,就会关闭锁,看起来没有问题,但由于是同一个对象,所以AB关闭的cursor都是B创建的,因此
android 数据库 总结 第6篇
第一步:自己编写一个类 继承 SQLiteOpenHelper,如下
package com.example.wxj2048;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class Dbdao extends SQLiteOpenHelper{ private static final String DBNAME = “mldn.db”; private static final int DBVERSION = 1; private static final String TABNAME = “game2048”; public Dbdao(Context context){ super(context, DBNAME, null, DBVERSION); } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub String sql =“ CREATE TABLE ”+ TABNAME+“ (” + “ id INTEGER ,” + “ score INTEGER ”+ “) ”; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub String sql = “ DROP TABLE IF EXISTS ” + TABNAME; db.execSQL(sql); this.onCreate(db); } public void insert(Integer score){ SQLiteDatabase db = getWritableDatabase; ContentValues values = new ContentValues(); values.put(“id”, 1); values.put(“score”, score); db.insert(TABNAME, null, values); db.close(); } public void delete(){ SQLiteDatabase db = getWritableDatabase(); String[] data = new String[1]; data[0] = “1”; db.delete(TABNAME,“id = ?”,data); db.close(); } public Integer query(){ SQLiteDatabase db = getWritableDatabase(); Cursor c = db.query(TABNAME, null, null, null, null, null, null); c.moveToFirst(); int index = c.getColumnIndex(“score”); String result = c.getString(index); db.close(); return Integer.valueOf(result); }}
第二步;就可以创建 Dbdao 对象,然后使用数据库
我们总结一下 Cursor 的重要方法
close()
关闭游标,释放资源
getColumnCount()
返回所有列的总数
getColumnIndex(String columnName)
返回指定列的名称,如果不存在返回-1
getColumnName(int columnIndex)
从给定的索引返回列名
getColumnNames()
返回一个字符串数组的列名
getCount()
返回Cursor 中的行数
moveToFirst()
移动光标到第一行
moveToLast()
移动光标到最后一行
moveToNext()
移动光标到下一行
访问 Cursor 的下标获得其中的数据
int nameColumnIndex = cur.getColumnIndex(People.NAME);
Android数据库操作 第7篇
SQLite: SQLite是一个轻量级的数据库,支持基本SQL语法,是常被采用的一种数据存储方式。Android为此数据库提供了一个名为SQLiteDatabase的类,封装了一些操作数据库的API。
SharedPreference: 除SQLite数据库外,另一种常用的数据存储方式,其本质就是一个xml文件,常用于存储较简单的参数设置。
File: 即常说的文件(I/O)存储方法,常用语存储大数量的数据,但是缺点是更新数据将是一件困难的事情。
ContentProvider: Android系统中能实现所有应用程序共享的一种数据存储方式,由于数据通常在各应用间的是互相私密的,所以此存储方式较少使用,但是其又是必不可少的一种存储方式。例如音频,视频,图片和通讯录,一般都可以采用此种方式进行存储。每个Content Provider都会对外提供一个公共的URI(包装成Uri对象),如果应用程序有数据需要共享时,就需要使用Content Provider为这些数据定义一个URI,然后其他的应用程序就通过Content Provider传入这个URI来对数据进行操作,
PS: URI由3个部分组成:“content://”、数据的路径、标识ID(可选)。
SQLite是一种转为嵌入式设备设计的轻型数据库,其只有五种数据类型,分别是:
NULL: 空值
INTEGER: 整数
REAL: 浮点数
TEXT: 字符串
BLOB: 大数据
在SQLite中,并没有专门设计BOOLEAN和DATE类型,因为BOOLEAN型可以用INTEGER的0和1代替true和false,而DATE类型则可以拥有特定格式的TEXT、REAL和INTEGER的值来代替显示,为了能方便的操作DATE类型,SQLite提供了一组函数,详见:www.sqlite.org/lang_datefunc.html。这样简单的数据类型设计更加符合嵌入式设备的要求。关于SQLite的更多资料,请参看:www.sqlite.org/
在Android系统中提供了android.database.sqlite包,用于进行SQLite数据库的增、删、改、查工作。其主要方法如下:
beginTransaction: 开始一个事务。
close(): 关闭连接,释放资源。
Android数据库操作 第8篇
1 Android安全机制
Android的安全机制是在Linux安全机制基础上的发展和创新, 是传统的Linux安全机制和Android特有的安全机制的共同发展。Android安全机制中的主要出发点是, 在默认的情况下, 应用程序任何能够给用户、系统或者其他应用程序带来负面影响的操作是不可以执行的。Android是一个支持多任务的系统, 其安全机制依托于数字签名和权限, 系统中的应用程序之间一般是不可以互相访问的, 每一个应用程序都有独立的进程空间。
1.1 用户ID
Android系统是基于Linux内核的, 对应用程序文件和系统文件的访问都要遵循Linux的许可机制, 并将这种机制用于管理应用程序。在Android应用程序安装成功后, 系统就为其指定了一个唯一的用户名, 对应着系统中唯一的UID, 每个用户可以属于一个或者多个组。如果在应用程序执行期间有越轨或超越权限操作的行为时, 用户将会得到Android的警告信息。
1.2 应用程序数字签名
数字签名是过某种密码运算生成一系列符号及代码组成电子密码进行签名, 来代替书写签名或印章。签名的主要作用是身份认证、完整性验证和建立信任关系。
Android系统不会安装没有进行签名的应用程序, 所有应用程序进行签名认证是必须的, 但签名认证是第三方证书认证机构可以不参与的。Android系统对签名证书的过期时间检查是在应用程序安装时进行的, 这就意味着如果一个应用程序在安装后才发现其签名证书过期, 就不会影响应用程序的运行。需要注意的是, 应用程序必须使用同一个证书进行签名才可以升级到新的版本, 两个应用程序使用同一个数字签名才可以相互授予权限来访问彼此的资源。
1.3 Permission机制
Android是一个权限分离的系统, 它利用Linux已有的权限管理机制, 为每一个应用程序分配不同的UID和GID, 使不同的应用程序之间的私有数据和访问达到隔离的目的。如果使不同的应用程序之间的私有数据和访问达到共享, 就需要声明对应的权限。为此, Android在原有的基础上进行了扩展, 提供了permission机制, 它主要是用来对应用程序可以执行的某些具体操作进行权限细分和访问控制。在manifest文件中添加一个permission标签, 就定义一个permission。另外, Android为了对某些特定的数据块进行ad-hoc方式的访问, 还提供了per-URI permission机制。
一个权限主要包含权限名、权限组和保护级别, 若干个具体权限构成一个权限组, 权限组是根据权限的功能划分出来的, 每个权限有不同的保护级别 (普通级别、危险级别、签名级别和系统/签名级别四类) , 不同的保护级别代表了应用程序使用此权限时的认证方式。
1.4 沙箱隔离
Android引入沙箱的概念来实现应用程序之间的分离, 具有允许或拒绝一个应用程序访问另一个应用程序资源的权限。
每个应用程序在安装后都有一个UID号, 且一直不会改变。系统根据UID号为每个应用程序建立一个沙箱, 不同的进程空间中运行着不同应用程序的代码, 且不能随意的互访彼此的进程空间。如果两个应用程序的UID不同, 运行在基本沙箱进程中的应用程序默认情况下是没有被分配权限, 因此它们无法交互彼此的数据, 此类应用程序要想访问系统文件、资源文件等变得不太可能, 这种相互隔离的沙箱模式保证了数据的安全性。那么, 不同的应用之间需要共享资源该怎么办, 可以通过请求权限来解决, 即设置应用的shared Userld属性, 或者是与其他受信任的应用程序运行在同一进程中, 从而共享对其数据资源的访问。如此一来, 相同用户的应用程序的资源和数据就如同使用应用程序自身的资源一样可以互相访问和使用。但是, 若想两个应用程序分配同样的UID, 那么必须使用相同的签名, 且请求设置了同一个shared Userld。
2 Android的安全隐患
Android系统的开源性势必会给我们带来一系列的安全隐患, 有Linux内核安全漏洞造成的, 有Android自身权限机制不健全造成的, 也有基于硬件损伤造成的, 但也正因为开源性才可以让我们有自由创造和发挥的空间。
1) 基于硬件的问题主要体现在硬件损伤、温度过高等因素导致便携设备不能工作的现象。由于Android系统过于开放, 至少在手机死机现象频繁发生的问题上扮演了重要角色。
2) 在Linux内核安全上, 有一个哈希算法问题, 即当攻击者把经过特殊构造的包传给系统并接收后, 服务器的资源因哈希表产生冲突而被耗尽。哈希算法是把一组关键词经过某种哈希运算后, 把得出的相同的哈希值存储到同一个地址区间, 从而使哈希表变成了一个单向链表, 插入操作的复杂度因此也变得比较大, 从原来的O (n) 级变为O (n*n) 级, 如此导致处理器资源被大量消耗, 服务器拒绝服务, 也就产生了Do S攻击。还有Linux内核中的整数溢出漏洞问题, 它是由于一个正数/负数不匹配整形漏洞引起的, 存在于XDR处理器例程中。当Linux系统的XDR处理程序接收到经过攻击者精心构造的包时, 包的大小被程序中的检测语句错误的估计, 致使大批的内存不断的从内核中复制出来, 导致系统瘫痪, 内核数据遭受破坏。当然, Linux内核还有其他的一些问题, 此处不再叙述。
3) Android自身权限机制问题。首先, 不透明的权限问题。用户在安装应用时, 系统会把该应用使用的权限列表以界面的方式弹出告诉用户。但是, 为什么用这些权限, 用户或许不清楚, 也许根本就不了解、不关心, 由于用户要使用这个应用所以必须安装, 从而造成不必要的损失。其次, 不可分的权限集问题。上面提到, 应用程序安装后, 系统已经给出了使用的权限列表, 权限的使用只限于该列表而不能超出该列表。但问题的关键在于, 用户不能选中权限列表中的部分选项, 要么全选, 要么不选, 都是一种绝对的状态, 用户只有全选权限才能使用该应用程序, 否则只能放弃使用。最后, 研发工作者在研发应用程序的过程中, 由于某种原因声明了一些或许根本就没有使用到的权限, 那么在安装应用程序时, 也会告诉用户, 从而增加了系统的负担和一些不安全的因素, 用户由于担心安全问题而不敢随意安装该应用程序。
3 结束语
Android是一款非常出色的操作系统平台, 随着Andriod系统智能终端的日益推广, Android操作系统的安全性越来越重要, 在其快速发展中不可避免的存在不完善的地方。Android平台的开源造成了系统易被攻击, 随着安全技术的不断发展和进步, 开源的Android平台的安全性可以不断地被改进, Android系统的安全漏洞会得到有益补充。除了要不断改善Android自身的安全, 用户也应该加强安全维护意识, 还要对第三方程序开发商进行严格的监管, 制定出有效的应用程审核和管理机制, 这样才能使得用户对Android操作系统的支持越来越多, 才能更好地保障整个系统的安全性。
摘要:Android系统自推出以来, 就以明显的优势逐渐扩大市场占有份额。Android是一个开放性的系统, 备受开发者的青睐, 其安全性至关重要。研究了Android系统的用户ID机制、应用程序签名机制、沙箱隔离机制等安全策略, 分析了它在硬件方面、Linux内核方面及Android自身权限机制方面存在的安全隐患。
关键词:Android,安全机制,permission
参考文献
[1]蒋绍林, 王金双, 张涛, 等.Android安全研究综述[J].计算机应用与软件, 2012, 29 (10) :205-210.
[2]刘昊辰, 罗森林.Android系统木马隐藏及检测技术[J].信息网络安全, 2013, (01) :33-37.
[3]刘志伟.Android操作系统安全性增强方案的设计与实现[D].西安:西北大学, 2012.
[4]朱涛.基于Linux内核的Android安全探讨[J].电子制作, 2013, (05) :98-98.
[5]李文龙, 王灵莉.Android安全机制及应用软件安全性的研究[J].中国新技术新产品, 2013, (4) :1-3.
[6]李凡.Android系统安全机制的分析与增强[D].武汉:华中科技大学, 2012.
[7]华鹏.基于Android平台增强权限管理研究与实现[D].南京:南京理工大学, 2012.
Android数据库操作
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


