被问到Glide 源码等突破性问题,不好意思我都会

安卓Glide那些事情面试,一篇全部搞定 1、优先从活动缓存获取2、活动缓存没有就再内存缓存中寻找3、内存缓存没有,就去磁盘缓存读取4、磁盘缓存没有就去网络获取本地文件读取。 阅读详情

之前在一次面试中被问到数据库.网络请求.IntentService. view 绘制.内存泄漏.OOM.动画框架.自定义 view.Glide 源码.属性动画等等一系列的问题,虽然都答上来了,但是还是有一些细节性的东西没有注意得到。

回来以后吧很多知识整理成了一份PDF,还是比较全面的
(▽)
从基础到进阶。含有BATJ.字节跳动面试专题,算法专题,高端技术专题,混合开发专题,java面试专题,Android,Java小知识,到性能优化.线程.View.OpenCV.NDK等应有尽有。还有辅之相关的视频+学习笔记

更多完整项目下载。未完待续。源码。图文知识后续上传github。
可以点击关于我联系我获取

1.数据库的操作类型有哪些,如何导入外部数据库?

读懂题目。如果碰到问题比较模糊的时候可以适当问问面试官。

配合面试官来面试:面试是一个相互了解的过程,要充分利用面试的题目和时间把自己的能力和技术展现出来,面试官能够看到你的真实技术。

1)使用数据库的方式有哪些?
  • openOrCreateDatabase(String path);
  • 继承SqliteOpenHelper类对数据库及其版本进行管理(onCreate,onUpgrade)
    当在程序当中调用这个类的方法getWritableDatabase()或者getReadableDatabase();的时候才会打开数据库。如果当时没有数据库文件的时候,系统就会自动生成一个数据库。
2)操作的类型:增删改查CRUD

直接操作SQL语句:SQliteDatabase.execSQL(sql);
面向对象的操作方式:SQLiteDatabase.insert(table, nullColumnHack, ContentValues);

如何导入外部数据库?

一般外部数据库文件可能放在SD卡或者res/raw或者assets目录下面。

写一个DBManager的类来管理,数据库文件搬家,先把数据库文件复制到”/data/data/包名/databases/”目录下面,然后通过db.openOrCreateDatabase(db文件),打开数据库使用。
我上一个项目就是这么做的,由于app上架之前就有一些初始数据需要内置,也会碰到数据的升级等问题,我是这么做的…… 同时我碰到最有意思的问题就是关于数据库并发操作的问题,比如:多线程操作数据库的时候,我采取的是封装使用互斥锁来解决……

2.是否使用过本地广播,和全局广播有什么差别?

引入本地广播的机制是为了解决安全性的问题:

1) 正在发送的广播不会脱离应用程序,比用担心app的数据泄露;
2) 其他的程序无法发送到我的应用程序内部,不担心安全漏洞。(比如:如何做一个杀不死的服务—监听火的app 比如微信、友盟、极光的广播,来启动自己。)
3) 发送本地广播比发送全局的广播高效。(全局广播要维护的广播集合表 效率更低。全局广播,意味着可以跨进程,就需要底层的支持。)

本地广播不能用静态注册。----静态注册:可以做到程序停止后还能监听。
使用:

  • 注册:
    LocalBroadcastManager.getInstance(this).registerReceiver(new XXXBroadCastReceiver(), new IntentFilter(action));
  • 取消注册:
    LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver)
3.是否使用过 IntentService,作用是什么, AIDL 解决了什么问题?

如果有一个任务,可以分成很多个子任务,需要按照顺序来完成,如果需要放到一个服务中完成,那么使用IntentService是最好的选择。

一般我们所使用的Service是运行在主线程当中的,所以在service里面编写耗时的操作代码,则会卡主线程会ANR。为了解决这样的问题,谷歌引入了IntentService.

IntentService的优点:
(1) 它创建一个独立的工作线程来处理所有一个一个intent。
(2) 创建了一个工作队列,来逐个发送intent给onHandleIntent()
(3) 不需要主动调用stopSelf()来结束服务,因为源码里面自己实现了自动关闭。
(4) 默认实现了onBind()返回的null。
(5) 默认实现的onStartCommand()的目的是将intent插入到工作队列。

