自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(125)
  • 收藏
  • 关注

原创 Android性能优化之APK-极限压缩(资源越多,效果越显著),2021Android高级面试题总结

优化发现我们 link 大概优化了 700 kb继续。注意因为 link 是检查有没有引用来做的判断是否使用了资源,那么如果是这种方式勒,所以在删除的时候一定要谨慎。//动态获取资源 id , 未直接使用 R.xx.xx ,则这个 id 代表的资源会被认为没有使用过(类似不能混淆反射类)int indetifier =getResources().getIdentifier(“img_bubble_receive”, “drawable”, getPackageName()); getResou

2022-02-03 16:04:58 329

原创 Android开发,待了3年的小创公司突然没了,上哪去找我的

Android app 开发能力一般,但是足以胜任一般 app 开发的任务(因为确实有段时间未做公司正式项目的 app 开发,但是也不是说已经荒废了技能);Android frameworks 方面比普通开发者了解更多;解决问题,学习实践新技术的能力不错(无论是从第一次编译 AOSP 到后来整个 ROM 的开发,发布。还是从对机器学习完全陌生,到现在能够描述常见机器学习的算法,使用 Tensorflow 实现一些这方面的需求)。说到昨天的面试,面试官几乎是按照他所准备的 Android .

2022-02-03 16:00:42 252

原创 Android开发工程师:都想要进大厂,那么大公司面试的方向和面试官套路你都摸透了吗

这个从各个大公司的招聘来看,都有这个方向的要求。并且有童鞋在去面试的过程中,真的有问算法方面的问题。这个主要考察一个人的解决问题的能力,思路能力,是否开阔,活跃。并且这种题有2种考法。第一种是用Java或者安卓代码能实现的方法去解决。第二,可以不考虑具体用代码怎么实现,而是要看你的分析问题,解决问题的能力。当然第二种的情况比较少。混合开发经验**这个是目前很火的一种安卓开发工程师的需求。Hybrid开发经验。**已经有众多Hybrid App开发成功应用,比如美团、爱奇艺、微信等知名移动应用,都是采

2022-02-03 15:56:27 272

原创 Android开发之MVVM模式实践(三),查缺补漏

container: ViewGroup?,savedInstanceState: Bundle?): View? {if (rootView != null) {return rootView}rootView = inflater.inflate(getLayoutId(), container, false)injectDataBinding(inflater, container)initialize(savedInstanceState)return rootView}pro

2022-02-03 15:53:37 186

原创 Android秋招提前批:以一些失败经历提醒你们,面试前这些准备一定要做好

感叹一声耗时两个月的找工作经历终于是画上句号了,几十个日日夜夜的酸甜苦辣只有裸辞的亲尝者才能体会到吧,下面想来复盘或者说总结一下这段经历。但不管怎么总结,核心还是那一句话:**一定要充分的准备!!!**涉及到的知识点一项都不漏的复习一遍(至于深浅程度主要看自己平时的积累了),一则能很大程度的提高自信(不需要担心被面试官问倒);二则面对问到的知识点时还可以扩展的说清楚该知识点在安卓或者Java体系中的关系和逻辑。否则后续因为复习不到位而与自己理想的公司或岗位失之交臂时你会感到些懊恼。简历准备阶段可以

2022-02-02 14:37:06 94

原创 Android知识笔记:特效系列,仿instagram文字排版特效,android应用开发基础学堂在线答案

