移动互联应用开发基础知识简答

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. android中网络通信的实现方法

答:(1)针对TCP/IP的Socket、ServerSocket;

  1. 针对UDP的DatagramSocket、DatagramPackage。这里需要注意的是,考虑到Android设备通常是手持终端,IP都是随着上网进行分配的。不是固定的。因此开发也是有一点与普通互联网应用有所差异的;
  2. 针对直接URL的HttpURLConnection;
  3. Google集成了Apache HTTP客户端,可使用HTTP进行网络编程。针对HTTP,Google集成了Appache Http core和httpclient 4版本,因此特别注意Android不支持httpclient 3.x系列,而且目前并不支持Multipart(MIME),需要自行添加httpmime.jar;
  4. 使用Web Service。Android可以通过开源包如jackson去支持Xmlrpc和Jsonrpc,另外也可以用Ksoap2去实现Webservice ;

(6)直接使用WebView视图组件显示网页。基于WebView 进行开发,Google已经提供了一个基于chrome-lite的Web浏览器,直接就可以进行上网浏览网页。

5、android中数据存储的三种方法

答:(1)文件存储.

将数据存储到文件:Context类中提供了一个openFileOutput()方法,可以用于将数据存储到指定的文件中。该方法接受两个参数:第一个参数是文件名,文件创建时使用,不可以包含路径,只是文件名,因为所有的文件都默认存于 /data/data//files 目录下。第二个参数是文件的操作模式:主要有MODE_PRIVATE 和 MODE_APPEND两种,默认是MODE_PRIVATE,表示,当存在相同名称的文件时,所写入的内容会自动覆盖原有文件中的内容。MODE_APPEND,表示,如果该文件已存在,会将所写入的内容追加到文件中,不存在的话就创建新的文件。openFileOutput() 返回的是一个FileOutputStream对象,得到对象之后,可以通过java流的方式,写入文件中。

从文件中读取数据:类似于将数据存储到文件中,Context类中还提供了一个openFileInput()方法,用于从文件中读取数据。这个方法要比openFileOutput()简单一些,它只接收一个参数,即要读取的文件名,然后系统会自动到 /data/data//files 中加载这个文件,并返回一个 FileInputStream 对象,得到这个对象,会通过流的方式将数据读取出来。

(2)SharedPreferences存储。

不同于文件的存储方式,SharedPreferences是使用键值对的方式来存储数据的。也就是说,当保存一条数据的时候,需要给这条数据提供一个对应的键,这样在读取数据的时候就可以通过这个键把相应的值取出来。而且SharedPreferences还支持多种不同的数据类型存储,如果存储的数据类型是整型,那么读取出来的数据也是整型的;如果存储的数据是一个字符串,那么读取出来的数据仍然是字符串。

将数据存储到SharedPreferences中:首先、要向SharedPreferences 中存储数据,需要先获取一个SharedPreferences对象。获取的方法有两种:

1、Context类的getSharedPreferences()方法:接受两个参数,第一个参数是用于指定SharedPreferences的名称,没有则创建一个,保存在 /data/data//shared_prefs/目录下。第二个参数用于指定操作模式,目前只有默认的 MODE_PRIVATE模式,相当于传入0.

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会自行销毁。

你可能感兴趣的:(android,ios)