总结: 使用IntentService的好处有哪些。首先,省去了手动开线程的麻烦;第二,不用手动停止service;第三,由于设计了工作队列,可以启动多次—startService(),但是只有一个service实例和一个工作线程。一个一个熟悉怒执行。

AIDL 解决了什么问题?
AIDL的全称:Android Interface Definition Language,安卓接口定义语言。
由于Android系统中的进程之间不能共享内存,所以需要提供一些机制在不同的进程之间进行数据通信。

远程过程调用: RPC—Remote Procedure Call。 安卓就是提供了一种IDL的解决方案来公开自己的服务接口。AIDL:可以理解为双方的一个协议合同。双方都要持有这份协议—文本协议 xxx.aidl文件(安卓内部编译的时候会将aidl协议翻译生成一个xxx.java文件—代理模式:Binder驱动有关的,Linux底层通讯有关的。)
在系统源码里面有大量用到aidl,比如系统服务。
电视机顶盒系统开发。你的服务要暴露给别的开发者来使用。

讲解Binder机制。

4.Activity、 Window、 View 三者的差别, fragment 的特点?

Activity、 Window、 View 三者如何协同显示界面的。—考点:显示的过程(view 绘制流程)源码的熟悉度。

Activity剪窗花的人(控制的);Window窗户(承载的一个模型);View窗花(要显示的视图View);LayoutInflater剪刀—将布局(图纸)剪成窗花。
(Alt+方向箭头)

fragment 的特点?(你用fragment有没有领略到一些乐趣,或者有没有踩过什么坑?)

fragment的设计主要是把Activity界面包括其逻辑打碎成很多个独立的模块,这样便于模块的重用和更灵活地组装呈现多样的界面。

  • Fragment可以作为Activity界面的一个部分组成;
  • 可以在一个Activity里面出现多个Fragment,并且一个fragment可以在多个Activity中使用;
  • 在Activity运行中,可以动态地添加、删除、替换Fragment。
  • Fragment有自己的生命周期的,可以响应输入事件。

踩过的坑:

  • 重叠;
  • 注解newAPI(兼容包解决);
  • Setarguement()初始化数据;
  • 不能在onsave…()方法后,commit;
  • 入栈出栈问题; --事务。像Activity跳转一样的效果,同时返回的时候还能回到之前的页面(fragment)并且状态都还在。replace(f1,f2)严重影响生命周期:add()+show+hide
5. 低版本 SDK 实现高版本 api

几种情况:

1) 一般很多高版本的新的API都会在兼容包里面找到替代的实现。比如fragment。
Notification,在v4兼容包里面有NotificationCompat类。5.0+出现的backgroundTint,minSdk小于5.0的话会包检测错误,v4兼容包DrawableCompat类。
2) 没有替代实现就自己手动实现。比如:控件的水波纹效果—第三方实现。
或者直接在低版本去除这个效果。
3)补充: 如果设置了minSDK但是代码里面使用了高版本的API,会出现检测错误。需要在代码里面使用声明编译检测策略,比如:@SuppressLint和@TargetApi注解提示编译器编译的规则。@SuppressLint是忽略检测;@TargetApi=23,会根据你函数里面使用的API,严格地匹配SDK版本,给出相应的编译错误提示。
4) 为了避免位置的错误,最好不要使用废弃api。(一般情况下不会有兼容性问题,后面可能会随时删除这个API方法;性能方面的问题。)

6. launch mode 应用场景

栈:先进后出
标准模式
SingleTop:使用场景:浏览器的书签;通讯消息聊天界面。
SingleTask:使用场景:某个Activity当做主界面的时候。
SingleInstance:使用场景:比如浏览器BrowserActivity很耗内存,很多app都会要调用它,这样就可以把该Activity设置成单例模式。比如:闹钟闹铃。

7.view 绘制流程

