android知识点总结

llAndroid高级技术-简答题

1:Android中五种数据存储方式分别是什么?他们的特点?

答:Android提供了五种存取数据的方式

(1) SharedPreference,存放较少的五种类型的数据,只能在同一个包内使

用,生成XML的格式存放在设备中

(2) SQLite数据库,存放各种数据,是一个轻量级的嵌入式数据库

(3) File文件,通过读取写入方式生成文件存放数据

(4) ContentProvider,主要用于让其他应用程序使用保存的数据

(5)通过网络获取数据和写入数据到网络存储空间

 

2:简述SharedPreferences存储方式

SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPreferences对象本身只能读取数据而不支持写入数据,存储修改是通过Editor对象实现。

 

3SQLite主要通过那两个类实现其功能的?

SQLiteOpenHelper:这个类是数据库的帮助类;用来进行数据库的创建;表的创建,以及版本的更新

SQLiteDatabase: 这个类里 封装了对表的具体的操作的方法,比如 增删改查的方法。

 

4SharedPreferencesSQLite数据库的区别

SharedPreferences对象与SQLite数据库相比,免去了创建数据库,创建表,写SQL语句等诸多操作,相对而言更加方便,简洁。但是SharedPreferences也有其自身缺陷,比如其职能存储booleanintfloatlongString五种简单的数据类型,比如其无法进行条件查询等。所以不论SharedPreferences的数据存储操作是如何简单,它也只能是存储方式的一种补充,而无法完全替代如SQLite数据库这样的其他数据存储方式。

 

5:ContentProvider与SQLite有何区别

答:Sql只能在该工程的内部共享数据,ContentProvider能在工程之间实现数据共享。

 

6:描述ContentProvider URI有哪几部分组成

答:URI由是部分组成:

A,标准的前缀: ContentProvider(内容提供者)的scheme已经由Android所规定, scheme为:content://

B,唯一标识整个Content Provider: 主机名(或叫Authority)用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。

C,描述了数据的路径,确定返回哪类数据: 路径(path)可以用来表示我们要操作的数据,路径的构建应根据业务而定

D, ID唯一标注请求的数据: 我们要请求数据的ID

 

7:简述通过contentResolver获取ContentProvider内容的基本步骤

  第一:得到ContentResolver类对象:ContentResolver cr = getContentResolver();

  第二:定义要查询的字段String数组。

  第三:使用cr.query();返回一个Cursor对象。

  第四:使用while循环得到Cursor里面的内容。

 

8:描述一下自定义ContentProvider的步骤

答:自定义contentprovider步骤:

1. 继承Android的ContentProvider基类实现自己的ContentProvider类。

2. 实现 ContentProvider里的onCreate方法,创建provider的数据,一般为数据库sqlite。

3. 重写ContentProvider 中相应的insert/delete/update/query增删改查这些方法。

4. 在AndroidManifest.xml文件中注册该ContentProvider类,为ContentProvider指定Uri。Uri类似网页访问中使用的URL地址。

在<application></application>中配置 <provider/>标签以及属性:android:name属性:ContentProvider的类名

android:authorities属性:用于访问ContentProvider的名称。

 

9:Android中如何访问自定义ContentProvider?

通过ContentProvider的Uri访问开放的数据。

(1)ContenResolver对象通过Context提供的方法getContenResolver()来获得。

(2)ContenResolver提供了以下方法来操作:insert  delete  update  query这些方法分别会调用ContenProvider中与之对应的方法并得到返回的结果。

 

10:android中的动画有哪几类,它们的特点和区别是什么?

答:Android中动画可以分为两大类:帧动画、补间动画

1)补间动画:你定义一个开始和结束,中间的部分由程序运算得到。主要有:旋转、平移、放缩和渐变;AlphaAnimation(渐变型动画)、scaleAnimation(缩放型动画)、 TranslateAnimation(平移型动画)、 RotateAnimation(旋转型动画)、

2)逐帧动画:Frame(把一连串的图片进行系列化连续播放,如同放电影的效果),它是通过播放一张一张图片来达到动画的效果;

 

11:如何实现一个帧动画?

答:

1)在布局文件中添加ImageView组件,设置background为res/anim/fram.xml动画效果

2)通过ImageView对象的getBackground()方法得到AnimationDrawable对象

3)通过AnimationDrawable对象的start()来启动帧动画,stop()来停止动画

12:简述你所学的音乐播放的方式,以及区别。

1):MediaPlayer:主要用于播放音频,可以播放视频,但是一般不用其进行视频播放。

   2):SoundPool: 主要用于播放一些短促的声音片段,主要优势是cpu资源占有量低,反应延迟小。

 

13:简述soundpool的使用步骤。

使用SoundPool播放声音的步骤如下。

(1)调用SoundPool的构造器创建SoundPool对象。

(2)调用SoundPool对象的load方法加载声音资源。

(3)调用SoundPool对象的play方法播放声音。

 

14:简述你学过Android中视频播放的方式?

答:

1:VideoView android提供给我们的一个供我们进行视频播放的组件

