Android经典面试题目及解答(三)

1、Android支持的容器组件?

ViewGroup的子类都支持,五大布局。

2、如何让容器内组件可以水平横向都能滑动?

ScrollView和HorizontalScrollView的综合使用。

3、如何让Gallery循环显示图像?

BaseAdapter的getCount返回一个较大值,如Integer.MAX_VALUE,在getView里当position的值大于图片的个数时用position对图片个数求余即可。

4、静态引用和动态引用的区别及支持的类型?

静态引用:组件连同主程序一起封装在编译后的目标文件中,如包含.class的jar文件、NDK Librarie(.so文件)、另一个Eclipse Java或Android工程。

动态引用:主程序和组件是分离的,组件可以单独升级或卸载。如未安装的apk文件,Service,Activity、JavaScript脚本、包含classes.dex文件的jar文件

5、如何将可视组件封装在jar文件中以及如何通过Java代码适应不同的屏幕?

直接将可视组件的.class文件放到jar文件中即可,不过组件使用的资源文件要放到主工程的res目录的相关子目录中。在xml布局文件中使用组件要指定全名。

6、如何编写自定义可视化组件?

三种模式:扩展现有控件,如直接继承TextView,重写onDraw;组合多种控件;直接从View继承。

DisplayMetrics dm = new DisplayMetrics();
dm.setToDefaults();
int pixel = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, dm);
textView1.append("" + pixel);

上面的代码可以将20dip转换为像素px为单位。但这种方法和http://blog.csdn.net/yanzi1225627/article/details/17199323 说的还不是一回事。

7、如何动态装载apk文件(未安装)中的类,写出核心代码?

android程序运行在daivik虚拟机上,而不是传统的JVM上,因此andoid不能动态装载传统的jar文件,而apk文件是被编译成Dalivk虚拟机格式,因此可以动态装载。

DexFile dexFile = dalvik.system.DexFile.loadDex(
"storage/sdcard0/test.apk", "storage/sdcard0/test_1.apk", 0);
Object obj = dexFile.loadClass("com.android.my.widget.TEST", null).newInstance()
Method method = obj.getClass().getDeclaredMethod("getName", null);
String result = String.valueOf(method.invoke(obj, null));

从上可以看到反射的三步走战略,先是获得Object 类的对象,然后获得某个方法Method,通过method再去invoke对象obj。

8、如果一个类里带Interface接口,要反射接口里的方法如何?

除了要dexFile.loadClass那个类外,还要loadClass那个Interface,且得到obj时将其强制转为接口类型,然后用它调用接口里的方法。

9、Android应用程序是否可以动态引用jar文件?

传统的jar文件(包含.class文件)由于是基于JVM格式的,因此无法由Android应用程序动态调用。不过jar文件中只要包含Dalivk虚拟机格式的二进制代码就可以被Android应用程序动态调用。apk文件中的class.dex就是Dalivk虚拟机格式格式的二进制文件。jar cvf my.jar classes.dex将.dex文件打包成jar文件。

10、如何判断包含某个Activity Action的Android应用程序是否安装?







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值