1、简述Android各个版本从1.0-12.0的演化更新内容。
答:(1)2008年9月发布的Android第一版:Android1.1;在Android 1.5版本之后开始为每一个版本以甜品的形式来命名,每个系统版本给予甜品的英文单词的首字母,并且系统版本越高,这个字母在英文26字母表中越靠后。
(2)Android 1.5 Cupcake:除了带来图标ID上的变化外,还有虚拟键盘,在08年前后的智能手机主要还是依赖物理键盘进行输入,而这个在Android 1.5中得到了改变。
(3)Android 1.6 Donut:带来主要变化是对不同分辨率屏幕的支持,独立于像素密度,这使得有更多可能的组合出现。
(4)Android 2.0/2.1 Eclair:从这个版本开始,对相机应用的提升改变比较大,在硬件方面开始支持LED闪光灯,也支持很多拍摄场景的调节,比如色彩效果、场景模式、对焦模式和白平衡。
(5)Android 2.2 Froyo:Android 2.2带来了速度的提升和WiFi热点的支持两个重要功能,速度的提升是因为有了Dalvik运行模式,其使安卓性能有了大幅提升,谷歌称性能提升了2到5倍。
(6)Android 2.3 Gingerbread:从姜饼开始加入了对更多传感器的支持,包括气压计和陀螺仪,这时的Android终于迎头赶上iOS尾巴。
(7)Android 3.0 Honeycomb:Android 3.0只是谷歌针对平板的体验进行兼容优化,在功能并没有太多的添加。
(8)Android 4.0 Ice Cream Sandwich:“Holo”界面的引入是Android 4.0最重大的更新,也成了Android往后版本更新的亮点,往后谷歌根据版本的迭代更新,都会对界面元素进行改变以保持新鲜感。
(9)Android 4.1/4.2 Jelly Bean:因受iOS语音助手Siri的刺激,从果冻豆开始谷歌引入了Google Now,作为以谷歌搜索为根基,时刻准备好给你提供任何事情的答案,而且还非常智能,Google Now还具有自我学习能力,根据用户的使用习惯发生改变。
(10)Android 4.4 KitKat:界面变得更加现代化,同时也使得低端机焕发新生,Android 4.4带来了很多性能上的提升,512MB RAM的老古董也能很好地运行KitKat,进一步扩展了Android市场占有率。
(11) Android 5.0/5.1 Lollipop:采用谷歌“Material Design”设计哲学,视觉效果更加扁平化,更加多姿多彩,并且动画过渡效果也使得其更加迷人。谷歌把原来的Dalvik虚拟机全部换成了ART模式,因为少了重新编译这个步骤,APP的运行速度上相比之前还是所提升的。
(12)Android 6.0 Marshmallow:加入了APP关联间的联动、Android Pay、Fingerprint Support三个重要的改变,其中Fingerprint Support增加了对指纹的识别API,谷歌开始在自建官方的指纹识别支持,力求Android统一方案变得更安全。
(13)Android 7.0 Nougat:加入了多任务分屏功能,谷歌从底层上实现多任务分屏操作更多的是增强应用的兼容性,引入了JIT编译器,APP的安装速度将比目前的安卓6.0提升最多75%,而最关键一点是所占用的空间同时减少50%,也引入了全新的VulkanAPI 图形处理器API,可以大幅减少系统动画对CPU的占用。
(14)Android 8.0 Oreo:APP的启动速度比Android 7.0快2倍,后台续航监控最大化限制不常用后台应用的活跃度,加入了分屏画中画模式,比起7.0变得变得更加自由和灵活。通知栏下拉之后变为彩色的背景通知,同时一些应用可以在系统中自己调用背景颜色。
(15)Android 9.0 Pie: 以机器学习为核心,打造“更加智能”的智能手机,安卓9.0可以让机器去学习用户,适应用户,从而让“智能”更加智能;应用可以借助本地硬件的学习成果,来触达更多受众,并为他们提供前所未有的体验。
(16)Android 10.0:Android 10包含多项功能升级,包括手势导航、通知栏管理、全局黑暗模式等等,通知管理新增了“优先”、“无声”和“自适应通知”三种功能,新增深色主题的背景.
(17)Android 11.0:系统主要增强了聊天气泡,安全性和隐私性的保护,电源菜单,可以更好的支持瀑布屏,折叠屏,双屏和 Vulkan 扩展程序等。
(18)Android 12.0:重新发现了代号为 “Columbus”的功能,并且优化了触发问题,新的手势需要更加用力敲击背面。新的双击背面手势可以截取屏幕截图、召唤谷歌 Assistant、打开通知栏、控制媒体播放或打开最近的应用程序列表。
2、Android中实现事件处理的步骤。
答:(1)将事件监听器注册到事件源;
(2)触发事件源上的事件;
(3)生成时间对象;
(4)触发事件监听器,事件被作为参数传入事件处理器;
(5)调用事件处理器做出相应。
3、android的intent的用途
答:Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
Intent是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由 Intent来协助完成 Android各个组件之间的通讯。比如说调用startActivity()来启动一个Activity,或者由broadcaseIntent()来传递给所有感兴趣的BroadcaseReceiver,再或者由startService()/bindservice()来启动一个后台的 service。所以可以看出来,Intent主要是用来启动其他的 activity 或者 service,所以可以将intent理解成activity之间的粘合剂。
答:(1)针对TCP/IP的Socket、ServerSocket;
(6)直接使用WebView视图组件显示网页。基于WebView 进行开发,Google已经提供了一个基于chrome-lite的Web浏览器,直接就可以进行上网浏览网页。
5、android中数据存储的三种方法
答:(1)文件存储.
将数据存储到文件:Context类中提供了一个openFileOutput()方法,可以用于将数据存储到指定的文件中。该方法接受两个参数:第一个参数是文件名,文件创建时使用,不可以包含路径,只是文件名,因为所有的文件都默认存于 /data/data/
从文件中读取数据:类似于将数据存储到文件中,Context类中还提供了一个openFileInput()方法,用于从文件中读取数据。这个方法要比openFileOutput()简单一些,它只接收一个参数,即要读取的文件名,然后系统会自动到 /data/data/
(2)SharedPreferences存储。
不同于文件的存储方式,SharedPreferences是使用键值对的方式来存储数据的。也就是说,当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。而且SharedPreferences还支持多种不同的数据类型存储,如果存储的数据类型是整型,那么读取出来的数据也是整型的;如果存储的数据是一个字符串,那么读取出来的数据仍然是字符串。
将数据存储到SharedPreferences中:首先、要向SharedPreferences 中存储数据,需要先获取一个SharedPreferences对象。获取的方法有两种:
1、Context类的getSharedPreferences()方法:接受两个参数,第一个参数是用于指定SharedPreferences的名称,没有则创建一个,保存在 /data/data/
2、Activity类的 getSharedPreferences() 方法:它只接受一个参数,因为会默认将Activity的类名作为文件名。获取了对象,可以向对象中存储数据,主要分3部分实现:首先调用SharedPreferences对象的edit()方法获取一个SharedPreferences.Editor对象;然后向SharedPreferences.Editor对象中添加数据,比如添加一个布尔型数据就使用putBoolean()方法,添加一个字符串则使用putString()方法,以此类推。最后调用apply()方法将添加的数据提交,从而完成数据存储操作。
从SharedPreferences中读取数据:SharedPreferences对象中提供了一系列的get方法,用于读取存储的数据,每种get方法都对应了SharedPreferences.Editor中的一种put方法,比如读取一个布尔型数据就使用getBoolean()方法,读取一个字符串就使用getString()方法。这些get方法都接收两个参数:第一个参数是键,传入存储数据时使用的键就可以得到相应的值了;第二个参数是默认值,即表示当传入的键找不到对应的值时会以什么样的默认值进行返回。
(3)SQLite存储。
1、SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型虽然只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s)等数据类型,只不过在运算或保存时会转成对应的五种数据类型。
2、SQLite最大的特点是你可以保存任何类型的数据到任何字段中,无论这列声明的数据类型是什么。例如:可以在Integer字段中存放字符串,或者在布尔型字段中存放浮点数,或者在字符型字段中存放日期型值。
3、但有一种情况例外:定义为INTEGER PRIMARY KEY的字段只能存储64位整数, 当向这种字段中保存除整数以外的数据时,将会产生错误。
4、另外,SQLite在解析CREATE TABLE语句时,会忽略CREATE TABLE语句中跟在字段名后面的数据类型信息。
6、android的service的用途及设计方法
答:Service分为本地服务(LocalService)和远程服务(RemoteService):
1、本地服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另外Local服务因为是在同一进程因此不需要IPC,也不需要AIDL。相bindService会方便很多。主进程被Kill后,服务便会终止。
2、远程服务为独立的进程,对应进程名格式为所在包名加上你指定的android:process字符串。由于是独立的进程,因此在Activity所在进程被Kill的时候,该服务依然在运行,不受其他进程影响,有利于为多个进程提供服务具有较高的灵活性。该服务是独立的进程,会占用一定资源,并且使用AIDL进行IPC稍微麻烦一点。
按使用方式可以分为以下三种:
(1)startService启动的服务:主要用于启动一个服务执行后台任务,不进行通信。停止服务使用stopService;
(2)bindService启动的服务:该方法启动的服务可以进行通信。停止服务使用unbindService;
(3)startService同时也bindService启动的服务:停止服务应同时使用stepService与unbindService。
设计方法:
第一种方式:通过StartService启动Service,通过startService启动后,service会一直无限期运行下去,只有外部调用了stopService()或stopSelf()方法时,该Service才会停止运行并销毁。要创建一个这样的Service,你需要让该类继承Service类,然后重写以下方法:
(1)onCreate()
1.如果service没被创建过,调用startService()后会执行onCreate()回调;
2.如果service已处于运行中,调用startService()不会执行onCreate()方法。
也就是说,onCreate()只会在第一次创建service时候调用,多次执行startService()不会重复调用onCreate(),此方法适合完成一些初始化工作。
(2)onStartCommand()
如果多次执行了Context的startService()方法,那么Service的onStartCommand()方法也会相应的多次调用。onStartCommand()方法很重要,我们在该方法中根据传入的Intent参数进行实际的操作,比如会在此处创建一个线程用于下载数据或播放音乐等。
(3)onBind()
Service中的onBind()方法是抽象方法,Service类本身就是抽象类,所以onBind()方法是必须重写的,即使我们用不到。
(4)onDestory()
在销毁的时候会执行Service该方法。
第二种方式:通过bindService启动Service
bindService启动服务特点:
(1)bindService启动的服务和调用者之间是典型的client-server模式。调用者是client,service则是server端。service只有一个,但绑定到service上面的client可以有一个或很多个。这里所提到的client指的是组件,比如某个Activity。
(2)client可以通过IBinder接口获取Service实例,从而实现在client端直接调用Service中的方法以实现灵活交互,这在通过startService方法启动中是无法实现的。
(3)bindService启动服务的生命周期与其绑定的client息息相关。当client销毁时,client会自动与Service解除绑定。当然,client也可以明确调用Context的unbindService()方法与Service解除绑定。当没有任何client与Service绑定时,Service会自行销毁。