Music总结第一次

一.关于项目结构。 

  • MVC架构:   模型(model)--控制器(control)--视图(布局view)

Model:在项目结构里体现为包model,封装一些数据并且大都含有数据对应的getter和setter的方法。  model类可有着如下特殊使用:GreenDao的实体类、 Gson注解@SerializedName属性对json数据字段重命名、实现接口Serializable、static内部类

View:由布局,还有自定义的view组成。自定义的view常常包含在widget中

Control:除以上之外的activity,adapter,net,receiver,stroge,utils等。

  •  application:MyApplication+notifier

MyApplication持有:单例模式、 全局context、监听所有Activity的生命周期变化(需要注册)(接口Application.ActivityLifecycleCallBacks)、Activity管理(List<Activity>)

  • BaseFragment:onActivityCreated 、onStart、onRequestPermissionsResult,onDestroy、以及setListener。
  • BaseActivity :集合子Acitivity的共性,以及强制子Activity的行为。1.初始化视图,数据:setContentView----initView--ToolBar                 的 支 持。  2.服务的绑定。 
  • enums:使用枚举常量(无类型的标识常量)类来管存常量。

二.Adapter

  • FragmentPagerAdapter:
  • PagerAdapter:使用List<View>操作。
  • BaseAdapter:---getView--使用static内部类ViewHolder避免每次调用都实例find...-----通过tag进行绑定和获取当前应该的                               view。

三.Service

  • 音频焦点:
     * AudioManager :AudioManager provides access to volume and ringer mode control.
     *                提供对音量和振铃模式控制的访问。
     * AudioFocus  :音频焦点,,用来处理多个应用占用音频资源的问题
     *              当获取到音频焦点,就可以播放,  当丢失了音频焦点,播放器停止或者暂停播放
    
    //音频焦点变化时  调用
        @Override
        public void onAudioFocusChange(int focusChange) {
            switch (focusChange){
                case AudioManager.AUDIOFOCUS_GAIN:{
                    if (isPausedByFocusLossTransient){
                        AudioPlayer.get().startPlayer();    // 重新获得焦点  ,回复播放
                    }
                    AudioPlayer.get().getMediaPlayer().setVolume(1f,1f); //设置音量
                    isPausedByFocusLossTransient=false;
                    break;
                }
                //永久丢失焦点,,被其他播放器所占
                case AudioManager.AUDIOFOCUS_LOSS: {
                    AudioPlayer.get().pausePlayer();
                    break;
                }
                //短暂丢失焦点,如来电
                case  AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:{
                    AudioPlayer.get().pausePlayer(false);
                    isPausedByFocusLossTransient=true;
                    break;
                }
                //瞬间丢失焦点,如通知  ,,,duck: 回避,鸭子 ,低下头
                case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:{
                    //音量减小一半
                    AudioPlayer.get().getMediaPlayer().setVolume(0.5f,0.5f);
                }
            }
  •  服务详解初步:https://blog.csdn.net/javazejian/article/details/52709857

三.Stroge---SharedPreferences。

四.自定义绑定@Bind注解---(view、holder)

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Bind {
    int value();
}


public class ViewBinder {

    public static void bind(Activity activity){
        bind(activity,activity.getWindow().getDecorView());
    }

    public static void bind(Object target, View source) {
        Field[] fields = target.getClass().getDeclaredFields();
        if (fields != null && fields.length > 0) {
            for (Field field : fields) {
                try {
                    field.setAccessible(true);
                    if (field.get(target) != null) {
                        continue;
                    }

                    Bind bind = field.getAnnotation(Bind.class);
                    if (bind != null) {
                        int viewId = bind.value();
                        field.set(target, source.findViewById(viewId));
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

五.ScreenUtils 尺寸工具

  • 获得屏幕高度
public static int getScreenWidth(){
        WindowManager  wm=(WindowManager)sContext.getSystemService(Context.WINDOW_SERVICE);
        return wm.getDefaultDisplay().getWidth();
    }
  • 获取状态栏高度
 int  resourceId=sContext.getResources().
                 getIdentifier("status_bar_height","dimen","android");      //获得资源id 
   if(resourceId>0){
     result=sContext.getResources().getDimensionPixelSize(resourceId);
   }  
  • dp,px,sp  转化
    final float scale = sContext.getResources().getDisplayMetrics().density;
                return (int) (dpValue * scale + 0.5f);
    
    ..............

六.View

七.自定义Drawable:

猜你喜欢

转载自blog.csdn.net/qq_41645066/article/details/82946296