每天一点小知识【8】

继续总结本司机在工作过程中的一些小知识点或小的技巧,其中有代码片段,也有知识点,经验总结和分享。

1、setContentView和inflate的区别。

先看如下这个程序段,

public class MyActivity extends Activity{
private TextView textview;
public void OnCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//1、直接使用setContentView
//setContentView(R.layout.main);
//textview = (TextView) findViewById(R.id.textview);
//2、先使用inflate,然后再调用setContentView
LayoutInflater inflate = LayoutInflater.from(this);
View view = inflate.inflate(R.layout.main,null);
setContentView(view);
}
}

上述注释掉的1部分的代码和没有注释掉的2部分的代码执行情况是相同,但过程不同,首先分析1,调用setContentView()将立刻显示资源R.layout.main对应的view。而方法2,会先把R.layout.main对应的资源通过inflate方法生成一个View,然后通过方法setContentView设置给当前Activity。setContentView()方法一般用在activity的onCreate方法中用来显示当前界面的布局,而LayoutInflater的inflate()方法可以实现动态加载,除了可以用在Activity中,也可以用在各种控件,自定义控件中,如ListView等,对控件布局进行动态设置。

2、StringBuilder与StringBuffer的区别

它们都是字符串变量,这一点有别于String,String 字符串常量。
它们二者最简单直接的区别在于StringBufferd支持并发操作,是线性安全的,适合在多线程中使用。StringBuilder不支持并发操作,是线性不安全的,不适合多线程中使用。
StringBuilder类是Java 5.0新增的类,被设计用作 StringBuffer 的一个简易替换,在单线程中的性能比StringBuffer高,所以如果不涉及多线程,多数情况下推荐使用StringBuilder。

3、关于SparseArray

HashMap是java里比较常用的一个集合类,一般用来缓存一些键值对数据。但在Android上,强烈建议使用SparseArray来代替HashMap,以获取更好性能。从字面意思,SparseArray就是稀疏数组的意思。
SparseArray是android里为

4、apk的含义

apk是Android安装包Android Package的缩写。apk类似于Symbian Sis或Sisx的文件格式的安装程序文件,它使用Android SDK编译的工程打包编译打包生成的。可以将apk文件直接安装到Android模拟器或Android手机中。apk文件其实也是一种zip压缩格式,只是后缀名被修改为apk,如果我们使用命令UnZip可以将其解压,解压后可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java 的字节码而是Dalvik字节码。

5、assets与res/raw的区别

assets:assets目录下存放的资源表示应用无法直接访问的原生资源,这些资源文件不会生成任何资源ID,被原封不动的存储到设备上,它也不会被编译为二进制形式,访问方式是通过文件名结合AssetManager来访问,而不能通过资源ID访问,应用程序通过AssetManager以的字节流的形式来读取资源文件。并且assets支持任意深度的子目录。
res/raw:raw目录下存放的资源也是代表应用无法直接访问的原生资源,但应用可以通过资源ID访问raw目录下的资源,这些文件将原封不动的存储到设备上,不会被编译为二进制形式。应用程序使用openRawResource以的字节流的形式来读取资源文件,raw不支持多级子目录。

6、Android Drawable、Bitmap、byte[]之间的互相转换

● Drawable –> Bitmap

Resources res = getResources();  
Bitmap bmp = BitmapFactory.decodeResource(res, R.drawable.pic);

● Bitmap –> Drawable

Drawable bitmap2Drawable(Bitmap bitmap) {  
return new BitmapDrawable(bitmap);
}

● Bitmap –> byte[]

byte[] Bitmap2Bytes(Bitmap bm) {  
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, baos);
return baos.toByteArray();
}

● byte[] –> Bitmap

Bitmap Bytes2Bimap(byte[] b) {  
if (b.length != 0) {
return BitmapFactory.decodeByteArray(b, 0, b.length);
} else {
return null;
}
}

7、从右到左布局RTL Layout

从Android 4.2开始,Android SDK支持一种从右到左(RTL,Right-to-Left)的UI布局方式,这种布局方式经常被使用在诸如阿拉伯语、希伯来语等环境中,在Google商店上线的应用如果要考虑这些语言的国家用户,需要对他们进行适配,包括xml布局文件,以及代码等。在中国市场上线的应用基本不用考虑这个属性。
所谓RTL,就是指按平常我们的操作习惯在左的控件现在放到了右侧,而在右侧的控件b放到了左侧。
RTL布局功能默认是关闭的,如果想使用RTL布局,首先要在AndroidManifest.xml文件中将标签的android:supportsRtl属性值设为”true”,然后需要将相应视图标签的android:layoutDirection属性值设为”rtl”。接下来就是对支持RTL的Activity或者View布局进行适配修改,定义保存多份xml,在代码中也需要注意进行兼容适配。

8、关于IntentService

IntentService是Service类的子类,可以用来处理异步请求,并且用完Service就会停止运行,非常方便用于处理一次性的执行过程。客户端可以通过startService(Intent)方法传递请求给IntentService,IntentService通过worker thread处理每个Intent对象,执行完所有的工作之后自动调用stopSelf()方法自动停止Service并退出。它的好处就是处理异步请求的时候可以减少写代码的工作量,比较轻松地实现项目的需求。
使用IntentService非常简单,只需要两个步骤:
1、写构造函数
2、复写onHandleIntent()方法

9、如何实现图文混排?

可以借助SpannableString对象。使用SpannableString对象来封装Span对象,如ImageSpan对象,再将SpannableString对象当做普通的字符串插入到控件中即可。

10、data目录下的一些常用子目录

/data/app,存放程序的apk文件(仅用户程序)。你安装的程序的apk文件都会存放到这里一份。
/data/dalvik-cache,顾名思义,是程序的dalvik-cache文件。实际就是程序的Java执行文件,扩展名为dex。

这里写图片描述
欢迎您扫一扫上面的微信公众号,订阅我的个人公众号! 本公众号将以推送Android各种碎片化小知识或小技巧,以及整理Android面试知识点为主,也会不定期将开发老司机日常工作中踩过的坑,平时自学的一些知识总结出来进行分享。每天一点干货小知识把你的碎片时间充分利用起来。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值