零碎知识点
- 创建项目前,window-》performance-》workSpace 将编码改成UTF_8
- 安卓系统提供了一个SparseArray,它本质是一个map,但是存储的key只能是int类型,它相比普通的map效率更高,所以当我们需要存储int类型的map的时候,可以使用SparseArray
- isOrderedBroadcastReceiver()判断是有序广播还是无序广播
- BigDecimal是一个提供了精确的计算的类,如果在跟数值计算打交道的时候遇到问题可以考虑这个类
- 图片的scaleType设置为fitXTY则自动拉伸铺满容器,设置为centerCrop则等比例放大直到最小的边满足后切割。
- RatingBar 有一个属性是Android:isIndicator = “true”,如果设置为TRUE则只是一个显示的不能进行点击修改。
- 安卓系统占用物理内存大小的格式化
Formatter.fromatFileSize(context, size);
-
强引用,任何时候都不会被;垃圾回收器回收,如果内存不足,宁愿抛出OutOfMemoryError
软引用,只有在内存将满的时候才会被垃圾回收器回收,如果还有可用内存,垃圾回收器不会回收
弱引用,只要垃圾回收器运行,就肯定会被回收,不管还有没有可用内存。
虚引用,虚引用等于没有引用,任何时候都有可能被垃圾回收。
-
获取图片真实高度大小:图片的drawable对象 drawable.getIntrinsicHeight();
-
LruCache使用
-
bitmap.compress(arg0, arg1, arg2);压缩图片,第一个参数是压缩后图片的类型png,jpg等,第二个是压缩比例,100的话表示不压缩,第三个参数是输出流
-
canvas绘制文字起点是文字左下角。paint.setTextAlign( )可以修改绘制文字的起点
-
两个viewpager嵌套的时候里层的viewpager默认是不能滑动的,因为父类默认会拦截子类控件的透彻事件
所以需要在父类中重写onInterceptTouchEvent()方法,返回false表示不拦截子类的touch事件,或者在子类中 重写dispatchTouchEvent()方法,在方法中加上一句getParent().requestDisallowInterceptTouchEvent(true);这句话的意思是将父类不允许拦截子类touch事件的属性设置为true,(事件的分发机制:dispatchTouchEvent->onInterceptTouchEvent->onTouchEvent) - viewHolder之所以要声明成静态的是因为,非静态的内部类拥有外部类的强引用,是防止内存泄露的一种方式
- popupwindow需要设置上背景(view上有的话可以设置透明背景),点击返回才会有响应
- baseActivity中一般用context = getApplicationContext()取得上下文环境,不用this的原因是防止内存泄漏
- Target SDK,一般设置为目前市场占有率最高的版本,兼容性问题小
- compile with:一般选择较高的版本,因为随着安卓的发展,会添加很多新的API,编译版本高可以通过,如果设置的较低的话,则编译无法通过。
- 如何限制一个方法并发访问的线程数
static Semaphore semaphore = new Semaphore(6);
然后在一个线程开始的时候调用
semaphore.acquire();
在线程结束的时候调用
semaphore.release();
- 版本号1.0.0:最后一位表示修复上一版本的bug,第二位表示更新了部分功能,第一位表示项目重大更新(代码重构,界面整体修改,很多功能添加)
- 文字阴影效果:shadowX=“1” 设置颜色 shadowColor=“#FF0000” 最后要设置shadowradius="1"控制阴影范围
- 手机模拟器访问10.0.2.2就是模拟器所在电脑的ip地址。是安卓工程师故意留给我们的固定ip地址
- 直接使用系统自带的theme去掉页面的title的话会导致其他UI很丑,所以我们一般不用系统自带的theme而是在默认的theme中添加<item name="android:windowNoTitle">true</item>
- activity的切换动画(100%p:就是整个屏幕宽度)
- 跑马灯效果
- gridview的布局文件
-
开发过程中可以在values文件夹下面新建一个color.xml设定所有的颜色值。
- 下载完成后自动安装APP
protected void installApk(File file) {
//系统应用界面,源码,安装apk入口
Intent intent = new Intent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
/*//文件作为数据源
intent.setData(Uri.fromFile(file));
//设置安装的类型
intent.setType("application/vnd.android.package-archive");*/
intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
startActivity(intent);
- 获取APP版本名称
PackageManager packageManager = getPackageManager();
try {
//0代表基本信息
PackageInfo packageInfo = packageManager.getPackageInfo(this.getPackageName(), 0);
String versionName = packageInfo.versionName;
String versionCode = packageInfo.versionCode;
}
catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}