一.拆行监听到文本变化后需要对文本进行拆行,得到每行的文字。我们可以通过Layout实现,代码如下:String text = layout.getText().toString();int lineCount = layout.getLineCount();for (int i = 0; i < lineCount; i++) {int start = layout.getLineStart(i);int end = layout.getLineEnd(i);String rowStr

2022-02-02 14:35:41 141

原创 Android用Canvas画一个折线图,并加以简单封装,2021吊打面试官系列

}下面来简单封装一下1.首先提供给外界输入数据的方法:public void setChartdate(String[] xdate, int[] ydate, float[] linedate) {this.xdate = xdate; //x轴坐标this.ydate = ydate; //y轴坐标this.linedate = linedate; //坐标点的y轴上的位置}2.进行数据为空判断和越界判断if (xdate.length!=0&&y

2022-02-02 14:34:16 3547

原创 Android源码解析——Handler,android性能优化面试

private Looper(boolean quitAllowed) {mQueue = new MessageQueue(quitAllowed);mThread = Thread.currentThread();}sendMessageAtTime() 方法中在处理 Message 时,最终调用的是 enqueueMessage() 方法当中,需要注意 msg.target = this 这句代码,target 

2022-02-02 14:31:26 102

原创 Android测量,安卓开发入门到精通

当前测量的尺寸和父布局的给的尺寸是否一致在6.0及其以下,sAlwaysRemeasureExactly=true如果需要重写布局则进入如下逻辑:首先清空标记为PFLAG_MEASURED_DIMENSION_SET(测量值已记录)尝试通过缓存中获取结果(非强制重新布局情况)如果没有缓存则调用onMeasure()进行测量如果有缓存则直接取缓存记录最终的测量结果,并加入至缓存5.ViewGroup.onMeasure()实现过程遍历子View,调用measureChildWithMa.

2022-02-02 14:28:36 410

原创 Android架构组件JetPack之DataBinding玩转MVVM开发实战(四)

最后运行之后,结果如上图。我就不再发一遍了,有兴趣的朋友再拖回去看一遍,反正下面还有~~3 . 更多用法简单的字符拼接简单的三目运算判断名字是否为空,不为空只显示user.name,否则显示donkor11:相当于这里需要注意的是当{}中使用了双引号“”,最外层要改成单引号”根据数据判断,显示数据判断是否为学生,是则显示11,反则,显示00**修改样式 **判断是否为学生,是则修改背景颜色0xFF0000FF,反则,显示0xFFFF0000写在之后的话,这里我们...

2022-02-02 14:27:12 3497

原创 Android权限操作之uses-permission详解,2021Android大厂面试真题

android.permission.ACCESS_CHECKIN_PROPERTIES允许读写访问”properties”表在checkin数据库中,改值可以修改上传( Allowsread/write access to the “properties” table in the checkin database, to changevalues that get uploaded)android.permission.ACCESS_COARSE_LOCATION允许一个程序访问CellID或Wi

2022-02-02 14:25:47 413

原创 Android逆向 学习Android安全和逆向开发的路线总结,为什么Android要采用Binder作为IPC机制

密码学,对称加密算法,非对称加密算法,散列函数;数字签名,数字证书,SSL证书检测,协议与安全协议;了解服务器端与客户端通信协议分析;使用Charles抓登录封包和验证码,协议构造与Java层MD5算法,动态调式smali代码与sign字段;协议构造类与SO层DESCBC算法,协议关键字段SIGN与SO层MD5算法,动态调试协议字段,动态调式协议关键字段SIGN;协议关键字段pwad和sign,动态调式协议字段拼接与MD5加密,分析so层OpenSSLSHA1算法;封包加密与反编译失败,使用方.

2022-01-31 14:20:23 817

原创 android进阶篇01、Android类加载机制与Dex文件简介,android面试题2019

return c;}2、在loadClass方法中,首先会去检查是否已经加载过,如果加载过c不为空则直接返回;如果没有加载过先去调用parent的loadclass方法,这样就会递归调用父加载器(父加载器是在创建加载器的时候作为参数传进来的),如果parent为空,就会去调用BootClassLoader;如果在所有父加载器中都没有成功加载,才会调用自己的findclass方法自己加载;protected Class<?> findClass(String name) throws Cla

2022-01-31 14:18:58 426

原创 Android进程保活主流方案,retrofit原理

