自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android 开发面试备战春招之“你做过那些性能优化?,移动端h5开发框架

其实这些都是基础,把它记下就行了。记得多了在实际开发中就有印象了。2.减少卡顿怎么减少卡顿? 那么我们可以从 2 个原理方面来探讨卡顿的根本原因,第一个原理方面是绘制原理,另一个就是刷新原理。绘制原理:刷新原理:View 的 requestLayout 和 ViewRootImpl##setView 最终都会调用 ViewRootImpl 的 requestLayout 方法,然后通过 scheduleTraversals 方法向 Choreographer 提交一个绘制任务,然后再

2021-12-23 11:33:34 279

原创 Android 开发艺术探索笔记(17),android开发艺术探索

垃圾回收的相关工作,比如清楚数据调用onDeatchFromWindow方法,在这个方法里结束进程、终止动画等通过Session的remove方法删除Winodow,最终会调用WindowManagerService的removeWindow方法,这是个IPC过程调用doRemoveView方法刷新数据。Window更新跟之前两个一样,也是看WindowManagerGlobal的updateViewLayout方法。就是用新的View的LayoutParams替换老的,接着..

2021-12-23 11:32:20 1642

原创 Android 属性动画(Property Animation) 完全解析,程序员面试防坑宝典

3、看了上面的例子,因为设置的操作的属性只有一个,那么如果我希望一个动画能够让View既可以缩小、又能够淡出(3个属性scaleX,scaleY,alpha),只使用ObjectAnimator咋弄?想法是不是很不错,可能会说使用AnimatorSet啊,这一看就是一堆动画塞一起执行,但是我偏偏要用一个ObjectAnimator实例实现呢~下面看代码:[java]  view plain  copypublic void rotateyAnimRun(fi

2021-12-23 11:29:51 1905

原创 Android 屏幕适配的最优方案(二),kotlin二维数组

1.创建可拉伸的九宫格位图2.针对所有屏幕尺寸进行测试3.声明特定的屏幕尺寸支持4.支持刘海屏(1)在带刘海屏的设备上有什么要求(2)选择您的应用如何处理刘海区域(3)默认行为(4)将内容呈现在短边刘海区域中(4)从不将内容呈现在刘海区域中5.特殊模式6.支持刘海屏的最佳做法7.测试您的内容如何呈现(1)布局选择(2)使用自适应尺寸(3)今日头条适配方案(4)百分比适配(5)多使用约束布局Constr..

2021-12-23 11:28:38 391 1

原创 Android 全埋点解决方案,大专生面试阿里P7居然过了

在生命周期方法中是有activity对象的,这样也可以拿到全路径作为唯一标示;示例:public static void registerActivityLifecycleCallbacks(Application application) {application.registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() {@Overridepublic void onActivityCreat

2021-12-23 11:27:29 1668

原创 Android 仿微信语音聊天,安卓binder机制

import android.view.View;import android.widget.Button;public class AudioRecordButton extends Button {private static final int STATE_NORMAL = 1;private static final int STATE_RECORDING = 2;private static final int STATE_WANT_CANCEL = 3;private static

2021-12-23 11:26:20 180

原创 Android 中高级面试原理:热修复与插件化基础—Java与Android虚拟机

JVM将内存分配给方法区、堆区、栈区、本地方式栈4个部分,这4个部分分别存储字节码不同的部分。垃圾回收器(gc)会管理整个内存空间中的垃圾。2、Java代码的编译和执行过程下图是Java代码编译的详细流程(即,javac的执行过程),了解即可,一般只要知道java文件是通过javac命令编译成class文件,再通过java命令运行的就可以了,如:javac Hello.javajava Hello3、类加载器**1)Ja《Android学习笔记总结+最新移动架构视频+大厂安卓..

2021-12-23 11:25:06 96

原创 Android Webview upload 图片上传,移动客户端开发面试

public ValueCallback<Uri[]> uploadMessage;public ValueCallback mUploadMessage;public ProgressBar mWebLoadingProgressBar;@SuppressLint(“NewApi”)@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent intent) {if (requestCod

2021-12-22 11:07:55 330

原创 Android Vsync原理简析,Android攻防实战电子书

从图中可以看到: 没有vsync的情况下,cpu在任意地方开始,随心所欲!我们追究原因: 核心点在与数据交换的时机由谁来控制,数据交换的发生点应该是在屏幕渲染完一帧后,而不是cpu写入一帧数据后,所以,控制数据是否交换应该由屏幕来决定,但是!计算机五大组成部分各司其职,屏幕只是输出设备和输入设备(因为能触屏),他不是控制器,如何控制数据的交换呢?当然可以,答案就是:VSYNC。VSYNC(vertical sync): 也就是垂直同步,当屏幕渲染完一帧数据后,即将开始渲染下一帧之前,发出的一个同步信号

2021-12-22 11:06:30 224

原创 Android studio权限使用相关相关,近期想跳槽的程序员必看

<applicationandroid:allowBackup=“true”android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl=“true”android:theme="@style/AppTheme">在MainActivty.java中加入权限限制pa.

2021-12-22 11:05:04 173

原创 Android studio权限使用相关相关(1),kotlin扩展函数

<applicationandroid:allowBackup=“true”android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl=“true”android:theme="@style/AppTheme">在MainActivty.java中加入权限限制pac

2021-12-22 11:03:39 126

原创 Android Studio中的EditText控件使用详解,整理几个重要的Android知识

二:EditText简介EditText是一个非常重要的组件,可以说它是用户和Android应用进行数据传输窗户,有了它就等于有了一扇和Android应用传输的门,通过它用户可以把数据传给Android应用,然后得到我们想要的数据。EditText是TextView的子类,所以TextView的方法和特性同样存在于EditText中,具体的TextView的介绍可以参考上一节Android系列教程之六:TextView小组件的使用–附带超链接和跑马灯效果三:长度和空白提示文字,提示文字颜色,是否可编

2021-12-22 11:02:15 4444

原创 Android Studio上Kotlin的入门,移动应用系统开发

Kotlin入门为什么选择KotlinKotlin是什么Kotlin的优势第一个Kotlin应用Kotlin的基本语法规则变量函数匿名函数字符串模板注释Null 安全类型检测和自动类型转换简化Toast的用法为什么选择Kotlin在 2019 年 Google I/O 大会上,他们宣布今后将优先采用 Kotlin 进行 Android 开发。如今,超过 60 款 Google 应用是用 Kotlin 构建的,

2021-12-22 11:00:49 793

原创 Android Studio 配置Git,android开发者论坛

2.下载完之后,双击安装,一直在点击“Next”3.安装完成二、安装是否成功回到电脑桌面,鼠标右击如果看到有两git单词说明安装成功三、打开android studio 打开如下路径File——Settings——Version Control——git点击test按钮如果出现 Git executed successfully 对话框说明配置成功,同时对话框会显示你安装的git版本号,如下图:四、点击按下图操作:点击“Generate…”在GitHub上输入自己的用户和密码

2021-12-22 10:59:24 127

原创 Android Span详解,疯狂膜拜

TextView有样式属性,为什么还需要Span**?**通过XML属性或者代码设置就可以改变文本样式,但是效果必须作用于整个文本,如果要在部分文本上使用特殊样式就无能无力了,例如像下面这种:Span就是解决这种需求的,Span样式可以作用于字符或者段落级别的文本。通常使用的套路是样式属性和Span组合使用,可以考虑将设置给TextView的样式属性作为一种“基本”样式,而 Span样式是应用在基本样式“之上”并且会覆盖基本样式的样式。例如,当给一个 TextView 设置了 textColor=

2021-12-22 10:56:34 464

原创 Android RatingBar的基本使用和自定义样式,kotlin中文教程

第一个:原生普通样式(随着主题不同,样式会变)第二个:原生普通样式-小icon第三个:自定义RatingBar 颜色第四个:自定义RatingBar DrawableRatingBar 各样式实现===============原生样式原生样式其实没什么好说的,使用系统提供的style 即可<RatingBarstyle="?android:attr/ratingBarStyleIndicator"android:layout_width=“wrap_cont..

2021-12-22 10:55:08 168

原创 Android 深入Http(2)加密与编码,flutter项目源码

但是首先得知道,加密解密的过程,会出现的几个概念或者对象。原数据(又称明文)就是要发送的数据的最初的状态密文被加密后数据就是密文发送方就是持有原数据的一方,他们会对原数据加密变成密文,然后发送该密文接收方接受传过来的数据的一方,他们会对密文解密,得到可读的原数据盗窃方恶意的嗨客会在网络上截取这些传输的密文,他们可能会通过暴力枚举的手段进行解密。网络安全、加密解密就是为了防止这些嗨客得到密文之后可以轻易的破解。从理论来说,嗨客是不可能拿不到我们的密文的,因为网络传输时

2021-12-21 16:27:17 158

原创 Android 摄像头调用(不含拍照),不吃透都对不起自己

private int mCurrentCamIndex; //相机的指数private int ROTATE; //旋转值private int minFocus; //当前手机默认的焦距private int maxFocus; //当前手机的最大焦距private int everyFocus; //用于调整焦距private int nowFocus; //当前的焦距值private

2021-12-21 16:23:16 345

原创 android 快速开发(三)巧用公共标题栏,高级Android开发强化实战

<TextViewandroid:layout_width=“wrap_content”android:layout_height=“wrap_content”android:text="@string/hello_world" /> 代码简洁,并且有设置标题栏文字、标题栏以为的布局和随心所欲的返回事件这些都归功于CommonActivity:package com.yqy.yqy_commontitlebar;import android.os.Bundle;import a

2021-12-21 16:21:32 126

原创 Android 开发饭碗保住了,最新时报,谷歌险胜甲骨文,2021最新Android开发面试大全

这个最终裁决推翻了此前联邦上诉法院裁定谷歌侵犯了甲骨文的 Java API 版权的决议。十年前,甲骨文认为谷歌侵犯了甲骨文的版权,因为谷歌将 37 个 Java API 复制到了Android 中。谷歌回应称,API 就像字母表或语法。它们是用来创建程序的基本元素。现在,美国最高法院终于得出了程序员一直都知道的结论:API 不能严格享有版权,可以合理使用。讽刺的是,在上世纪 90 年代,甲骨文和 Sun 公司都认为软件 API 不应受版权保护。谷歌总共拷贝了37个包,共计11,500行代码,而

2021-12-21 16:19:36 155

原创 Android 市场的变化,影响多少开发者被迫进阶?,斗鱼直播Android开发二面被刷

Android 现在是否凉了?在Android开发行业的我否该转行了?……从现在看起来这些话题,已经不足为奇了,基本年年会出现,只是标题在不断改变,换汤不换药,意思还是那个意思。不管在任何行业,任何岗位,初级技术人才总是供大于求,都是不好找工作的,Android开发只是其中之一同样,不管任何行业、岗位,技术过硬的也都是非常吃香的!说到底,并不是Android行业凉了,凉了的是你自己。技术技能不过硬,不管你转行去哪个行业或岗位都是一样的结果。坚守还是转?首先得抛开其他因素,就拿人.

2021-12-21 16:17:56 297

原创 Android 地图导航调用百度地图、高德地图、腾讯地图,android面试题2018

double lng = z * Math.cos(theta);double lat = z * Math.sin(theta);return new LatLng(lat, lng);}/**GCJ-02 坐标转换成 BD-09 坐标*/public static LatLng GCJ2BD(LatLng bd) {double x = bd.longitude, y = bd.latitude;double z = Math.sqrt(x * x + y * y) + 0.000

2021-12-21 16:15:33 475

原创 Android 单元测试之PowerMock,retrofit上传图片

其次,在测试类需要使用到 @PrepareForTest()注解,来达到Mock final、构造函数、static、私有方法所在的类的目的。该注解即可写在方法上,也可以以全局的方式写在类上。下面的例子都借鉴于:PowerMock框架讲解及使用2.1 Mock普通方法普通的mock就等于Mokito的用法一样。来看看下面这个类:class PowerMockClass {public fun isFileExists(file: File): Boolean {return file.ex

2021-12-21 16:11:37 2277

原创 Android 中几种优雅的退出APP方式介绍,面试要掌握这几个关键点

1112131415161718192021222324252627282930313233这种方式是有一定的缺点的,我们的工具类ActivityUtils持有Activity的引用,当我们的应用发生异常,ActivityUtils持有的引用没有被销毁会导致部分内存问题,而且代码量多,不够优雅,诸多不便。但是容器式这种方式还是有解决办法的,我们可以采用弱引用的方式,..

2021-12-21 16:09:36 467

原创 Android-App-启动优化全记录,这么香的技术还不快点学起来

应用启动的一般流程应用的启动,从桌面点击应用图标到主界面用户可操作,大致遵循下面的流程:可以看到应用启动过程中,最重要的两个进程就是 SystemServer 和 App Process . 其职责划分如下:SystemServer 负责应用的启动流程调度、进程的创建和管理、窗口的创建和管理(StartingWindow 和 AppWindow) 等应用进程被 SystemServer 创建后,进行一系列的进程初始化、组件初始化(Activity、Service、ContentProvider、

2021-12-20 12:39:14 290

原创 Android-activity之间传值,嵌入式音视频方向

####一 基《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享于消息的传输最标准的Activity之间的数据传输,就是通过Intent的Extra对象。比如,你在A这个Activity上拿到一坨用户输入的文本信息,兴高采烈的想把它放到B这个Activity上展示并发送,一个很可行的方式,是通过Intent的putExtra接口,把用户输入的那些字符信息,按照key/valu

2021-12-20 12:37:43 86

原创 Android 面试总结 - LiveData,android开发api中文文档

mainViewModel.nameListResult.observe(this, {Log.i(“MainActivity”, “mainViewModel: nameListResult: $it”)})mainViewModel.getNames()}}打开app -> 正常看到日志18:03:02.575 : mainViewModel: nameListResult: [张三, 李四]源码解析====LiveData 通过 observe 方法来订阅观察者,以此为查看源

2021-12-20 12:35:48 776

原创 Android 进阶性能优化,面试必问篇,真的太香了

面试官:可以。Ps:这里大多数面试官会同意你的请求,除非遇见装B的。程序员:好处:减少 OOM ,可以提高程序的稳定性。减少卡顿,提高应用流畅性。减少内存占用,提高应用后台存活性。减少程序异常,降低应用 Crash 率, 提高稳定性。那么我基于这四点,我的程序做了如下优化:1.减少 OOM在应用开发阶段我比较喜欢用 LeakCanary 这款性能检测工具,好处是它能实时的告诉我具体哪个类发现了内存泄漏(如果你对 LeakCanary 的原理了解的话,可

2021-12-20 12:32:01 446

原创 Android 网络性能优化(4)弱网优化,2021春招BAT面试真题详解

throughput吞吐量,它是用来衡量单位时间内成功传送数据的数量,是比较权威的、官方的衡量网络质量的指标。最简单的公式: 吞吐量 = C / T ,C为完成的任务总量,T为完成这些任务的时间。singal strength指的是无线信号强度,也就是我们的wifi信号格。Android上SDK就可以支持获取了,而iOS则需要通过黑科技来获取。bandwidth-delay product(带宽时延乘积)带宽时延乘积,指的是一个数据链路的能力(bit/s)与来回通信延迟(s)的乘积。其.

2021-12-20 12:29:38 326

原创 Android 绘图基础:Canvas,Paint,灵魂拷问

Paint:用来描述上面初始图形的颜色和类型等Canvas类提供了三个构造方法:Public Canvas();构造一个默认无参的Canvas对象Public Canvas(Bitmap bitmap);根据一个Bitmap构造一个Canvas对象Public Canvas(GL gl);根据一个GL来构造一个对象下面我们来了解一下Canvas类提供的方法: 在Canvas类提供的方法中比较多经常用的是以draw开头的方法,draw开头的方法很容易理解就是向画..

2021-12-20 12:27:25 449

原创 Android 笔记:2015,高级安卓面试题

onRestoreInstanceState()方法会在 onStart() 方法之后执行. 系统仅仅会在存在需要恢复的状态信息时才会调用 onRestoreInstanceState() ,因此不需要检查 Bundle 是否为null。记住在执行fragment事务时,如移除或者替换,我们经常要适当地让用户可以向后导航与"撤销"这次改变。为了让用户向后导航fragment事务,我们必须在Fra《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》【do...

2021-12-20 12:25:49 483

原创 Android 程序员不得不收藏的 90+ 个人博客(持续更新,2021最新华为Android校招面试题

吴小龙同学早期分享一些个人独立开发经验,现主要分享一些 AOSP 源码解析。开源实验室应该是一个耳熟能详的名字,算是我的 Kotlin 启蒙者。Gityuan 的博客这个想必不用介绍了,学习 AOSP 必备博客。前 MIUI 工程师,现任职字节跳动 移动平台部 。Typeblog作者更新频率不高,但文章质量都很高。Drakeet 的博客上古大神,现任职微软,[纯纯写作]writer.drakeet.com) 开发者,MultiType 开发者。博客已经无法访问了,如果想.

2021-12-20 12:23:30 209

原创 Android 直播中弹幕、带货和键盘的交互,面试看这个就够了

这里先看一下 addOnGlobalLayoutListener 在什么时候被回调的这里需要对 View 的绘制流程有一定的了解,代码在 ViewRootImpl这个类的 2628 行(API 29)if (triggerGlobalLayoutListener) {mAttachInfo.mRecomputeGlobalAttributes = false;mAttachInfo.mTreeObserver.dispatchOnGlobalLayout();}当一个 Activity或者是Di

2021-12-20 12:21:13 161

原创 Android---教你如何用三十分钟在安卓上开发一个微笑抓拍神器

buildscr《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享ipt {repositories {maven {url ‘http://developer.huawei.com/repo/’}} }allprojects {repositories {maven { url ‘http://developer.huawei.com/repo/’}}}1

2021-12-19 13:03:44 258

原创 Android 面试之必问Android基础,2021最新Android面经分享

Standard:标准模式,也是默认模式。每次启动都会创建一个全新的实例。SingleTop:栈顶复用模式。这种模式下如果Activity位于栈顶,不会新建实例。onNewIntent会被调用,接收新的请求信息,不会再低啊用onCreate和onStart。SingleTask:栈内复用模式。升级版singleTop,如果栈内有实例,则复用,并会将该实例之上的Activity全部清除。SingleInstance:系统会为它创建一个单独的任务栈,并且这个实例独立运行在一个 task中,..

2021-12-19 12:59:33 128

原创 Android 面试之必问Android基础(1),致Android开发者

2.3 与Activity传递数据2.3.1 Fragment向Activity传递数据首先,在Fragment中定义接口,并让Activity实现该接口,如下所示。public interface OnFragmentInteractionListener {void onItemClick(String str);}复制代码然后,在Fragment的onAttach()中,将参数Context强转为OnFragmentInteractionListener对象传递过去。public vo

2021-12-19 12:58:01 122

原创 Android 错误信息捕获发送至服务器,科学技术协会面试

AndroidManifest.xml中设置该App:<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.yangguangfu.uncaught" android:versionCode="1" android:versionName="1.0"> <applic

2021-12-19 12:56:07 82

原创 Android 调用相机拍照,适配到Android 10,推荐程序员面试秘籍

今天写的博客是关于Android调用手机相机拍照并显示图片。这是一个很常用的功能,并且这个功能在Android6.0、7.0、10.0等版本上实现都有所不同,需要对Android各个版本进行兼容适配,目前最新的Android版本是Android 10,所以这篇博客适配到Android 10。我自己也写了个demo,方便以后要使用的时候直接拿来。调用相机,首先需要申请相机权限。 android 6.0以后,相机权限需要动态申请。// 申请相机权限的requestCodeprivate static

2021-12-19 12:54:35 586

原创 Android 组件通信中有哪些不为人知的细节?,kotlin语言书籍

现在有两个Activity,分别为AMSActivity、AMSTargetActivity。AMSActivity 想要启动AMSTargetActivity,调用如下方法:public static void start(Context context) {//Context 为AMSActivityIntent intent = new Intent(context, AMSTargetActivity.class);context.startActivity(intent);}该方法在

2021-12-19 12:47:44 123

原创 Android 短信加密,联系人字母侧边栏定位,Android开发必会技术

int newMsgId = -1;// long address = Long.parseLong(cur.getString(2));// long date = Long.parseLong(cur.getString(4));// int type = Integer.parseInt(cur.getString(9));// String body = cur.getString(12);int addressIndex = cur.getColumnIndex(“address”);

2021-12-19 12:46:09 307

空空如也

空空如也

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

TA关注的人

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