手机分辨率,图片加载框架,Service生命周期,LocalBroadcastManager

1、Android手机分辨率适配目录对应表
  文件夹  手机分辨率    图标大小


   mdpi     320*480      48*48px                   
   
   hdpi     480*800      72*72px                   
   
   xhdpi    720*1080     96*96px                   
   
   xxhdpi   1080*1920    144*144px         
   
   xxxhdpi  1440*2560    192*192px 
   
2、Glide:(模仿Picasso,进行了扩展)
   加载静态图片,gif图片,视频,
   网络加载方式为:Glide内部默认通过HttpURLConnection网络方式加载图片,并支持OkHttp,Volley
   集成OkHttp:compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar' compile 'com.squareup.okhttp3:okhttp:3.2.0'
   集成volley:compile 'com.github.bumptech.glide:volley-integration:1.4.0@aar' compile 'com.mcxiaoke.volley:library:1.0.19'
   Glide提供NotificationTarget来加载网络上的图片到通知栏
   Glide默认使用RGB565(每像素2字节存储)进行解码,所以占用内存相对较小,如果想要更高的图片质量,可以设置builder.setDecodeFormat(DecodeFormat.PREFER_ARGB_8888)
   Glide内存缓存,提供了MemorySizeCalculator类决定内存缓存大小及bitmap缓存池
   Glide磁盘缓存:内部磁盘缓存和外部磁盘缓存
   
   
   Picasso:
   Picasso默认使用ARGB_8888(每像素4字节存储)进行解码,所占内存为Glide的一倍
   Picasso缓存的是全尺寸的(只缓存一种),Glide缓存的是跟ImageView尺寸相同的(有多个不同的缓存)
   
   Picasso与Glide比较:
   Picasso能做的Glide都能做,但是Picasso体积比Glide小很多
   如果项目中网络请求用的是OkHttp或者Retrofit,建议用Picasso
   Glide适合大型的图片流,gif,vedio,视频类的应用适合用
   
   Fresco:(体积非常大,使用不方便,一般直接使用他的Bitmap层,自己修改,图片社交APP推荐使用Fresco)
   Fresco最大优势在于5.0以下的bitmap加载,因为5.0以后系统默认是存在Ashmem区了
   加载原理:Fresco将图片放到一个特别的内存区域(Ashmem区),在图片不显示的时候,占用的内存会自动释放。
   
   
3、一套通用框架
   图片加载(glide或Picasso)
   图片操作(PhotoView)
   图片裁剪(uCrop)
   圆角图片(CircleImageView)
   响应式编程(RxJava)
   事件总线(RxBus,EventBus)
   
4、面向接口编程是面向对象编程的一种实现方式,核心思想是将抽象与实现分离,从组件级别来设计代码,达到高内聚低耦合的目的。
   依赖倒置原则:依赖接口或抽象类来编程
   面向接口编程的典型设计模式:策略模式--定义一系列算法,并将每个算法封装起来,还使它们可以互相替换,针对同类问题的多种处理方式,仅仅是具体行为有差别。
   
   
5、startService生命周期:onCreate()->onStartCommand()->onDestroy(),服务已开启时不会重复执行onCreate()
   bindService生命周期:onCreate()->onBind()->onUnbind()->onDestroy()
   
6、LocalBroadcastManager使用注意事项:
   使用LocalBroadcastManager发送的广播要用LocalBroadcastManager接收
   发送:
    @Override
    public void onCreate() {
        super.onCreate();
        localBroadcastManager = LocalBroadcastManager.getInstance(this);
        sendService("服务启动...");
        Log.i("wanlijun","服务启动...");
    }
    private void sendService(String status){
        Intent intent = new Intent(Main2Activity.ACTION_SERVICE);
        intent.putExtra("status",status);
        localBroadcastManager.sendBroadcast(intent);
    }
接收:
localBroadcastManager = LocalBroadcastManager.getInstance(this);
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(ACTION_SERVICE);
        intentFilter.addAction(ACTION_THREAD);
        myBroadcastRecevier = new MyBroadcastRecevier();
        localBroadcastManager.registerReceiver(myBroadcastRecevier,intentFilter);


否则的话接收不到广播


   
   
   
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值