项目结构如下。AndroidManifest.xml://不加该权限会报错:java.lang.SecurityException: Permission Denial: startForeground from pid=XXX, uid=XXX requires android.permission.FOREGROUND_SERVICE…ForegroundService :模拟工作的(前台)线程,如有必要会开启ScapegoatService来清除通知栏通知。由于缺乏更多高版.

2022-01-31 14:17:33 1077

原创 Android资源适配,android的基础ui组件

layout/main.xml[html]  view plain copy<?xml version\="1.0" encoding\="utf-8"?>  <LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”android:orientation=“vertical”android:layout_width=“

2022-01-31 14:14:43 565

原创 Android自定义控件开发入门与实战(12)Canvas,kotlin入门潜修

RectF bounds:要保存的区域所对应的举行对象int saveFlags:取值ALL_SAVE_FLAG表示保存全部内容。别的值之后再讲述。第二个构造函数其实和第一个一样,只不过它是根据4个点来构造一个矩形的。下面我们接下来以Xfermode为例,看看saveLayer()函数都做了什么。我们先使用Xfermode来做一个SRC_IN的效果:@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas)..

2022-01-31 14:13:18 340

原创 android自定义底部Tab,项目整体界面框架,靠着这份900多页的PDF面试整理

switch (mState) {case 0:mStateButton1.setSelected(true);tag = mStateButton1.getTag();break;case 1:mStateButton2.setSelected(true);tag = mStateButton2.getTag();break;case 2:mStateButton3.setSelected(true);tag = mStateButton3.getTag();break;case

2022-01-31 14:11:53 888

原创 android自定义底部Tab,项目整体界面框架(1),从思维图到基础再到深入

主要功能1.使用Button自定义底部Tab和Title2.点击底部Tab后使用Fragment切换页面3.主页使用ViewPager滚动显示新闻图片4.自定义类处理Fragment重叠回退问题一、自定义底部Tab类/*******************************************************************************Copyright © Weaver Info Tech Co. LtdTabViewapp.

2022-01-31 14:10:28 457

原创 Android网络收集和ping封装库,记录一次腾讯Android岗面试笔试总结

.addNetworkInterceptor(new StethoInterceptor()).build()该库目的做成悬浮全局按钮,点击按钮可以查看该activity页面请求接口,可以查看请求几个接口,以及接口请求到响应消耗流量方便查看网络请求流程,比如dns解析时间,请求时间,响应时间方便测试查看请求数据,方便抓包。可以复制request,respond,body等内容。也可以截图待完善功能添加ping功能,通过ping检测网络问题,帮助诊断需要弄一个悬浮按钮,即添加跳转网路拦截li

2022-01-31 14:09:03 1262

原创 Android系统开发-选择并启动默认Launcher,书籍+视频+学习笔记+技能提升资源库

启动最开始提到了Launcher选择弹窗,我们就考虑在这里做点事,把弹窗的逻辑给跳过,就可以实现默认启动。弹窗源码位于frameworks/base/core/java/com/android/internal/app/ResolverActivity.java在这里就不具体分析源码了,就看关键部分public boolean configureContentView(List payloadIntents, Intent[] initialIntents,List rList, boolean

2022-01-31 14:07:38 631

原创 android:DataBinding使用小结(三(1),android开发平台的发展

super.onAttachedToRecyclerView(recyclerView);this.items.addOnListChangedCallback(itemsChangeCallback);}@Overridepublic void onDetachedFromRecyclerView(RecyclerView recyclerView) {super.onDetachedFromRecyclerView(recyclerView);this.items.removeOnListC

2022-01-30 15:38:24 117

原创 android:DataBinding使用小结(一,2021年您应该知道的技术之一

数据类型: character, String, numeric, null类型转换(ClassCast)方法回调(Method calls)数据属性数组:[]三元操作符:?例如:android:text="@{String.valueOf(index + 1)}"android:visibility="@{age < 13 ? View.GONE : View.VISIBLE}"android:background="@{true ? @color/co..

2022-01-30 15:36:58 968

原创 Android高工面试:如果需要实现一个-路由(Router,移动端h5页面适配

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main_2);}}这样就可以支持多模块使用了。自定义注入 routerRouter.getInstance().add(“activity/three”, ThreeActivity.class);跳转的时候调用Router.get

2022-01-30 15:35:33 200

原创 Android音视频开发(1),android驱动开发权威指南pdf

除了I/P/B帧外,还有图像序列GOP。GOP:两个I帧之间是一个图像序列,在一个图像序列中只有一个I帧。如下图所示:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7oDJR6mL-1608540503824)(https://upload-images.jianshu.io/upload_images/24944255-2695e751eab6dfd4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

2022-01-30 15:34:08 1326

原创 Android面试:单例模式一共几种?优缺点分别是什么,Android开发者跳槽指南

// 在成员变量声明的时候就要初始化private static SingletonDemo3 instance = new SingletonDemo3();private SingletonDemo3() {}public static SingletonDemo3 getInstance() {// 若当前实例为空,重新指向一个新的实例if (instance == null) {instance = new SingletonDemo3();}return instance;}

2022-01-30 15:32:43 552

原创 Android隐藏系统状态栏(沉浸式状态栏)和设置状态栏颜色

window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_

2022-01-30 15:28:28 3372

原创 android连真机签名公网ip更新方案,讲的太清楚了

谁知道今天还没起床就接到李老板电话,说服务不能访问了。 没道理呀 (^་།^)二、分析公网ip是变的我们常用的adsl网络的公网ip不是固定的,偶尔会重新拨号,那么公网ip就变了,导致外网就没法访问了。那么要解决这个问题,我们可以写个类似看门狗的小程序,每隔几分钟获取一次当时的公网ip,然后上报到我们自己一台固定的服务器上去。使用的时候先从这个固定的服务器上去拿到手机当时的公网ip。再访问过来。 (很绕的样子,你也可以找联通移动大闹一场,让他固定你的公网ip ????Wget我们先写个Shell

2022-01-30 15:27:03 299

原创 ConstrainLayout 基础教程,android插件化和热修复区别

<Buttonandroid:id="@+id/buttonB" …app:layout_constraintLeft_toRightOf="@+id/buttonA" />这样系统就会知道按钮B的左侧被约束在按钮A的右侧,这里的约束可以理解为边的对齐。上图是相对定位的约束,图中每一条边(top、bottom、baseline、left、start、right、end)都可以与其他控件形成约束,罗列这些边形成的相对定位关系如下:layout_constraintLeft_toLef

2022-01-29 15:34:14 64

原创 butterknife 源码分析,看完全都会了

View view;target.title = Utils.findRequiredViewAsType(source, R.id.title, “field ‘title’”, TextView.class);target.subtitle = Utils.findRequiredViewAsType(source, R.id.subtitle, “field ‘subtitle’”, TextView.class);view = Utils.findRequiredView(source, R.

2022-01-29 15:32:49 107

原创 Bugly升级SDK适配Android N,跨平台移动应用框架

表示路径在应用中红内部存储区域中cache目录下的子目录下,cache-path表示Context.getCacheDir()的根目录。例如:/data/data/com.bugly.upgrade.demo/cache表示路径在外部存储区域根目录的子目录,external-path表示Environment.getExternalStorageDirectory()的根目录。例如:/storage/emulated/0表示路径在外部存储区域根目录的缓存目录,external-cache-pa.

2022-01-29 15:31:24 562

原创 binder机制再学习,androidui基础

对Server来说,Binder是Server提供特殊服务的访问接入点,对Client来说,Binder是通向Server的管道入口,想要和某个Server通信必须要建立这个管道并获得管道入口。Binder是一个实体位于Server的对象,这个对象包装了一套方法可以对服务进行请求。遍布于Client中的入口可以看做指向这个binder的指针(没错啦,就是Server的binder在Client中的代理类!或者说叫句柄),调用了这个指针的方法和直接调用Server中Binder的方法没有任何区别。bind

2022-01-29 15:29:59 62

原创 Arouter讲解4_Core,移动商城app开发

_ARouter.logger.info(Consts.TAG, “ARouter init over.”);}}protected static synchronized boolean init(Application application) {mContext = application;LogisticsCenter.init(mContext, executor);logger.info(Consts.TAG, “ARouter init success!”);hasInit =

2022-01-29 15:28:34 89

原创 App相互唤醒的几种方式,kotlin语言特性

Server的配置如下:Client调用如下:Intent intent1 = new Intent();ComponentName componentName = new ComponentName(“com.jxx.server”, “com.jxx.server.ServerActivity”);intent1.setComponent(componentName);intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity

2022-01-29 15:27:09 1189

原创 APP性能优化系列-自定义启动器(三),面试官6个灵魂拷问

好了,这些基本够用了。2.实现task接口public abstract class Task implements ITask {private volatile boolean mIsWaiting; // 是否正在等待private volatile boolean mIsRunning; // 是否正在执行private volatile boolean mIsFinished; // Task是否执行完成private volatile boolean mIsSend; // Tas

2022-01-29 15:25:45 57

原创 App为什么会crash?一篇文章带你探究根本原因 ,事情没有你想得那么简单

}commonInit();/*Now that we’re running in interpreted code, call back into native codeto run the system.*/nativeFinishInit();if (DEBUG) Slog.d(TAG, “Leaving RuntimeInit!”);}作为 java 类, main 方法一直都是执行的入口。从上述代码可以看出, main 方法中会调用 commonInit 方法:pr

