Android技术点(面试)整理
1对StrongReference、WeakReference和SoftReference的认识
分享一下《深入理解Java虚拟机》中的描述:
- 强引用(StrongReference):就是在代码中普遍存在的,类似
Object obj = new Object()
这类的引用,只要强引用还存在,GC永远不会回收掉被引用的对象。
-
软引用(SoftReference):用来描述一些还有用但非必须的对象。对于软引用关联着的对象,在系统将要发生内存溢出异常时,将会把这些对象列入回收范围之中进行第二次回收。如果这次回收还没有足够的内存,才会抛出内存溢出异常。在JDK 1.2之后,提供了SoftReference类来实习软引用。
-
弱引用(WeakReference):也是用来描述非必须对象的,但是它的强度比软引用更弱一些,被弱引用关联的对象只能生存到了下一次GC发生之前。当GC工作时,无论当时内存是否足够,都会回收只被弱引用关联的对象。在JDK 1.2之后,提供了WeakReference类来实现弱引用。
-
虚引用(PhantomReference):这个引用po主没有提到,不过也可以顺带了解一下。虚引用也称幽灵引用或者幻影引用,它是最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。为一个对象设置虚引用的唯一目的就是在这个对象被GC回收是收到一个系统通知。在JDK 1.2之后提供了PhantomReference类来实现虚引用。
2 Java中反射的作用是什么?什么时候会用到?
JAVA反射机制是在#运行时#,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,
都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能:
a)在运行时判断任意一个对象所属的类;
b)在运行时构造任意一个类的对象;
c)在运行时判断任意一个类所具有的成员变量和方法;
d)在运行时调用任意一个对象的方法;生成动态代理。
参考链接:http://segmentfault.com/a/1190000002388723#articleHeader0
3 ContentProvider是如何实现数据共享的
当一个应用程序需要把自己的数据暴露给其他程序使用时,该就用程序就可通过提供ContentProvider来实现;其他应用程序就可通过ContentResolver来操作ContentProvider暴露的数据。
一旦某个应用程序通过ContentProvider暴露了自己的数据操作接口,那么不管该应用程序是否启动,其他应用程序都可以通过该接口来操作该应用程序的内部数据,包括增加数据、删除数据、修 改数据、查询数据等。
ContentProvider以某种Uri的形式对外提供数据,允许其他应用访问或修改数据;其他应用程序使用ContentResolver根据Uri去访问操作指定数据。
步骤:
1、定义自己的ContentProvider类,该类需要继承Android提供的ContentProvider基类。
2、在AndroidManifest.xml文件中注册个ContentProvider,注册ContenProvider时需要为它绑定一个URL。
例:
android:authorities="com.myit.providers.MyProvider" />
说明:authorities就相当于为该ContentProvider指定URL。
注册后,其他应用程序就可以通过该Uri来访问MyProvider所暴露的数据了。
接下来,使用ContentResolver操作数据,Context提供了如下方法来获取ContentResolver对象。
一般来说,ContentProvider是单例模式,当多个应用程序通过ContentResolver来操作
ContentProvider提供的数据时,ContentResolver调用的数据操作将会委托给同一个ContentProvider 处理。
使用ContentResolver操作数据只需两步:
1、调用Activity的ContentResolver获取ContentResolver对象。
2、根据需要调用ContentResolver的insert()、delete()、update()和query()方法操作数据即可
转自:http://www.android100.net/html/201307/27/3797.html