笔试碎片
1、Android的存储机制(这篇文章http://blog.csdn.net/fwwdn/article/details/7514831)
Android为我们提供了4种数据存储方式,但由于存储的这些数据都是某个应用程序私有的,所以它又为我们提供了一种在不同应用程序之间共享数据的机制,即ContentProvider。
Android的4种数据存储方式:Shared
Preferences、Files、SQLite、NetWork,
Android的共享机制:即四大组件之一的 Content Provider机制。
2、android dvm的进程和linux的进程(http://zhidao.baidu.com/link?url=wUxRJUSbFZS4tN4MApL6lO-QOUYJxJ4jrWa1ZL6KcIdPYBtr0OX_pP_RrdMiaj0X_dulxiJgc--lWW_41HMbi_)
DVM指dalivk的虚拟机。每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。而每一个DVM都是在Linux 中的一个进程,所以说可以认为是同一个概念。
3、android assets
Android 系统为每个新设计的程序提供了/assets目录,这个目录保存的文件可以打包在程序里。/res 和/assets的不同点是,android不为/assets下的文件生成ID。如果使用/assets下的文件,需要指定文件的路径和文件名。
在文件中/assets 中建立/image子目录,将/res/drawable下的icon.png子目录拷贝到该目录中。在/assets子目录中建立readme.txt文件,文件中输入文本“hello,world!!!”。
AssetManager assetManager = getAssets();
String[] files files = assetManager.list("image");
firstField = (EditText) findViewById(R.id.firstId);
firstField.setText(Integer.toString(files.length)+"file.File name is"+ files[0]);
InputStream inputStream = assetManager.open("readme.txt");
4、android /res/xml、raw(http://blog.csdn.net/hbhhww/article/details/8157749)
/res/xml
这里可以用来存储xml格式的文件,并且和其他资源文件一样,这里的资源是会被编译成二进制格式放到最终的安装包里的,我们也可以通过R类来访问这里的文件,并且解析里面的内容
XmlResourceParser xml = getResources().getXml(R.xml.data);
在这里,我们用资源类的getXml方法,返回了一个xml解析器,这个解析器的工作原理和SAX方式差不多
/res/raw
这里的文件会原封不动的存储到设备上,不会被编译为二进制形式,访问的方式也是通过R类
((TextView)findViewById(R.id.txRaw)).setText(
readStream(getResources().openRawResource(R.raw.rawtext)));
5、android sqliteopenhelper(http://www.cnblogs.com/over140/archive/2011/11/30/2268591.html)
android平台提供给我们一个数据库辅助类来创建或者打开数据库,这个辅助类继承SQLiteOpenHelper类
onCreate(SQLiteDatabase db);onUpdate(SQLiteDatabase db,int oldVersion,int newVersion);这两个是必须实现的方法
SQLiteOpenHelper 类的基本用法是:当需要创建或打开一个数据库并获得数据库对象时,首先根据指定的文件名创建一个辅助对象,然后调用该对象的getWritableDatabase 或 getReadableDatabase方法 获得SQLiteDatabase 对象。
调用getReadableDatabase 方法返回的并不总是只读数据库对象,一般来说该方法和getWriteableDatabase 方法的返回情况相同,只有在数据库仅开放只读权限或磁盘已满时才会返回一个只读的数据库对象。
6、android:padding 和 Android:margin 的区别
margin:是指该控件距离父控件的边距
padding:是指该控件内部内容,如文本距离该控件的边距
如:
当按钮分别设置以上两个属性时,得到的效果是不一样的。
android:paddingLeft="30dp":(从中间开始距离左边30个独立像素)
按钮上设置的内容(例如图片、文字)离按钮左边边界30个像素。通俗的将就是内边距。控件里面的边距。
android:layout_marginLeft="30dp"(推荐使用dp,跟多dp,px的区别,http://www.cnblogs.com/asijack/p/4240836.html)
整个按钮离左边设置的内容30个像素。就是外边距,控件距离父控件的边距。
这二 个属性是相对的,假设B是A的子控件,设置B的margin和设置A的padding能达到相同的效果。
7、android 中 invalidate和postInvalidate的区别(详细http://www.cnblogs.com/tt_mc/archive/2012/01/30/2332023.html)
Android中实现view的更新有两组方法,一组是invalidate,另一组是postInvalidate,其中前者是在UI线程自身中使用,而后者在非UI线程中使用。 关于UI线程和工作线程的介绍请看这篇文章。
Android提供了Invalidate方法实现界面刷新,但是Invalidate不能直接在线程中调用,因为他是违背了单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI线程中调用。
Android程序中可以使用的界面刷新方法有两种,分别是利用Handler和利用postInvalidate()来实现在线程中刷新界面。
利用invalidate()刷新界面
实例化一个Handler对象,并重写handleMessage方法调用invalidate()实现界面刷新;而在线程中通过sendMessage发送界面更新消息。
// 在onCreate()中开启线程 new Thread(new GameThread()).start();、 // 实例化一个handler Handler myHandler = new Handler() { // 接收到消息后处理 public void handleMessage(Message msg) { switch (msg.what) { case Activity01.REFRESH: mGameView.invalidate(); // 刷新界面 break; } super.handleMessage(msg); } };
使用postInvalidate()刷新界面
使用postInvalidate则比较简单,不需要handler,直接在线程中调用postInvalidate即可。
class GameThread implements Runnable { public void run() { while (!Thread.currentThread().isInterrupted()) { try { Thread.sleep(100); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } // 使用postInvalidate可以直接在线程中更新界面 mGameView.postInvalidate(); } } }
View 类中postInvalidate()方法源码如下,可见它也是用到了handler的:
public void postInvalidate() { postInvalidateDelayed(0); } public void postInvalidateDelayed(long delayMilliseconds) { // We try only with the AttachInfo because there's no point in invalidating // if we are not attached to our window if (mAttachInfo != null) { Message msg = Message.obtain(); msg.what = AttachInfo.INVALIDATE_MSG; msg.obj = this; mAttachInfo.mHandler.sendMessageDelayed(msg, delayMilliseconds); } }
8、jni的理解(http://blog.chinaunix.net/uid-24410388-id-3857169.html)
Java Native Interace (JNI)标准是java平台的一部分,它允许Java代码和其他语言写的代码进行交互。
JNI 是本地编程接口,它使得在 Java 虚拟机 (VM) 内部运行的 Java 代码能够与用其它编程语言(如 C、C++ 和汇编语言)编写的应用程序和库进行交互操作。
9、android activityGroup viewGroup
10、事件分发机制
11、listView优化问题
12、谈谈aidl(http://blog.csdn.net/liuhe688/article/details/6409708)
Android提供了两种机制来将数据传递给另一个进程,第一种是使用Intent将数据束(Bundle)传递给活动,第二种也就是Parcelable传递给服务。这两种机制不可互换,不要混淆。也就是说,Parcelable无法传递给活动,只能用作AIDL定义的一部分)。
13、android的启动
14、xml解析
-------------------------------------------------------------------------------------------------------------------------------
项目提问:
1、rtp协议
2、视频裸流那个方法获取的,音频
3、I帧,P帧,B帧