2022-01-29 15:24:20 1050

原创 Android面试题精选——再聊Android-Handler机制-2,Android组件化开发教程

//创建当前线程的Looper对象private static void prepare(boolean quitAllowed) {if (sThreadLocal.get() != null) {throw new RuntimeException(“Only one Looper may be created per thread”);}sThreadLocal.set(new Looper(quitAllowed));}//获取当前线程的Looper对象public static @

2022-01-29 15:21:30 60

原创 ARouter 使用教程,2021大厂Android知识点总结

@Overridepublic T parseObject(String input, Type clazz) {return JSON.parseObject(input, clazz);}}解析参数在 ActivityB 中获取参数有两种方式一种是普通 Activity 那样 getIntent().getXXX,这里就不展开了另外一种是使用 @Autowired 注解的方式@Route(path = ARouterConstants.COM_PARSE_ACTIVITY

2022-01-28 15:56:35 204

原创 Android面试题之ContentProvider篇,android游戏开发入门

提示:以下是本篇文章正文内容ContentProvider==============================================================================1.请介绍下 Android 的数据存储方式File 存储SharedPreference 存储ContentProvider 存储SQLiteDataBase 存储网络存储2.如何使用ContentProvider进行批量操作?通常进行数据的.

2022-01-28 15:52:21 3037

原创 Android面试题之Activity篇,30岁以后搞Android已经没有前途

activity 是 Context 的子类,同时实现了 window.callback 和 keyevent.callback, 可以处理与窗体用户交互的事件button.setOnclickLinstener{}//点击事件我在开发常用的的有 FragmentActivitiy,ListActivity ,PreferenceActivity ,TabAcitivty 等…如果界面有共同的特点或者功能的时候,还会自己定义一个 BaseActivity2、请描述一下 Activity 生命周期

2022-01-28 15:50:56 81

原创 Android面试心得,已拿到字节跳动,京东,android应用开发基础学堂在线答案

4.SingleInstance:这个是SingleTask加强本,系统会为要启动的Activity单独开一个栈,这个栈里只有它,适用新开Activity和app能独立开的,如系统闹钟,微信的视频聊天界面不知道是不是,知道的同学告诉我下,在此谢过!另外,SingleTask和SingleInstance好像会影响到onActivityResult的回调,具体问题大家搜下,我就不详说。Intent也需要进一步了解,Action、Data、Category各自的用法和作用,还有常用的Intent.FLAG

2022-01-28 15:49:30 112

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除