2:surfaceView+ MediaPlayer

3:系统提供的播放器

 

15:简述VideoView实现视频播放的基本步骤

使用VideoView播放视频

步骤一:onCreate方法中,首先获取布局管理器中添加的VideoView组件。并创建一个要播放视频所对应的对象。

 步骤二:然后创建一个MediaController对象,用于控制视频的播放。

     步骤三:*使用VideoView播放该视频

 

16简述VideoView实现视频播放的基本步骤

 

步骤一:在布局文件内定义SurfaceView,

步骤二:在代码中实现SurfaceHolder.Callback接口,重写三个方法

步骤三:通过方法getHolder();得到SurfaceHolder,然后设置SurfaceHolder

步骤四:为MediaPlayer设置SurfaceHolder

步骤五:使用setDataSource方法为MediaPlayer设置播放文件

步骤六:进行播放

 

17:res/raw与assets目录的区别  

答:

相同点:两者都会原封不动的保存在apk包中,不会被编译成二进制码。

不同点:

1.raw目录下只能存放文件,不能存放下一级的文件夹,而assets可以存放下一级的文件夹。

2.raw目录下的资源会映射到R.java中生成资源id。而assets不会。

3.获得资源的方法不同。代码如下:

this.getAssets().open( "xml/channels.xml")

this.getResources() .openRawResource(R.raw.students)

this.getClassLoader().getResourceAsStream(“student.xml”)

18:简述Timer的用法

 Timer是在一个应用运行期间进行的定时操作,当应用退出则定时操作也同时被取消。

使用Timer的步骤:

1:实例化Timer  timer =  new Timer();

2:实例化TimerTask  t = new  TimerTask(){

@Override

public void run() {

// TODO Auto-generated method stub

要执行的内容

}};

3: 调用:timer.schedule(t, 5000);执行

 

19:简述Handler机制原理

答:Andriod提供了 Handler 和 Looper 来满足线程间的通信。

Android不允许UI线程之外的线程改变UI组件的值,所以要想在其他线程里面改变UI组件的值,必须使用Handler来实现。

 

1)Looper: 一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue(消息队列)。 

2)Handler: 你可以构造Handler对象来与Looper沟通,以便push(上传)新消息到Message Queue里;或者接收Looper从Message Queue取出的消息。 

3) Message Queue(消息队列):用来存放线程放入的消息。 

4)线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue。

Handler、Looper、MessageQueue的初始化流程如下所示。

  Hander持有对UI主线程消息队列UI_MQ和消息循环Looper的引用,子线程可以通过Handler将消息发送到UI线程的消息队列UI_MQ中。

Handler处理消息

  UI主线程通过Looper循环查询消息队列UI_MQ,当发现有消息存在时会将消息从消息队列中取出。首先分析消息,通过消息的参数判断该消息对应的Handler,然后将消息分发到指定的Handler进行处理。

 

20:ListView的优化方案?

答:

1、如果自定义适配器,那么在getView方法中要考虑方法传进来的参数contentView是否为null,如果为null就创建contentView并返回,如果不为null则直接使用。在这个方法中尽可能少创建view。

2、给contentView设置tag(setTag()),传入一个viewHolder对象,用于缓存要显示的数据,可以达到图像数据异步加载的效果。

3、如果listview需要显示的item很多,就要考虑分页加载。比如一共要显示100条或者更多的时候,我们可以考虑先加载20条,等用户拉到列表底部的时候再去加载接下来的20条。分页加载还没学习。

 

 

21:MVC设计模式在Android中的应用?

答:

1.模型层(model):对数据库操作,对网络等操作都应在model中处理,对业务的计算等操作都应在该层。可以简单的理解为Android中的Java源文件 

2.视图层(view):一般采用XML进行描述,使用的时候可以方便的引入,可以简单的理解为Android中Layout文件。 Android中也可以用JavaScript+HTML 等方式作为view 层。 

3.控制层(controller):控制model和view的协调工作。简单的理解为Android中manifest文件.

 

22:如何实现Sensor编程?

答:

a.获取系统服务(SENSOR_SERVICE)返回一个SensorManager 对象

sensormanager = (SensorManager)getSystemSeriver(SENSOR_SERVICE); 

b.通过SensorManager对象获取相应的Sensor类型的对象

sensorObject = sensormanager.getDefaultSensor(sensor Type); 

c.声明一个SensorEventListener 对象用于侦听Sensor 事件,并重载

onSensorChanged方法

SensorEventListener sensorListener = new SensorEventListener(){}; 

d.注册相应的SensorService 

sensormanager.registerListener(sensorListener, sensorObject, Sensor 

TYPE); 

e.销毁相应的SensorService

sensormanager.unregisterListener(sensorListener, sensorObject); 

 

23:什么是ANR 如何避免它

答:Application not Responding(程序无应答)

1)主线程中尽量少做操作

2)对繁琐的功能代码分段完成

3)潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者以数据库操作为例,通过异步请求的方式)来完成。

 

你可能感兴趣的:(android,常用知识点)