Measure: 测量,测量自己。如果是ViewGroup就需要测量里面的所有childview.
测量的结果怎么办?setMeasuredDimension(resolveSizeAndState(maxWidth, widthMeasureSpec, childState), heightSizeAndState);设置自己的大小。
Layout: 摆放,把自己摆放在哪个位置。如果是ViewGroup就需要发放里面的所有childview.
怎么去具体摆放呢?
Draw:绘制

  /*
         * Draw traversal performs several drawing steps which must be executed
         * in the appropriate order:
         *
         *      1. Draw the background
         *      2. If necessary, save the canvas' layers to prepare for fading
         *      3. Draw view's content
         *      4. Draw children
         *      5. If necessary, draw the fading edges and restore layers
         *      6. Draw decorations (scrollbars for instance)
         */
8. 什么情况导致内存泄漏

1) 什么是内存泄漏:最好解释清楚GC垃圾回收机制以及概念GC Root。
2) 为什么会有内存泄漏:因为内存泄漏是属于人为的失误造成的。而且面向对象开发关系复杂、多线程的关系,很容易出现引用层级关系很深以及很混乱。
3) 什么情况容易导致内存泄漏:
4) 如何解决内存泄漏

9. ANR 定位和修正

可以通过查看/data/anr/traces.txt查看ANR信息。
根本原因是:主线程被卡了,导致应用在5秒时间未响应用户的输入事件。

很多种ANR错误出现的场景:

  • 主线程当中执行IO/网络操作,容易阻塞。
  • 主线程当中执行了耗时的计算。----自定义控件的时候onDraw方法里面经常这么做。
    (同时聊一聊自定义控件的性能优化:在onDraw里面创建对象容易导致内存抖动—绘制动作会大量不断调用,产生大量垃圾对象导致GC很频繁就造成了内存抖动。)内存抖动就容易造成UI出现掉帧卡顿的问题
  • BroadCastReceiver没有在10秒内完成处理。
  • BroadCastReceiver的onReceived代码中也要尽量减少耗时的操作,建议使用IntentService处理。
  • Service执行了耗时的操作,因为service也是在主线程当中执行的,所以耗时操作应该在service里面开启子线程来做。
  • 使用AsyncTask处理耗时的IO等操作。
  • 使用Thread或者HandlerThread时,使用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)或者java.lang.Thread.setPriority (int priority)设置优先级为后台优先级,这样可以让其他的多线程并发消耗CPU的时间会减少,有利于主线程的处理。
  • Activity的onCreate和onResume回调中尽量耗时的操作。
10.什么情况导致 oom

OOM产生的原因:内存不足,
android系统为每一个应用程序都设置了一个硬性的条件:DalvikHeapSize最大阀值64M/48M/24M.如果你的应用程序内存占用接近这个阀值,此时如果再尝试内存分配的时候就会造成OOM。

  • 内存泄露多了就容易导致OOM
  • 大图的处理。压缩图片。平时开发就要注意对象的频繁创建和回收。
  • 可以适当的检测:ActivityManager.getMemoryClass()可以用来查询当前应用的HeapSize阀值。可以通过命名adb shellgetProp | grep dalvik.vm.heapxxxlimit查看。

如何避免内存泄露:
1)减小对象的内存占用:

  • 使用更加轻量级的数据结构:
    考虑适当的情况下替代HashMap等传统数据结构而使用安卓专门为手机研发的数据结构类ArrayMap/SparseArray。SparseLongMap/SparseIntMap/SparseBoolMap更加高效。
    HashMap.put(string,Object);Object o = map.get(string);会导致一些没必要的自动装箱和拆箱。
  • 适当的避免在android中使用Enum枚举,替代使用普通的static常量。(一般还是提倡多用枚举—软件的架构设计方面;如果碰到这个枚举需要大量使用的时候就应该更加倾向于解决性能问题。)。
  • 较少Bitmap对象的内存占用。
    使用inSampleSize: 计算图片压缩比例进行图片压缩,可以避免大图加载造成OOM;
    decodeformat:图片的解码格式选择,ARGB_8888/RGB_565/ARGB_4444/ALPHA_8,还可以使用WebP。
  • 使用更小的图片
    资源图片里面,是否存在还可以继续压缩的空间。

2)内存对象的重复利用:
使用对象池技术,
两种:

自己写;
利用系统既有的对象池机制。比如LRU(Last Recently Use)算法。

  • a.ListView/GridView源码可以看到重用的情况ConvertView的复用。RecyclerView中Recycler源码。
  • b.Bitmap的复用
    Listview等要显示大量图片。需要使用LRU缓存机制来复用图片。
  • c. 避免在onDraw方法里面执行对象的创建,要复用。避免内存抖动。
  • d 常见的java基础问题—StringBuilder等

3)避免对象的内存泄露
4)使用一些内存的优化策略:看文档

11.Android Service 与 Activity 之间通信的几种方式

1)通过Binder
2)通过广播

12.Android 各个版本 API 的区别

把几个关键版本的特性记住:3.0/4.0、4.4、5.0、6.0/7.0

13.Requestlayout, onlayout, onDraw, DrawChild 区别与联系

RequestLayout()方法: 会导致调用Measure()方法和layout()。将会根据标志位判断是否需要onDraw();
onLayout(): 摆放viewGroup里面的子控件
onDraw(): 绘制视图本身;(ViewGroup还需要绘制里面的所有子控件)
drawChild(): 重新回调每一个子视图的draw方法。child.draw(canvas, this, drawingTime);

14.invalidate()和 postInvalidate() 的区别及使用

invalidate(): 在主线程当中刷新;
postInvalidate(): 在子线程当中刷新;其实最终调用的就是invalidate,原理依然是通过工作线程向主线程发送消息这一机制。

public void postInvalidate() {
        postInvalidateDelayed(0);
    }
    public void postInvalidateDelayed(long delayMilliseconds) {
   // We try only with the AttachInfo because there's no point in invalidating
        // if we are not attached to our window
        final AttachInfo attachInfo = mAttachInfo;
        if (attachInfo != null) {
            attachInfo.mViewRootImpl.dispatchInvalidateDelayed(this, delayMilliseconds);
        }
    }

    public void dispatchInvalidateDelayed(View view, long delayMilliseconds) {
        Message msg = mHandler.obtainMessage(MSG_INVALIDATE, view);
        mHandler.sendMessageDelayed(msg, delayMilliseconds);
    }
public void handleMessage(Message msg) {
            switch (msg.what) {
            case MSG_INVALIDATE:
                ((View) msg.obj).invalidate();
                break;
15.Android 动画框架实现原理

传统的动画框架: View.startAnimation();
弊端: 移动后不能点击。原因?跟实现机制有关系。
所有的透明度、旋转、平移、缩放动画,都是在view不断刷新调用draw的情况下实现的。
调用的canvas.translate(xxx),canvas.scaleX(xxx)…. Xxx:matrix像素矩阵来控制动画的数据。记得看源码,结合多只缩放的demo看源码。

16.Android 为每个应用程序分配的内存大小是多少?

看具体的手机平台,常见的有:64M/32M等

17.LinearLayout 对比 RelativeLayout

性能对比: LinearLayout的性能要比RelativeLayout好。
因为RelativeLayout会测量两次。而默认情况下(没有设置weight)LinearLayout只会测量一次。

为什么RelativeLayout会测量两次?首先RelativeLayout中的子view排列方式是基于彼此依赖的关系,而这个依赖可能和布局中view的顺序无关,在确定每一个子view的位置的时候,就需要先给每一个子view排一下序。又因为RelativeLayout允许横向和纵向相互依赖,所以需要横向纵向分别进行一次排序测量。

18.优化自定义 view

1) 减少在onDraw里面大量计算和对象创建和大量内存分配。
2) 应该尽量少用invalidate()次数。
3) view里面耗时的操作layout。减少requestLayout()避免让UI系统重新遍历整棵树。Mearsure。
4) 如果你有一个很复杂的布局,不如将这个复杂的布局直接使用你自己的写的ViewGroup来实现。减少了一个树的层次关系 全部都是自己测量和layout,达到优化的目的。(Facebook就经常这么干)

19.ContentProvider

提示:跨进程通信。进程之间进行数据交互共享。;源码来一剁。

20.fragment 生命周期
21. volley 解析
22. Android Glide 源码解析
23. Android 属性动画特性
24.如何保证一个后台服务不被杀死,比较省电的方式是什么?
25. touch 事件传递流程
26. Handler、 Thread 和 HandlerThread 的差别
27.描述一次网络请求的流程

