以下是本人在工作过程中用过或者涉及到的一些知识点,在这里分享和记录一下。

1、Android中图片占用内存

Android中一张图片(BitMap)占用的内存主要和以下几个因数有关:图片长度,图片宽度,单位像素占用的字节数。
一张图片(BitMap)占用的 内存 = 图片长度 * 图片宽度 * 单位 像素占用的字节数。而和图片本身的大小没有关系。
注 : 图片长度和 图片宽度的单位是像素。

2、Bitmap内存位置

在Android4.0之前,Bitmap的内存是分配在Native堆中,调用recycle()可以立即释放Native内存。
从Android4.0开始,Bitmap的内存就是分配在dalvik堆中,即JAVA堆中的,调用recycle()并不能立即释放Native内存,但是调用recycle()是一个良好的习惯。

3、编译类和原来的类源码的区别

已编译类和原来的类源码区别在于,已编译类只包含类本身,内部类不会在已编译类中出现,而是生成另外一个已编译类文件;其二,已编译类中没有注释;其三,已编译类没有package和import部分。

4、Activity的moveTaskToBack方法

大家可能不知道Activity有moveTaskToBack这样一个方法。应用场景是有些activity诸如引导图之类的,用户在按返回键的时候你并不希望退出(默认就finish了),而是只希望放置到后台,那就可以调这个方法。
public boolean moveTaskToBack(boolean nonRoot)
参数说明如下:
nonRoot=false→ 仅当activity为task根(即首个activity例如启动activity之类的)时才生效
nonRoot=true→ 忽略上面的限制
这个方法不会改变task中的activity中的顺序,效果基本等同于home键。

5、设置背景图片的方法

android 16以下不支持setBackground函数,会导致异常,应该使用,setBackgroundDrawable或者 setBackgroundResource。

int sdk = android.os.Build.VERSION.SDK_INT;if(sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) {     convertView.setBackgroundDrawable(getResources().getDrawable(R.drawable.item_selector_border));} else {    convertView.setBackground(getResources().getDrawable(R.drawable.item_selector_border));}

或者直接使用setBackgroundResource方法:

convertView.setBackgroundResource(R.drawable.item_selector_border);

6、minSdkVersion、maxSdkVersion、targetSdkVersion、target,compileSdkVersion,buildeToolVersion六个属性分别是什么意思?有何区别?

minSdkVersion与maxSdkVersion比较容易理解,就是在安装程序的时候,如果目标设备的API版本小于minSdkVersion, 或者大于maxSdkVersion,程序将无法安装。一般来说没有必要设置maxSdkVersion。
targetSdkVersion相对复杂一些,如果设置了此属性,那么在程序执行时,如果目标设备的API版本正好等于此数值, 它会告诉Android平台:此程序在此版本已经经过充分测,没有问题。不必为此程序开启兼容性检查判断的工作了。 也就是说,如果targetSdkVersion与目标设备的API版本相同时,运行效率可能会高一些。 但是,这个设置仅仅是一个声明、一个通知,不会有太实质的作用, 比如说,使用了targetSdkVersion这个SDK版本中的一个特性,但是这个特性在低版本中是不支持的 ,那么在低版本的API设备上运行程序时,可能会报错:java.lang.VerifyError。也就是说,此属性不会帮你解决兼容性的问题。 你需要在minSdkVersion这个版本上将程序完整的跑一遍来确定兼容性有没有问题。
project.properties中的target是指在编译的时候使用哪个版本的API进行编译。compileSdkVersion是选择的SDK的版本号,也就是API Level。和project.properties相同。
buildeToolVersion是你构建工具的版本,其中包括了打包工具aapt、dx等等。

7、按钮快速点击出现两个activity的问题

当快速点击按钮调用activity时,如果activity在Manifest中的注册方式为android:launchMode=”normal”,则会出现弹出两个甚至多个的activity,可以将其launchMode修改为singleTask解决此问题。
但是如果启动的activity需要调用onActivityResult方法,而使用singleTask时,就不能调用到onActivityResult函数了,解决的方案是launchMode依旧为normal,但是启动时,可以传递一个参数,
FLAG_ACTIVITY_BROUGHT_TO_FRONT,这样可以起到启动一个activity的作用。

8、关于LayoutInflater

获取LayoutInflater有三种方法,

(1)、

LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

(2)、

LayoutInflater inflater = LayoutInflater.from(Activity.this);

(3)、

LayoutInflater inflater = getLayoutInflater();

这三种方法得到的结果是相通的。

9、使用adb shell pm安装程序

(1)、先push apk到手机:

adb push xxx.apk /data/local/tmp/com.xxx.xxxx

(2)、安装apk:

adb shell pm install -r “/data/local/tmp/com.xxx.xxxx”

10、获取android系统版本号等信息

String phoneInfo="手机型号:" + android.os.Build.MODEL + ",SDK版本:" + android.os.Build.VERSION.SDK + ",系统版本:" + android.os.Build.VERSION.RELEASE+",软件版本:"+getAppVersionName(this); 

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

更多相关文章

  1. Android应用进程内存管理
  2. Android各版本适配之6.0
  3. 安卓国内开发者陷盈利困局 版本过多支付不畅
  4. Android(安卓)Studio之版本管理工具Git (图文教程)附连接到Git@OSC
  5. android apk包反编译、破解心得
  6. 【iOS-cocos2d-X 游戏开发之十六】配置你的Cocos2dx项目编译后的
  7. Android(安卓)Glide数据更新及内存缓存、硬盘缓存清理
  8. 利用Cordova对H5页面进行APP开发打包
  9. Android(安卓)基于Aidl的跨进程间双向通信管理中心(类似于聊天室)

随机推荐

  1. Android---网络编程之OkHttp3整体结构了
  2. Android软键盘显示模式及打开和关闭方式
  3. 【源码分享下载】Android 智能问答机器人
  4. 【转】android模拟器操作
  5. Android随笔之——Android单元测试
  6. 传智播客—Android(二)数据存储和访问 之文
  7. 远程调试 Android 设备使用入门
  8. Android ConstraintLayout 约束布局详解
  9. Android(安卓)触摸事件大全
  10. Android 存储路径浅析