Android 基础知识点

1. JNI调用过程

<1> 安装、下载Cygwin,下载AndroidNDK

<2>在ndk项目中JNI接口的设计

<3>使用C/C++实现本地方法

<4>JNI生成动态链接库.so文件

<5>将动态链接库复制到java工程中

2. View, SurfaceView, GLSurfaceView

view必须在UI主线程中刷新,handle.sendmessage发送消息,然后在handle的getmessage中执行invaliate或者postinvaliate。
SurfaceView 是View的子类,使用了双缓机制,在新的线程中更新画面所以刷新界面速度比View快。
SurfaceView一般会与SurfaceHolder结合使用,调用SurfaceView的getHolder()方法即可获取SurfaceView关联的SurfaceHolder,SurfaceHolder用于向与之关联的SurfaceView上绘图,
SurfaceHolder提供了如下方法来获取Canvas对象:
- CanvaslockCanvas():锁定整个SurfaceView对象,获取该Surface上的Canvas。
- CanvaslockCanvas(Rect dirty):锁定SurfaceView上Rect划分的区域,获取该Surface上的Canvas。
当对同一个SurfaceView调用上面两个方法时,两个方法所返回的是同一个Canvas对象。但当程序调用第二个方法获取指定区域的Canvas时,SurfaceView将只对Rect所“圈”出来的区域进行更新,通过这种方式可以提高画面的更新速度。
当通过lockCanvas()获取指定了SurfaceView上的Canvas之后,接下来程序就可调用Canvas进行绘图了,Canvas绘图完成后通过如下方法来释放绘图、提交所绘制的图形:
-unlockCanvasAndPost(canvas);
GLSurfaceView 是SurfaceView的子类,OpenGL专用的。

3. 内存泄露

<1>数据库的cursor没有关闭

<2>构造adapter时,没有使用缓存contentview

<3>bitmap对象不使用时采用recycle()释放内存

<4>activity中对象的生命周期大于activity

4. 数据存储方式

(1)使用SharedPreferences存储数据;它是Android提供的用来存储一些简单配置信息的一种机制,采用了XML格式将数据存储到设备中。只能在同一个包内使用,不能在不同的包之间使用。
(2)文件存储数据;文件存储方式是一种较常用的方法,在Android中读取/写入文件的方法,与java实现I/O的程序是完全一样的,提供了openFileInput()和openFileOutput()方法来读取设备上的文件。
(3)SQLite数据库存储数据;SQLite是Android所带的一个标准的数据库,它支持SQL语句,它是一个轻量级的嵌入式数据库。
(4)使用ContentProvider存储数据;主要用于应用程序之间进行数据交换,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。
(5)网络存储数据;通过网络上提供给我们的存储空间来上传(存储)和下载(获取)我们存储在网络空间中的数据信息。

5. Adapter有什么作用?常见的Adapter有哪些?

Adapter是连接后端数据和前端显示的适配器接口。
常见的Adapter子接口包括ListAdapter和SpinnerAdapter。其中ListAdapter接口主要为ListView、GridView这种AdapterView提供数据和显示组件。而SpinnerAdapter主要为Spinner、Gallery这种AdapterView提供数据和显示组件。
ListAdapter、SpinnerAdapter它们有如下实现类:
ArrayAdapter:用法比较简单。功能也比较简单,只要传入数组或List集合作为列表组件的数据即可。
SimpleAdapter:用法略显复杂,但功能比较强大。程序需要传入一个List集合(List集合元素为Map)作为列表组件的数据。
SimpleCursorAdapter:功能和用法与SimpleAdapter十分相似。只是程序使用Cursor作为列表组件的数据。
BaseAdapter:这个Adapter主要供用户继承,然后需要重写它提供的getCount(、getItem()、getItemId、getView等方法。