版本兼容

  •    Bitmap

   2.3之前Bitmap对象与像素数据是分开存放的,Bitmap对象存在java Heap中而像素数据存放在Native Memory中,这时很有必要调用recycle回收内存。但是2.3之后,Bitmap对象和像素数据都是存在Heap中,GC可以回收其内存。

      if (Build.VERSION.SDK_INT<=10) {
           bitmap.recycle();
       }

  • AsyncTask
AsyncTask在Android 2.3之前默认采用并行执行任务,AsyncTask在Android 2.3之后默认采用串行执行任务
如果需要在Android 2.3之后采用并行执行任务,可以调用AsyncTask的executeOnExecutor()
  • Animator
       3.0之前只有视图动画,3.0之后增加了属性动画;
       并且3.0之前对动画有限制(注意版本兼容)
  • 网络访问
        3.0之后系统要求网络访问必须在子线程中进行,否则网络访问失败并且抛出NetworkOnMainThreadException
  • LruCache
        LruCache是Android3.1所提供的一个缓存类,通过support-v4兼容包可以兼容到早期的Android版本。使用时应该采用support-v4兼容包的LruChe,而不是3.1提供的LruCache.
  • 硬件加速
       Android3.0引入硬件加速
  • 图片背景
          if (Build.VERSION.SDK_INT >= 16) {                                                     
                pointContainerRl.setBackground(mPointContainerBackgroundDrawable);                 
          } else {                                                                               
                pointContainerRl.setBackgroundDrawable(mPointContainerBackgroundDrawable);         

          }    

  • 系统状态栏statusBar

     5.0版本之后才可以控制系统状态栏

  • PopWindow在7.0手机上显示位置错乱问题
  • 只需要重写下面的方法即可:

    @Override

    public void showAsDropDown(View anchor) {
          if(Build.VERSION.SDK_INT == 24) {
             Rect rect = new Rect();
             anchor.getGlobalVisibleRect(rect);
             int h = anchor.getResources().getDisplayMetrics().heightPixels - rect.bottom;
             setHeight(h);
          }
          super.showAsDropDown(anchor);
    }
  •  
       
    如果是想改成其他自定义颜色暂时没有办法。 详细内容可以看我的这篇 白底黑字!Android浅色状态栏黑色字体模式 其实很多国内三方Android系统都有深色状态栏字体模式,但是目前只看到了小米和魅族公开了各自的实现方法,支持底层Android4.4以上的版本。而Android官方在6.0版本才有了深色状态栏字体API。 所以Android4.4以上系统版本可以修改状态栏颜色,但是只有小米的MIUI、魅族的Flyme和Android6.0以上系统可以把状态栏文字和图标换成深色。
    /**  * 设置状态栏图标为深色和魅族特定的文字风格  * 可以用来判断是否为Flyme用户  * @param window 需要设置的窗口  * @param dark 是否把状态栏字体及图标颜色设置为深色  * @return  boolean 成功执行返回true  *  */ public static boolean FlymeSetStatusBarLightMode(Window window, boolean dark) {     boolean result = false;     if (window != null) {         try {             WindowManager.LayoutParams lp = window.getAttributes();             Field darkFlag = WindowManager.LayoutParams.class                     .getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");             Field meizuFlags = WindowManager.LayoutParams.class                     .getDeclaredField("meizuFlags");             darkFlag.setAccessible(true);             meizuFlags.setAccessible(true);             int bit = darkFlag.getInt(null);             int value = meizuFlags.getInt(lp);             if (dark) {                 value |= bit;             } else {                 value &= ~bit;             }             meizuFlags.setInt(lp, value);             window.setAttributes(lp);             result = true;         } catch (Exception e) {         }     }     return result; } /**  * 设置状态栏字体图标为深色,需要MIUIV6以上  * @param window 需要设置的窗口  * @param dark 是否把状态栏字体及图标颜色设置为深色  * @return  boolean 成功执行返回true  *  */ public static boolean MIUISetStatusBarLightMode(Window window, boolean dark) {     boolean result = false;     if (window != null) {         Class clazz = window.getClass();         try {             int darkModeFlag = 0;             Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");             Field  field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");             darkModeFlag = field.getInt(layoutParams);             Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);             if(dark){                 extraFlagField.invoke(window,darkModeFlag,darkModeFlag);//状态栏透明且黑色字体             }else{                 extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体             }             result=true;         }catch (Exception e){         }     }     return result; } 官方在Android6.0中提供了亮色状态栏模式,配置很简单: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {             activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); } 或者在style属性中加上 <item name="android:windowLightStatusBar">true</item>

猜你喜欢

转载自blog.csdn.net/fuweng886/article/details/79838889