- 博客(162)
- 收藏
- 关注
原创 android-smart-image-view源码分析,android性能优化推荐书
三、源码分析==========从github上clone该项目,可以看到整个项目的代码只包含7个Java源文件,同时,还可进行扩展,方便使用者根据实际图片的来源进行扩展。我们来看看Class逻辑图:上面有提到,SmartImageView继承自ImageView并自定义了一些方法,能够方便的显示网络图片。在Android中,图片的显示最终都绘制到画布canvas上以位图的形式显示,所以通过逻辑图可以看出定义了一个 SmartImage 接口,而里面有一个返回值为Bitmap的g
2022-02-18 14:07:19
1584
原创 Android-Notes|BottomNavigationView-爱上-Lottie,android高级开发面试题
}复制代码封装个 BasicData,存放 App 内置的一些基本数据,这里主要针对 Lottie 文件:val mNavigationAnimationList = arrayListOf(LottieAnimation.HOME,LottieAnimation.SUBSCRIBE,LottieAnimation.DISCOVERY,LottieAnimation.ACCOUNT)val mNavigationAnimationNightList = arrayListOf(Lotti
2022-02-18 14:05:53
383
原创 Android-app自动更新总结(已适配9-0),浅谈Android消息机制原理
Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.REQUEST_INSTALL_PACKAGES})protected void checkUpdate() {showLoadingDialog(“检测更新中…”);version = AppUpdateUtil.getAppVersionCode(this);//检查当前版本号// &n
2022-02-18 14:04:28
537
原创 Android-app自动更新总结(已适配9-0)(1),android路由表位置
1.2 新建文件(路径:res\xml\file_paths.xml):1.3 (app的)build.gradle:implementation “com.lzy.net:okgo:3.0.4”//okgo 网络请求implementation ‘com.google.code.gson:gson:2.8.2’//gsonimplementation “org.permissionsdispatcher:permissionsdispatcher:4.
2022-02-18 14:03:03
232
原创 Android开发者们该如何面对中年危机?,Android开发工程师面试题
正向积极的事情虽然有很多,但是我们的精力是有限的,应该先挑对自己更有意义的事去做。我觉得这个题的任何答案的「本质」都是为了让自己更受欢迎,更重要。所以,这个本质其实和经营一个「产品」是类似的。这事在我们的不同年龄段有不同的解法。Z哥带你来模拟一下看看。你心目中理想的目标应该就如同现在20岁“高龄”的QQ一样,这么多年过去了,依然活的风生水起。它做对了什么?其实就两点:具备一个有长远价值的核心 和 跟着趋势走。QQ握着社交这个「核心」跟着互联网的「趋势」在走,成功跨越了pc时代到移动时代。其实
2022-02-17 19:59:22
1397
原创 Android开发简记:探索App性能优化之Android内存泄漏,透彻分析源码
2、本质原因本该被回收的对象因为某些原因而不能被回收,从而继续停留在堆内存中。当一个对象已不需再本该被GC回收时,但有另一个正在使用的对象持有它的引用,从而导致它不能被GC回收而停留在堆内存中。即长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄漏.四、Android内存泄露主要原因(一)static关键字修饰的成员变量1、static修饰context造成的内存泄漏问题描述:static是Java中的一个关键字,当用它来修饰成员变量时,那么该变量就属于该类,而不是该类的实例。用stati
2022-02-17 19:57:57
140
原创 Android开发插件化来龙去脉(附全套学习视频),flutter登录验证码图片
}}说明:DexClassLoader的构造函数比PathClassLoader多了一个,optimizedDirectory参数,这个是用来指定dex的优化产物odex的路径,在源码注释中,指出这个参数从API 26后就弃用了。PathClassLoader主要用来加载系统类和应用程序的类,在ART虚拟机上可以加载未安装的apk的dex,在Dalvik则不行。DexClassLoader用来加载未安装apk的dex。资源加载Android系统通过Resource对象加载资源
2022-02-17 19:56:32
1263
原创 Android开发两年,跳槽面试小公司面试官说我可以试试大厂---,Android小程序开发实例
开源库用过哪些自己平时写项目学习,基本都用过,原理也了解;重构项目的资讯模块用了Retrofit & RxJava,自己思考优化了代码框架,比如线程切换、页面查找等,其实弄清楚原理,要改哪里一目了然项目中Socket是怎么分包、编码的?包类型分为Text类型、Table类型、资源类型、曲线类型、交互模式数据(曲线类型属性主要是点,关键方法append,可以增量更新数据)公司自己定义了个Base64编码,算法当然不要去纠结了延伸了下压缩(主要用于Table和曲线类型)和加密(参考HTTPS.
2022-02-17 19:53:42
171
原创 Android应用开发Scroller详解及源码浅析,flutter跳转到系统设置
mOffsetY = ev.getY() - mInitY;//横向手势跟随移动if (Math.abs(mOffsetX) - Math.abs(mOffsetY) > ViewConfiguration.getTouchSlop()) {int offset = (int) -mOffsetX;if (getScrollX() + offset > mRightView.getWidth() || getScrollX() + offset < 0) {return true
2022-02-17 19:48:02
277
原创 Android案例:图标名称设置+用户登录界面,【面试总结】
<Buttonandroid:layout_width=“160dp”android:layout_height=“48dp”android:id="@+id/btn_baby"android:layout_gravity=“center”android:background="@color/gold"android:text=“立即购买GO!”android:textColor="@color/violet"android:textSize=“18sp”android:onCli.
2022-02-16 15:20:36
382
原创 Android架构设计——MVC,安卓面试题内存优化
控制层(Controller)Android的控制层的重任通常落在了众多的Activity的肩上。Android中的Actiivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。所以一般不在Activity中写耗时操作代码,要通过Activity交割Model业务逻辑层处理。模型层(Model)我们针对业务模型,建立的数据结构和相关的类,就可以理解为AndroidApp的Model,Model是与View无关,而与业务相关的。对数据库的操作、对网络等的操作都应该在Model里面处理
2022-02-16 15:19:10
1389
原创 Android找实习单位问答,含爱奇艺,小米,腾讯,阿里
2.你有什么突出的能力(题主可以说一下自己的专业和相关特长)3.你可以给公司带来什么好处(如果以前有实习经历可以简单说一下工作内容和价值效果)4.如果工作成果并不突出,那就多讲讲自己的学习能力和成长。个人发展潜力和前景也是许多公司注重的5.网上有很多模板,可以选择合适的参考一下然后是面试这个回答编辑了很久,因为我一个小学妹也是和你一样想找实习单位,但是现在这个大环境,找一个合适的单位并不容易,她备受打击,连带着开始怀疑自己的能力,甚至打算去做体力活(并没有瞧不起体力活,劳动光荣,只是她一个女孩子
2022-02-16 15:16:20
130
原创 Android性能调优之需要掌握的JVM知识,高级Android开发强化实战
Bootstrp ClassLoader(引导类加载器)Bootstrp加载器是由C++语言编写的,它是在JVM启动后初始化的,主要负责加载%JAVA_HOME%/jre/lib , -Xbootclasspath参数指定的路径以及%JAVA_HOME%/jre/classes中的类。因为其是由C++写的,所以不能被Java代码访问到,但是可以查询某个类是否被引导类加载器加载过。Extensions ClassLoader(拓展类加载器)Bootstrp Loader加载ExtClassLo.
2022-02-16 15:14:55
332
原创 Android性能优化 _ 把构建布局用时缩短 20 倍(下),轻松拿下offer
}scaleType = ImageView.ScaleType.FIT_XYsetImageResource(R.drawable.user_portrait_gender_female)}.also { addView(it) }}.also { addView(it) }RelativeLayout(this@Factory2Activity2).apply {layoutParams = LinearLayout.LayoutParams(ViewGroup.LayoutParams.M
2022-02-16 15:12:05
180
原创 Android性能优化 _ 大图做帧动画卡?优化帧动画之 SurfaceView滑动窗口式帧复用
(ps:粗斜体表示引导方案逐步进化的关键点)SurfaceView逐帧解析 & 帧复用简单回顾下上一篇的内容:原生帧动画在播放前解析所有帧,对内存压力大。SurfaceView可以精细地控制帧动画每一帧的绘制,在每一帧绘制前才解析当前帧,且解析后续帧时复用前帧内存空间。遂整个过程在内存只申请了一帧图片大小的空间。下面罗列了一些关键代码:基类:定义绘制框架public abstract class BaseSurfaceView extends SurfaceView implements S
2022-02-16 15:09:14
411
原创 Android开发-CardView卡片View的详解,头条三面技术四面HR
CardView一般用于需要显示阴影效果的UI,此外CardView还提供了圆角的功能。(嘿嘿,这东西还能直接设置成圆形,可以简单的弄成圆形View)。CardView其实本身是使用FrameLayout 帧布局,所以它其实还是一个布局。引用CardView未在androidx全家桶套餐中,需要你自己添加implementation ‘androidx.cardview:cardview:1.0.0’一个简单的使用Demoxml<androidx.constraintlayout.widg
2022-02-15 15:10:56
5325
原创 Android屏幕适配(使用ConstraintLayout),kotlin数组排序
教程如下:1.拉两根横向参考线分别定在20%,65%(博主计算所得)2.然后拉一个imageView进入布局,选择自己要显示的图片3.将此imageView的上下参照物设置为两参照线,并将左右参照物设置为父容器。将其宽设置为wrap_content,高设置为mach_constraint(也就是0dp)。这张图就适配好位置了。同理:适配第二张图新建两线,将两线位置分别定在%89,%93.5。拉一个imageView进入布局,选择自己要显示的图片将此imageView的上下参照
2022-02-15 15:08:06
252
原创 Android实现夜间模式切换功能,android模块化框架
<?xml version="1.0" encoding="utf-8"?>#35464e#212a2f#212a2f#616161#212a2f@android:color/holo_blue_darkvalues中的strings.xmlDayNight日间模式values-night中的strings.xmlDayNight夜间模式在MainActivity.java中添加点击、功能动作public class MainActivity exte
2022-02-15 15:06:41
430
原创 Android完全退出应用程序 ,太爽了
return instance;}//退出栈顶Activitypublic void popActivity(Activity activity) {if (activity != null) {//在从自定义集合中取出当前Activity时,也进行了Activity的关闭操作activity.finish();activityStack.remove(activity);activity = null;}}//获得当前栈顶Activitypublic Activity curren
2022-02-15 15:05:16
200
原创 android多级树形列表,移动应用开发专业前景工资
private MyTreeListViewAdapter adapter;private List mDatas = new ArrayList();//标记是显示Checkbox还是隐藏private boolean isHide = true;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.acti
2022-02-15 15:03:51
193
原创 ARouter源码详解,kotlindata类
/**Completion the postcard by route metas@param postcard Incomplete postcard, should complete by this method.*/public synchronized static void completion(Postcard postcard) {if (null == postcard) {throw new NoRouteFoundException(TAG + “No post
2022-02-05 12:57:37
264
原创 app_actionLayout定义的menu不能触发onOptionsItemSelected
View actionView = (View) newInstance(itemActionViewClassName,ACTION_VIEW_CONSTRUCTOR_SIGNATURE, mActionViewConstructorArguments);item.setActionView(actionView);actionViewSpecified = true;}if (itemActionViewLayout > 0) {if (!actionViewSpecified) {
2022-02-05 12:54:46
377
原创 APP Security:Android中的指纹识别,android适配器ui
<Buttonandroid:id="@+id/btn_activity_main_finger"android:layout_width=“match_parent”android:layout_height=“wrap_content”android:layout_alignParentStart=“true”android:layout_below="@+id/textView"android:layout_marginTop=“20dp”android:text=“指纹识别” /
2022-02-05 12:53:22
2339
原创 Android高级工程师普遍进阶难题:遇到瓶颈我们该如何去提升自己?哪个方向
不要抱怨,抱怨无济于事,只能带来负能量,最重要的是改变7、坚持写博客和技术文章,多总结,多参与开源项目8、选择一家好的有发展前途的公司陪其成长当发现现在公司不能满足自己的成长和发展时,果断跳槽,因为人生毕竟最宝贵的是时间,特别是程序员界~当公司发展不错,自己能学到东西得到锻炼时,就沉下心来一直陪着公司成长切记,不要轻易跳槽,不要因为工资和在公司干的不爽而跳槽!毕竟人生最宝贵的还是时间!永远都是为了自己的发展和提高自己的能力而跳槽9、最后,贵在坚持上面说再多都没用,最重要的坚持,贵在行动制定好
2022-02-05 12:51:57
2556
原创 Android面试题之性能优化篇,kotlin版权
1.如何对 Android 应用进行性能分析不考虑使用其他第三方性能分析工具的话,我们可以直接使用 ddms 中的工具,其实 ddms 工具已经非常的强大了。ddms 中有 traceview、heap、allocation tracker 等工具都可以帮助我们分析应用的方法执行时间效率和内存使用情况。Traceview 是 Android 平台特有的数据采集和分析工具,它主要用于分析 Android 中应用程序的hotspot(瓶颈)。heap 工具可以帮助我们检查代码中是否存在会造成内存
2022-02-05 12:47:41
2107
原创 Android面试必问:Handler、Bitmap,android游戏开发前景
线程==============================================================1、线程池的好处?四种线程池的使用场景,线程池的几个参数的理解?使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源不足的问题。如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或则“过度切换”的问题,归纳总结就是:重用存在的线程,减少对象创建、消亡的开销,性能佳。可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多
2022-02-05 12:46:17
119
原创 Android面经:入职网易的那一天,我哭了,常见移动app开发框架
13、关于项目开发的整体架构的理解,比如MVC、MVP和MVVM。关于市面上主流的插件化和组件化开发的设计思想和实现方案的理解等。14、此外,如果你会一些其他的开发方式或语言也会加分不少。比如Kotlin,Js,ReactNative或者Weex等等。面试的具体思路一般面试官都会让你先来个自我介绍,可以介绍下自己的学习经历和工作经历。在项目中担任的角色和从事的工作。然后会侧重点让你讲一个你的代表作和用到的技术,然后根据你讲的技术对你深挖。也会问到你项目中碰到的难题和问题是如何解决的,这个就是考验你解决
2022-02-04 13:47:12
124
原创 Android通用流行框架大全,零基础入门学习android
| Picasso-transformations | 一个为Picasso提供多种图片变换的库 || Glide-transformations | 一个为Glide提供多种图片变换的库 || Android-gpuimage | 基于OpenGL的Android过滤器 |4. 网络请求| 名称 | 描述 || — | — || Android Async HTTP | Android异步HTTP库 || AndroidAsync | 异步Socket,HTTP(客户端+服务器),Web
2022-02-04 13:44:23
1006
原创 Android进阶:知识遗忘真的是程序员的通病吗?其实是这些新知识的学习方法你还没get到
好了,看到这里,我有没有帮你解决知识学了就忘这个问题呢?接下来,咱们来谈第二个问题。2、学习新知识的方法很多私底下询问我关于自学编程问题的人,我都会告诉他们,编程这个行业需要你持续不断的学习,因为技术的更新迭代非常的快,而且要学习的知识点真的是特别的多,所以,对于一个想要自学编程的人来说,掌握正确的学习新知识的方法,尤为重要!那这样的方法有人告诉你吗?不管有没有,反正我今天要和你分享一下,所以等下看完记得点赞哦!你觉得最好的学习新知识的方法是什么?对于编程来说,我们大致把它分为理论和实战,就是你
2022-02-04 13:41:33
157
原创 Android设计模式系列-适配器模式,大厂安卓面试真题精选
适配器模式分为类适配器模式和对象适配器模式。关于类适配器模式,因为java的单继承,如果继承一个类,另外的则只能是接口,需要手动实现相应的方法。热门词汇:类的适配器模式对象的适配器模式缺省适配器模式 源类 目标接口2.结构图和代码为了简明直接,我省略了相关的其他适配器,只以此两个适配器为例。ListViews做为client,他所需要的目标接口(targetinterface)就是ListAdapter,包含getCount(),getItem(),getView()等几个基本的方法,为了兼容L
2022-02-04 13:38:43
651
原创 android自定义控件——画一个海底世界,Android面试相关文章及Github学习资料
欢迎关注我的公众号 “安安安安卓”,学习更多知识读一本好书。 ——我说的前面几篇文章我们分别讲了自定义控件中常用到的 Canvas、Paint、Path。本篇我们在前面几篇的基础上更进一步,绘制一篇海底世界的效果。项目github地址github.com/ananananzhu…绘制过程绘制背景首先大海应该是蓝色的吧,而且应该是一个渐变色,那么根据 paint 篇的内容,我们便可以使用 paint.setShader 来实现,实现思路就是使用 Canvas.drawRect 方法绘制整个画.
2022-02-04 13:35:53
704
原创 Cocos2d-x 3,androidapp开发教程
CatmullRomBy类 :这是一个按照笛卡尔曲线移动目标点的动作.****– ActionCatmullRom– 笛卡尔曲线运动local function ActionCatmullRom()local layer = cc.Layer:create()initWithLayer(layer)centerSprites(2)– 设置精灵位置tamara:setPosition(cc.p(50, 50))– 定义位置数组local array = {cc.p(0, 0),
2022-02-03 17:04:38
404
原创 Canvas加动画,实现火柴人跳绳效果,移动端混合开发框架
50);canvas.drawPath(path, paint);3.quadTo 用于绘制二阶贝塞尔曲线,从上一个点开始,绘制二阶Bezier曲线(x1,y1)为控制点, (x2,y2)为终点如果之前没有调用过 moveTo(),则默认从 (0,0)作为起点绘制。/**从上一个点开始,绘制二阶Bezier曲线(x1,y1)为控制点, (x2,y2)为终点如果之前没有调用过 moveTo(),则默认从 (0,0)作为起点绘制。*/public void quadTo(float x1, f
2022-02-03 17:01:47
306
原创 Base64算法,kotlin密封接口
密码协议:也称安全协议,指以密码学为基础的消息交换的通信协议,目的是在网络环境中提供安全服务。密码系统:指用于加密、解密的系统。柯克霍夫原则:数据的安全基于密钥而不是算法的保密。即系统的安全起决于密钥,对密钥保密,对算法公开——现代密码学设计的基本原则。加解密基础密码分类按照时间分:古典密码(以字符为基本单位)现代密码(以信息块为基本加密单元)保密内容算法分:受限算法—算法保密性基于保持算法的秘密—军事领域—类型基于密钥算法—算法的保密性基于对密钥的保密—现在密..
2022-02-03 17:00:22
262
原创 AS自定义模板,效率提升的不是一星半点,2021大厂Android面试集合
</androidx.constraintlayout.widget.ConstraintLayout> TanJiaJunActivityForDagger2.kt.ftlpackage kotlinEscapedPackageName.ui.{kotlinEscapedPackageName}.ui.kotlinEscapedPackageName.ui.{businessName}.activityimport android.os.Bundleimport&
2022-02-03 16:58:57
336
原创 Android面试回忆录:Service有几种启动方式?,android开发工程师
如果需要做耗时的操作,你会怎么做?问题便这样展开了,一个人是否真正懂得原理会灵活运用,一下子便能看出来。 当面试者回答到线程和Handler方式时,我会再问一下对方:是否知道IntentService,在什么场景下使用IntentService?这也是面试官要看的点,真正的项目需要一个开发人员对某个问题有一定的深度,也需要对整个Android的知识点有一定的广度。深度代表这个人对问题认真对待有钻研的精神,广度代表这个人在面对同一个问题时,会更容易从多种可行的方案中选出最合适的一种。Servi.
2022-02-03 16:54:42
510
原创 CoordinatorLayout的简单使用,android开发app的详细过程
效果展示====代码展示====<?xml version="1.0" encoding="utf-8"?><androidx.coordinatorlayout.widget.CoordinatorLayoutxmlns:android=“http://schemas.android.com/apk/res/android”xmlns:app=“http://schemas.android.com/apk/res-auto”xmlns:tools=“http://sch
2022-02-02 15:38:10
553
原创 ConstrainLayout 基础教程2,近期想跳槽的程序员必看
特性详解Visibility behavior (可见性的表现)ConstraintLayout对可见性被标记View.GONE的控件(后称“GONE控件”)有特殊的处理。一般情况下,GONG控件是不可见的,且不再是布局的一部分,但是在布局计算上,ConstraintLayout与传统布局有一个很重要的区别:传统布局下,GONE控件的尺寸会被认为是0(当做点来处理)在ConstraintLayout中,GONE控件尺寸仍然按其可见时的大小计算,但是其外边距大小按0计算这种特殊的行为让我们在无
2022-02-02 15:36:45
7380
原创 BAT门槛高Android渣本处境难?开发3年还未进大厂焦虑?大厂内部面试官分享进大厂操作指南
①先看几套面试题,这些面试题其实都大同小异,都会比较深地涉及到底层源码和实践要点,先把理论题背熟。这些点虽然不少,但其实都是体力活,背书么,这种事应该没难度。该背哪些素材呢?我之前看到的吊打面试官系列就不错。②在背熟以后,再给一些技术找些项目的背景,这些技术未必要深,但一定要结合项目的业务。5、多找几家小公司面试,其实有些小公司的面试难度还超出大公司理想情况下,你面试的结果和技能无关,和项目经验的长短也无关,只和你简历上的项目和技术介绍有关,和你事先的准备亮点说辞有关。但如果单纯准备不去实践,任何面
2022-02-02 15:35:20
147
原创 ASM字节码插桩,Context都没弄明白凭什么拿高薪
}}由于我们操作的是字节码插桩,所以可以进入test/java下面使用javac对这个类进行编译生成对应的class文件。javac InjectTest.java3.3、执行插桩因为main方法中没有任何输出代码,我们输入命令:java InjectTest执行这个Class不会有任何输出。那么我们接下来利用ASM,向main方法中插入一开始图中的记录函数执行时间的日志输出。在单元测试中写入测试方法/**1、准备待分析的class*/FileInputStream fis = new
2022-02-02 15:32:30
600
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人