1.一个聊天社交类软件存储方式有哪些?分别存储什么内容,比如微信。
- SharedPrefences
- 文件存储
- SQLite数据库存储
- ContentProvider
- 网络存储
2.说几种android常用的jar包,以及他们的原理和作用
- Volley.jar
3.return,break,continue的用法和区别
- return:(1). return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行。
(2).return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致。
(3). return后面也可以不带参数,不带参数就是返回空,其实主要目的就是用于想中断函数执行,返回调用函数处。 - break:在循环体中使用,强行跳出循环,执行循环体外的语句,注意(只能跳出一层循环)
- continue:终止当前循环的过程,但不能终止循环,而是继续执行下一次循环
4.列举几种Android不同进程之间的通信方式
-
方式一:访问其他应用程序的Activity
activity跨进程同样需要一个Intent,但跨进程不指定Context对象和Activity的class对象,而需要制定一个访问Activity所对应的Action,有些Activity还需要指定一个uri -
方式二:ContentProvider
Content Provider提供了一种在多个应用程序之间数据共享的方式(跨进程共享数据),Content Provider存在的目的向其他应用程序共享数据和允许其他应用程序对数据进行增、删、改操作。Android系统本身提供了很多Content Provider,例如,音频、视频、联系人信息等等。我们可以通过这些Content Provider获得相关信息的列表。这些列表数据将以Cursor对象返回。因此,从Content Provider返回的数据是二维表的形式。 -
方式三:BroadCast(广播)
广播是一种被动跨进程通讯的方式。当某个程序向系统发送广播时,其他的应用程序只能被动地接收广播数据。这就象电台进行广播一样,听众只能被动地收听,而不能主动与电台进行沟通。在应用程序中发送广播比较简单。只需要调用sendBroadcast方法即可。该方法需要一个Intent对象。通过Intent对象可以发送需要广播的数据。 -
方式四:AIDL服务
Android内存中会自带一块存放AIDL的公共区域,服务端会通过AIDL文件,把要写入客户端的内容写进去,然后通过onBInd方法返回binder对像(继承Binder类实现了aidl接口的Stub对象),然后把生成的binder对象通过序列化的方式写入到共享区域当中。
客户端也需要一个aidl文件,这样才能够获得服务器端在共享区域里存放的文件的内容,然后客户端通过绑定服务得到Binder对象,这个binder对象其实就是共享区域中服务器端生成的binder对象经过反序列化的方式生成的对象。因此,通过binder对象就能够获得服务器传来的信息了。 -
方式五:Messenger 信使
实现原理:
在server和client端通过Messenger信使传递信息,该对象就相当于一个信息的中转站,所有的信息都要通过这个对象来携带,客户端向服务器端发送信息就需要服务器的信使对象,然后他想要接收到消息,就需要创建自己的信使对象,然后把自己的Messenger对象作为消息中的一部分,传递给服务器端,然后服务器端就能够拿着客户端的信使给客户端发消息。
5.说一下你对java接口的认识,设计接口的作用是什么?
Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
接口弥补了类不能多继承的缺点,Java接口的方法只能是抽象的和公开的,Java接口可以有public、静态的和final属性。
用于处理多变的情况。
接口在实际开发过程中最大好处是,你可以按照设计,先把接口写好,然后分配大伙干活的时候,告诉a们去用写好的接口去实现他们的具体功能,而告诉b们,去写那些已经写好但是没有具体的代码的接口,这样可以提高工作效率。并且底层和应用也通过接口做了一个很明显的分层。
6.谈谈序列化SeriaLizable的作用以及实现方式
简单的说序列化就是以某种方式将内存中的Java对象变成2进制字节
既然是字节,那么处理起来就很方便,可以存储起来,也可以存在文件中、或者发送给别人。Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长(即每个对象都在JVM中)
但在现实应用中,就可能要停止JVM运行,但有要保存某些指定的对象,并在将来重新读取被保存的对象。这是Java对象序列化就能够实现该功能。(可选择入数据库、或文件的形式保存)但是有时候,是需要在网络上传输某些对象,如当使用RMI(远程方法调用),也需要用到序列化和反序列化。
当一个类实现了Seializable接口(该接口仅为标记接口,不包含任何方法定义),表示该类可以序列化,一个对象实现Serializable接口序列化,先要创建某些OutputStream对象,然后将其封装在一个ObjectOutputStream对象内,再调用writeObject()方法,即可序列化一个对象,反序列化,InputStream,再调用readObject()方法。(writeObject和readObject本身就是线程安全的,传输过程中是不允许被并发访问的,所以对象只能一个一个接连不断的传过来)。
如果某个类能够被序列化,其子类也可以被序列化。声明为static和transient类型的成员数据不能被序列化。因为static代表类的状态,transient代表对象的临时数据,static对象变量在反序列化时取得的值为当前jvm中对应类中对应static变量的值,而transient(瞬态)关键字则一般用于标识那些在序列化时不需要传递的状态变量。
7.你用过jni吗?说一说你用过的实例
8.Adapter有什么作用?常见得Adapter有哪些?
adapter是数据与ui之间的桥梁,它把后台数据与前端ui连接到一起,是一个展示数据的载体。
常用的adapter:
BaseAdapter : 基础适配器,对于spinner listview gridview 都是通用的,它是一个抽象类,继承后要实现的方法很多
ArrayAdapter : 是BaseAdapter的一个子类,可以直接使用泛型,使用起来比较简单
CursorAdapter:
ListAdapter:
SimpleAdapter :扩展性好,可以定义各种各样的布局,它里面涉及到的数据全是hashmap构成的List
SimpleCursorAdapter: 可以从数据库中读取数据显示在列表上
ResourceCursorAdapter:
PagerAdapter