请查看完整的PDF版

更多完整项目下载。未完待续。源码。图文知识后续上传github。
可以点击关于我联系我获取

Glide源码学习九:带你全面了解Glide 4的用法(1) 作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2019 年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动?就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Java程序员的技术功底。最近我整理了一份复习用的面试题及面试高频的考点题及技术点梳理成一份“Java经典面试问题(含答案解析).pdf和一份网上搜集的“Java程序员面试笔试真题库.pdf。 阅读详情

相关推荐

Android图片压缩解决方案,解决图片加载过程中ANR现象

Android图片压缩解决方案,解决图片加载过程中ANR现象

commit(), commitNow()和commitAllowingStateLoss()

关于FragmentTransaction的各种提交方法: commit(),commitAllowingStateLoss(),commitNow()和commitNowAllowingStateLoss(). 作者Bryan Herbst发了一个blog The many flavors of commit()讨论这几个方法的特点和用途. 下文是中文摘要. FragmentTransactio...

weixin_34309543的博客 1241

Android Glide 4.0+使用详解

主要介绍了Android Glide 4.0+使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Glide4的一个天坑!!!使用不当导致ANR,原因很难排查

Glide3.7用得很熟练了,接手别人一个项目,用的是Glide4.7.1的版本,心想好吧,这下不用自定义圆角Transform了,直接用Glide的API就可以了 然而一用就是ANR。。。。。。。。。。。 不知道哪里出问题,排查,从各个角度去找,就是没想到是Glide的问题,更没想到是ImageView的setTag()问题。。。。 问题:如果Glide加载的图片对象是一个ImageVie...

qugengting的博客 1731

SAP SD科目确定:从配置到凭证的财务集成核心

本文深入解析SAP SD科目确定的核心价值与配置实践,涵盖从主数据准备到财务凭证生成的全流程。通过六步配置法和KOFI00过程拆解,帮助企业实现销售与财务模块的高效集成,确保收入、成本等数据准确归集至对应会计科目,提升财务自动化水平与数据准确性。

weixin_33491377的博客 251

Cesium中实现阴影率分析

看到群里有人在研究这个,所以看了一下。主要是模仿超图的,实现原理超图有做回答:但其实超图的这个实现方式还是过于复杂,原因是:既然是获取太阳的日照阴影,而Cesium中原本就存在太阳,且能投射阴影,因此其实并不需要再次计算太阳位置并计算视锥获取深度图,直接使用Cesium原生的太阳深度图即可。

weixin_43481439的博客 2215

「Glide源码分析」,2024Android常见面试题

Glide在使用过程对于图片的加载是没有进度显示的,但是根据文档,我们完全可以实现自己的 Model。基于最新的Glide自定义扩展不再需要在中注册。只需要加上注解并实现即可。要实现带进度条,只需要通过使用okHttp3中的拦截器对下载内容进行拦截,将进度抛出至外层展示则可满足。自定义进度条Module//此注解必须加上@Override@Override对进度进行回调的接口okHttp3@Override拦截器//对请求地址相同的url作缓存,避免重复请求。

2401_84003554的博客 1001

深信服上网行为管理设备登录方法、恢复出厂、恢复控制台密码

1.初识设备 1.1 设备外观 1.2 软件版本 2.如何登录设备 首次拿到AC/SG设备时,可以通过以下方法登录设备控制台 SANGFOR AC/SG设备,各网口默认的出厂IP为: eth0(LAN):10.251.251.251/24 , eth1(DMZ)10.252.252.252/24 1、使用一根交叉线连接设备和电脑 (1) 如果电脑连接的是设备的eth0口,需先在电脑上配...

✍千里之行,始于足下 ^,^ 5万+

被问到Glide-源码等突破性问题,不好意思我都会(1)

使用。

2401_84132589的博客 716

流式数据湖存储技术,Apache Paimon是什么?

是一项流式数据湖存储技术,可以为用户提供高吞吐、低延迟的数据摄入、流式订阅以及实时查询能力。Paimon 采用开放的数据格式和技术理念,可以与 Apache Flink / Spark / Trino 等诸多业界主流计算引擎进行对接,共同推进 Streaming Lakehouse 架构的普及和发展。

