安卓零碎知识点

来源:互联网 发布:杠杆交易 知乎 编辑:程序博客网 时间:2024/06/08 09:10
零碎知识点
  1. 创建项目前,window-》performance-》workSpace 将编码改成UTF_8
  2. 安卓系统提供了一个SparseArray,它本质是一个map,但是存储的key只能是int类型,它相比普通的map效率更高,所以当我们需要存储int类型的map的时候,可以使用SparseArray
  3. isOrderedBroadcastReceiver()判断是有序广播还是无序广播
  4. BigDecimal是一个提供了精确的计算的类,如果在跟数值计算打交道的时候遇到问题可以考虑这个类
  5. 图片的scaleType设置为fitXTY则自动拉伸铺满容器,设置为centerCrop则等比例放大直到最小的边满足后切割。
  6. RatingBar 有一个属性是Android:isIndicator = “true”,如果设置为TRUE则只是一个显示的不能进行点击修改。
  7. 安卓系统占用物理内存大小的格式化
    1. Formatter.fromatFileSize(context, size);
  8. 强引用,任何时候都不会被;垃圾回收器回收,如果内存不足,宁愿抛出OutOfMemoryError

    软引用,只有在内存将满的时候才会被垃圾回收器回收,如果还有可用内存,垃圾回收器不会回收

    弱引用,只要垃圾回收器运行,就肯定会被回收,不管还有没有可用内存。

    虚引用,虚引用等于没有引用,任何时候都有可能被垃圾回收。

  9. 获取图片真实高度大小:图片的drawable对象 drawable.getIntrinsicHeight();

  10. LruCache使用

     
  11. bitmap.compress(arg0, arg1, arg2);压缩图片,第一个参数是压缩后图片的类型png,jpg等,第二个是压缩比例,100的话表示不压缩,第三个参数是输出流

  12. canvas绘制文字起点是文字左下角。paint.setTextAlign( )可以修改绘制文字的起点

  13. 两个viewpager嵌套的时候里层的viewpager默认是不能滑动的,因为父类默认会拦截子类控件的透彻事件
    所以需要在父类中重写onInterceptTouchEvent()方法,返回false表示不拦截子类的touch事件,或者在子类中 重写dispatchTouchEvent()方法,在方法中加上一句getParent().requestDisallowInterceptTouchEvent(true);这句话的意思是将父类不允许拦截子类touch事件的属性设置为true,(事件的分发机制:dispatchTouchEvent->onInterceptTouchEvent->onTouchEvent)
  14. viewHolder之所以要声明成静态的是因为,非静态的内部类拥有外部类的强引用,是防止内存泄露的一种方式
  15. popupwindow需要设置上背景(view上有的话可以设置透明背景),点击返回才会有响应
  16. baseActivity中一般用context = getApplicationContext()取得上下文环境,不用this的原因是防止内存泄漏
  17. Target SDK,一般设置为目前市场占有率最高的版本,兼容性问题小
  18. compile with:一般选择较高的版本,因为随着安卓的发展,会添加很多新的API,编译版本高可以通过,如果设置的较低的话,则编译无法通过。
  19. 如何限制一个方法并发访问的线程数
    1. static Semaphore semaphore = new Semaphore(6);
    然后在一个线程开始的时候调用
    1. semaphore.acquire();
    在线程结束的时候调用
    1. semaphore.release();
  20. 版本号1.0.0:最后一位表示修复上一版本的bug,第二位表示更新了部分功能,第一位表示项目重大更新(代码重构,界面整体修改,很多功能添加)
  21. 文字阴影效果:shadowX=“1”  设置颜色 shadowColor=“#FF0000” 最后要设置shadowradius="1"控制阴影范围
  22. 手机模拟器访问10.0.2.2就是模拟器所在电脑的ip地址。是安卓工程师故意留给我们的固定ip地址
  23. 直接使用系统自带的theme去掉页面的title的话会导致其他UI很丑,所以我们一般不用系统自带的theme而是在默认的theme中添加<item name="android:windowNoTitle">true</item>
  24. activity的切换动画(100%p:就是整个屏幕宽度)
  25. 跑马灯效果
  26. gridview的布局文件
  27.  开发过程中可以在values文件夹下面新建一个color.xml设定所有的颜色值。
  28. 下载完成后自动安装APP
    1. protected void installApk(File file) {
    2. //系统应用界面,源码,安装apk入口
    3. Intent intent = new Intent("android.intent.action.VIEW");
    4. intent.addCategory("android.intent.category.DEFAULT");
    5. /*//文件作为数据源
    6. intent.setData(Uri.fromFile(file));
    7. //设置安装的类型
    8. intent.setType("application/vnd.android.package-archive");*/
    9. intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
    10. startActivity(intent);
  29. 获取APP版本名称
    1. PackageManager packageManager = getPackageManager();
    2. try {
    3. //0代表基本信息
    4. PackageInfo packageInfo = packageManager.getPackageInfo(this.getPackageName(), 0);
    5. String versionName = packageInfo.versionName;
    6.          String versionCode = packageInfo.versionCode;  
    7. }
    8. catch (NameNotFoundException e) {
    9. // TODO Auto-generated catch block
    10. e.printStackTrace();
    11. }
1 0