一个写湿的程序猿 2万+

AD18 PCB模块的Copy

在PCB布局时,时常会将元器件先分模块进行排布,最后才会进行总体的布局,在局部布局的时候,想要移动一个模块的器件总是很麻烦,需要选中全部才能进行移动,有些时候还有选漏的情况,所以会将局部布局的模块把它看做一个整体进行移动,效果如下,元件,布线,铜皮,过孔以及元件编号的位置摆放都和源模块一模一样。4、再选中需要复用的模块内的元件,按照第3步的顺序排序,粘贴刚刚复制的Channel Offset参数。在PCB布局时,有多个模块原理图是一模一样的情况,我们可以只画一个模块,之后灵活应用模块,进行copy。

qq_53859658的博客 3237

Java最全被问到Glide-源码等突破性问题,不好意思我都会,月薪30K

总体来说,如果你想转行从事程序员的工作,Java开发一定可以作为你的第一选择。但是不管你选择什么编程语言,提升自己的硬件实力才是拿高薪的唯一手段。如果你以这份学习路线来学习,你会有一个比较系统化的知识网络,也不至于把知识学习得很零散。我个人是完全不建议刚开始就看《Java编程思想》、《Java核心技术》这些书籍,看完你肯定会放弃学习。建议可以看一些视频来学习,当自己能上手再买这些书看又是非常有收获的事了。本文已被。

2401_84002482的博客 1003

解决微信小程序长页面滚动到底部点击底部的输入框后输入框漂浮且页面滚动到顶部

一、问题描述 项目中有一个长页面上部展示部分信息下部为信息录入,页面长度为三屏幕(不同手机屏幕大小略有差异),当滚动到第二屏或者第三屏去填写信息时点击输入框后输入框漂浮起来了并且页面向上滚动了一段距离,回到了第一屏中展示的内容。效果如图。 滚动到第二屏,证件号输入。 点击输入框 可以看到证件号输入框漂浮了起来并且页面滚动到了第一屏展示的内容。 注意:小程序是2018年上线,在2020年4月份之前该页面从未出现过这种现象。推测:微信的后续更新中对微信小程序基础库进行了重构,导致点击输入框后页

仰望星空的代码 3257

移动开发最新被问到Glide-源码等突破性问题,不好意思我都会,2024年最新46道面试题带你了解中高级Android面试

(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总)面试成功其实是必然的,因为我做足了充分的准备工作,包括刷题啊,看一些Android核心的知识点,看一些面试的博客吸取大家面试的一些经验,

2401_84545364的博客 889

【Settings随记:二】一级菜单,二级菜单的添加与隐藏,添加辅助功能

首先会去调用父类的onCreatePreferences(Bundle savedInstanceState, String rootKey)方法,然后调用addPreferencesFromResource(R.xml.assistant_function)方法(这个方法是父类的)加载二级菜单的xml配置文件,实现创建二级菜单,这个配置文件路径在res/xml/assistant_function.xml。controller:该item的控制器,控制它的内容展示,是否可用,也可以控制它的点击事件等。

镇元子的博客 1594

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Glide源码学习九:带你全面了解Glide 4的用法

目录 系列文章: 相关文章: Glide 4概述 开始 加载图片 占位图 指定图片大小 缓存机制 指定加载格式 回调与监听 1. into()方法 2. preload()方法 3. submit()方法 4. listener()方法 图片变换 自定义模块 使用Generated API 结束语 系列文章: Android面试题:Glide Glide源...

songzi1228的博客 466

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Glide源码解析(八)带你全面了解Glide 4的用法

转载自 guolin,略有删减改动 Glide源码解析(八)带你全面了解Glide 4的用法 本篇将是我们这个Glide系列的最后一篇文章。 其实在写这个系列第一篇文章的时候,Glide就推出4.0.0的RC版了。那个时候因为我一直研究的都是Glide 3.7.0版本,再加上RC版本还不太稳定,因此整个系列也都是基于3.7.0版本来写的。 而现在,Glide的最新版本已经出到了4.4.0,可以说Glide 4已经是相当成熟和稳定了。而且也不断有朋友一直在留言,想让我讲一讲Glide 4的用法,因为Glide

aha_jasper的博客 1204

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Glide源码学习九:带你全面了解Glide 4的用法,一线互联网移动架构师设计思想解读开源框架

指定图片大小 缓存机制 指定加载格式 回调与监听 1. into()方法 2. preload()方法 3. submit()方法 4. listener()方法 图片变换 自定义模块 使用Generated API 结束语 系列文章: ===== Android面试题:Glide Glide源码学习一:Glide框架介绍、with方法详解 Glide源码学习二:load()详解 Glide源码学习三:into()详解 Glide源码学习四:缓存 Glide源码学习五:回调与监听 Glide源码学习六:图

m0_66685194的博客 1838

Android图片加载框架最全解析(八),带你全面了解Glide 4的用法

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、博主微信(guyun297890152)、QQ技术交流群(183198395)。 from:https://blog.youkuaiyun.com/guolin_blog/article/details/78582548 本篇将是我们这个Glide系列的最后一篇文章。 其实在写这个系列第一篇文章的时候,...

孤云博客 380

D2DX:让经典暗黑破坏神2在现代PC上焕发新生的终极渲染解决方案

D2DX是一款专为经典游戏《暗黑破坏神2》设计的现代化渲染优化工具,通过创新的DirectX 11渲染层替换、智能缩放算法和运动预测技术,彻底解决了这款2000年发布的经典游戏在现代PC上的兼容性和画质问题。D2DX的核心价值在于让玩家能够以高清分辨率、流畅帧率和现代视觉效果重新体验这款传奇游戏,同时完全保留原版游戏的经典韵味。 ## 经典游戏的现代困境:为何需要D2DX? 《暗黑破坏神2》作

gitblog_00130的博客 226

D2DX深度解析:让暗黑破坏神2在现代PC上重获新生的终极优化方案

**D2DX**是一个革命性的Glide包装器和模组,专门为经典游戏《暗黑破坏神2:毁灭之王》设计,通过创新的渲染技术和智能优化算法,让这款20年前的经典ARPG在现代PC上实现高帧率、高清分辨率和无缝宽屏支持。D2DX不仅解决了原版游戏的25fps帧率限制和640x480分辨率限制,还提供了抗锯齿、运动预测等高级功能,让暗黑破坏神2在21世纪的硬件上焕发新生。 ## 技术挑战:为什么经典游戏需

gitblog_01002的博客 197

D2DX终极指南:三步解决暗黑破坏神2在现代PC上的运行难题

还在为经典游戏《暗黑破坏神2》在现代高分辨率显示器上的糟糕表现而苦恼吗?D2DX作为专为暗黑2打造的完整优化解决方案,能够彻底改变这款经典游戏在现代PC上的运行体验。本文将为你详细解析如何通过简单步骤,让暗黑2获得高帧率、宽屏支持和更好的画质表现。 ## 问题诊断:现代PC运行暗黑2的核心痛点 **画面比例严重失调**:游戏原生的4:3比例在现代16:9或21:9宽屏显示器上产生巨大黑边,严重

gitblog_01185的博客 985

D2DX:三分钟让暗黑破坏神2焕发新生的终极高清补丁指南

还在为经典暗黑破坏神2在现代显示器上的黑边和卡顿烦恼吗?D2DX暗黑破坏神2高清补丁是你的完美解决方案!这款革命性的Glide包装器和修改工具通过先进的API拦截技术,让这款20年经典游戏在现代PC上焕发全新生命。D2DX高清补丁提供高帧率、宽屏显示和画质增强的完整体验,而且完全免费、安装简单。 ## 为什么你需要D2DX高清补丁? ### 传统暗黑2的三大痛点 **画面比例失调**:原生8

gitblog_00050的博客 160
上一篇: 读书人的事情怎么能算"偷"呢?某大厂开发者对于Android多线程的总结
下一篇: 把面试官唬住了,就要50K。没唬住,就要5K!Android开发社招面试
初壹十五a
博客等级 码龄8年 146粉丝 257原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值