自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android 组件化实战,9次Android面试经验总结

三、组件化有什么好处前后端分离、MVP架构这些思想都是为了解耦,解耦就像是把对应的物品放入对应的箱子,这样在修改或者增加时,就能最小程度的不影响其它模块。四、结构图五、代码结构怎么设计1. 根据业务逻辑新建module假设有三个业务模块,加上app的主Module,加上common公共Module,所以一共需要5个Module,所以代码结构应该是这样:2. 提取公共配置,避免版本不一致造成的错误在项目根目录的build.gradle中的最底部添加ext{//SDK 版本号compil

2022-01-03 11:26:44 400

原创 Android 热修复原理,阿里Android研发岗二面

简单来说,在编译时通过新旧两个Dex生成差异path.dex。在运行时,将差异patch.dex重新跟原始安装包的旧Dex还原为新的Dex。这个过程可能比较耗费时间与内存,所以我们是单独放在一个后台进程:patch中。为了补丁包尽量的小,微信自研了DexDiff算法,它深度利用Dex的格式来减少差异的大小。四、阿里Sophix原理(双剑合璧):1.优化Andfix(突破底层结构差异,解决稳定性问题):Andfix底层ArtMethod结构时采用内部变量一一替换,倒是这个各个厂商是会修改的,所以兼容

2022-01-03 11:25:19 242

原创 Android 无缝换肤深入了解与使用,Android开发面试书籍

https://github.com/xujiaji/ThemeSkinning通过皮肤apk的全路径,可知道其包名(需要用包名来获取它的资源id)skinPkgPath是apk的全路径,通过mInfo.packageName就可以得到包名代码位置:SkinManager.javaPackageManager mPm = context.getPackageManager();PackageInfo mInfo = mPm.getPackageArchiveInfo(skinPkgPath

2022-01-03 11:23:54 1419

原创 Android 教你一步步搭建MVP+Retrofit+RxJava网络请求框架

额。。想必有人要问了,这是什么玩意?跟我们平时定义的接口类很像,但又不一样。别心急,我来一一解释下,和别的接口类一样,我们在其中定义了一个方法getSearchBook,那么这个方法是做什么的呢?其实它干的事很简单,就是拼接一个URL然后进行网络请求。这里我们拼接的URL就是上文提到的测试URL:https://api.douban.com/v2/book/search?q=金瓶梅&tag=&start=0&count=1。聪明的你一定看出来了,在这个URL中book/search就

2022-01-03 11:22:29 363

原创 Android 技能图谱学习路线,程序员怎样优雅度过35岁中年危机

贪心算法分支限界法Android基础Application生命周期Android Activity生命周期Android Service、IntentService,Service和组件间通信Activity的onNewIntentFragment的懒加载实现,参数传递与保存ContentProvider实例详解BroadcastReceiver使用总结Android消息机制Binder机制,共享内存实现原理Android 事件分发机制Android 多线程的实现:Threa.

2022-01-03 11:19:39 107

原创 Android 开发岗往年至今年高频面试题整(内含参考答案)

AlertDialog并不会影响Activity的生命周期,按Home键后才会使Activity走onPause->onStop,AlertDialog 只是一个组件,并不会使 Activity 进入后台5.两个 Activity 之间跳转时必然会执行的是哪几个方法?前一个 Activity 的 onPause,后一个 Activity 的 onResume6.Fragment 状态保存 onSaveInstanceState 是哪个类的方法,在什么情况下使用?在对应的 FragmentAc

2022-01-03 11:16:49 70

原创 Android 底层知识拾零,android原生开发框架

-------------------------------------------------------------------------------------------------padauk.ttf 官方缅甸语字库ZawgyiOne.ttf 民间缅甸语字库-------------------------------------------------------------------------------------------------Roboto-Bold.ttf 欧洲使

2022-01-03 11:15:24 994

原创 Android 应用内自定义随机布局输入法,如何试出一个Android开发者真正的水平

if (builder != null && builder.isCustomKeyboardVisible()) {builder.hideCustomKeyboard();} else {this.finish();}}}键盘布局:<?xml version="1.0" encoding="utf-8"?><Keyboard xmlns:android=“http://schemas.android.com/apk/res/android”andro

2022-01-03 11:13:59 131

原创 Android中SQLite应用详解(1),flutter页面跳转重绘

public class DBHelper extends SQLiteOpenHelper {private static final String DATABASE_NAME = “test.db”;private static final int DATABASE_VERSION = 1;public ..

2021-12-31 12:18:29 242

原创 Android——单选多选按钮的使用详解,2021最新Android算法相关面试大全

<RadioGroupandroid:id="@+id/group1"android:orientation=“horizontal”android:layout_width=“match_parent”android:layout_height=“wrap_content” ><RadioButtonandroid:id="@+id/radio1"android:layout_width=“wrap_content”android:layout_height=“wrap.

2021-12-31 12:17:30 282

原创 Android——LitePal第三方数据库框架详解,凭借这份Android面试题集

// litepal数据库compile ‘org.litepal.android:core:1.6.1’下面的操作eclipse和android studio都是一样的了。eclipse中在项目中新建libs文件夹,把jar包行进去:新建assets目录,然后创建 litepal.xml资源文件,用于创建数据库名称、数据库版本、表名、数据库存放的位置;<?xml version="1.0" encoding="UTF-8"?>页面activity_main.x

2021-12-31 12:16:31 196

原创 Android—adb命令大结局,android设计模式有几种

adb shell dumpsys battery15、显示Alarm信息adb shell dumpsys alarm统计系统耗电量adb shell dumpsys batterystats设置线程的优先级adb shell dumpsys activity|grep oom_adj16、强制关闭一个应用程序;adb shell am force-stop 17、查看内存信息adb shell cat proc/meminfo指定进程内存地址映射adb shell cat pro

2021-12-31 12:15:17 292

原创 Android-框架问题分析案例---谁杀了桌面-,kotlinandroid开发

synchronized (this) {killPackageProcessesLocked(packageName, appId, targetUserId,ProcessList.SERVICE_ADJ, false, true, true, false, “kill background”);}}对源码比较熟悉的同学可以很快知道 , AMS.killBackgroundProcesses 这个接口会提供给三方应用去调用 , 其 Binder 的客户端在 ActivityManager.ki

2021-12-31 12:12:03 271

原创 Android-UI组件合集,Android开发不得不会

Android-ViewPagerIndicator滑动页面几乎成了现在国内的应用的标配了,尤其在你第一次安装/启动应用时, 总会有几张介绍页面让你滑动显示。 用它吧,不会辜负你的。Android-PullToRefresh你不陌生, 在列表或者视图的顶部或者底部拖动可以刷新数据和页面。可以和ListView、ExpandableListView、GridView、WebView、ScrollView、HorizontalScrollView、ViewPager配合使用。picasso强大的.

2021-12-31 12:09:45 1567

原创 Base64算法,2021最新Android中级面试题目汇总解答

2、定义按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.)使用的字符包括大小写字母各26个,加上10个数字,和加号“+”,斜杠“/”,一共64个

2021-12-30 13:41:07 126

原创 App黑白化实现扩展,一键护眼模式,给App,学android的入门基础知识

if (window == null) {return;}View view = window.getDecorView();Paint paint = new Paint();ColorMatrix cm = new ColorMatrix();// 关键起作用的代码,Saturation,翻译成中文就是饱和度的意思。// 官方文档说明:A value of 0 maps the color to gray-scale. 1 is identity.// 原来如此,666cm.setSa

2021-12-30 13:40:12 2161

原创 APP性能优化系列-卡顿定位(一),soul移动端开发工程师

public class MyApplication extends Application {@Overridepublic void onCreate() {super.onCreate();initBugly();initBaiduMap();initJPushInterface();initShareSDK();…}private void initBugly() throws InterruptedException {Thread.sleep(1000); // 模拟耗费的

2021-12-30 13:39:16 919

原创 App冷启动,你还要我怎样?,最新大厂程序员进阶宝典

我们先来解决打开app的时候闪白屏的这个问题。首先我们得知道为什么会出现这个白屏的,在AndroidManifest.xml配置文件里面,你会看到你的LAUNCHER activity的配置<activityandroid:name=".StartPageActivity"android:screenOrientation=“portrait”> 如何你的LAUNCHER activity的配置是这样的话,那么恭喜你,打开app的时候就会出现白屏了。那么,怎么

2021-12-30 13:38:21 77

原创 Apk的编译打包过程,高级android面试题

-I search path for import statements.-d generate dependency file.-p file created by --preprocess to import.-o base output folder for generated files.-b fail when trying to compile a parcelable.值得注意的是:这个工具的参数与参数值之间不能有空格这里是将testService转化

2021-12-30 13:37:26 118

原创 APK体积优化的一些总结,中高级Android面试中你不得不会的知识点

MegatronKing/SVG-Android下载这个jar包->svg2vector-cli-1.0.1.jar然后一波小命令!!!咔咔咔java -jar svg2vector-cli-1.0.1.jar -d D:\svg -o D:\vector-d 指定svg文件所在目录-f 指定当个svg文件-h 设置转换后svg高-w 设置转换后svg宽-o 输出android vector图像目录然后转换完成,然后复制就好了!!!2. Tint着色器的使用与优化大家在开发的时

2021-12-30 13:36:31 107

原创 android:kotlin语言使用greendao3,flutter页面跳转

@Keeppublic void setName(String name) {this.name = name;}@Keeppublic int getAge() {return age;}@Keeppublic void setAge(int age) {this.age = age;}@Keep@Overridepublic boolean equals(Object o) {if (this == o) return true;if (!(o instanceof St

2021-12-30 13:34:40 120

原创 Android高级架构师整理面试经历发现?(大厂面经,android地图开发框架

Java 必考jvm 通常都会考2-3题选择或1-2题问答数据结构与算法 必考计算机网络 一般会涉及2-3题选择题操作系统 一般会涉及2-3题选择题数据库 一般会涉及2-3题选择题linux 一般会涉及2-3题选择题设计模式 笔试考的相对较少还有软件工程,编译原理之类考的比较少,但也有公司会考还有就是会根据岗位涉及不同的方向题(比如:java后台开发,android开发 会涉及几题简单的选择)编程/问答 必考 编程主要考算法,问答就不一定了(根..

2021-12-30 13:33:45 97

原创 Android饿了么技术面试(已确认P7职位),这些面试题你会吗

6、如果有个100M大的文件,需要上传至服务器中,而服务器form表单最大只能上传2M,可 以用什么方法7、内存溢出和内存泄漏有什么区别?何时会产生内存泄漏?内存优化有哪些方法?…Android面试重点知识Android启动流程Imageloader图片占用内存四种引用类型三级缓存图片压缩EventBus常用的网络请求框架…源码分析相关面试题Volley源码剖析注解框架内部实现原理okhttp内核剖析Android源码编译实现静默安装和静默偷拍Activi

2021-12-30 13:32:50 1332

原创 Android性能优化四:APP启动优化,Android架构师教你如何突破瓶颈

比如说一个线程耗时1500ms,我们可以用三个并行的线程,每个耗时500ms。/**异步优化,使用线程池的方式,用多个并行线程来完成初始化,从而减少启动时间此处的nThreads的数量不能写死,因为不同的手机我们可用的CPU数量不一样,有的我们可以用4个核,有的可以用8个核,此处可以参考AsyncTask中的设置方法*/Executors.newFixedThreadPool(?);AsyncTask.javapublic abstract class AsyncTask&l

2021-12-29 15:03:14 130

原创 Android性能优化之启动速度优化,android嵌入式应用开发

对于应用的启动时间,只能是尽量的避免一些耗时的、非必要的操作在主线程中,这样相对可以缩减一部分启动的耗时,另外一方面在等待第一帧显示的时间里,可以加入一些配置以增加体验,比如加入Activity的background,这个背景会在显示第一帧前提前显示在界面上。1、先为主界面单独写一个主题style,设置一张待显示的图片,这里《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享我

2021-12-29 15:02:16 672

原创 Android性能优化之冷启动优化,高级android面试题2019

2.APP启动方式冷启动(Cold start)场景:冷启动是指APP在手机启动后第一次运行,或者APP进程被kill掉后在再次启动。可见冷启动的必要条件是该APP进程不存在,这就意味着系统需要创建进程,APP需要初始化。在这三种启动方式中,冷启动耗时最长,对于冷启动的优化也是最具挑战的。因此本文重点谈论的是对冷启动相关的优化。生命周期:Process.start->Application创建->attachBaseContext->onCreate->onStart-&g

2021-12-29 15:01:17 98

原创 Android性能优化之APK-极限压缩(资源越多,效果越显著),android进程清理

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

2021-12-29 15:00:03 266

原创 Android异步加载网络图片,android音乐播放器开发教程

task.callback = callback;Log.i(TAG, “new Task ,” + path);if(!taskQueue.contains(task)){taskQueue.add(task);// 唤醒任务下载队列synchronized (runnable) {runnable.notify();}}}// 缓存..

2021-12-29 14:58:55 77

原创 Android异步任务与多线程,2021年这些高频面试知识点最后再发一次

android:text=“测试卖票”android:textAllCaps=“false”android:textSize=“26sp”app:layout_constraintLeft_toLeftOf=“parent”app:layout_constraintRight_toRightOf=“parent”app:layout_constraintTop_toBottomOf="@+id/btn_test_runnable" /></androidx.constraintlay

2021-12-29 14:57:54 140

原创 Android开发:热修复 Tinker 原理分析,安卓工程师面试题及答案

了解了这些信息大致思路就有了,我们需要修复后的.dex文件加载解析,然后插队旧的安装包装的.dex文件,做到插队的操作,相当于欺骗了Android系统,大致如下:实现原理================================================================思路大概是,我们需要一个修复bug的.dex文件,插队到BaseDexClassLoader类下的DexPathList对象的DexElement数组中,并且排序到最前面,让系统加载到我们修复后的.dex文件

2021-12-29 14:56:48 363

原创 Android开发:和Android原生系统对着干的,移动终端开发期末考试及答案

现在很多互联网企业旗下都拥有多款App,社交类、购物类、游戏类、摄影类等等。APP的留存和活跃度是企业主非常看重的数据,而企业主拓展一个用户下载app,平均成本高达192元!企业花了将近200块钱,用户可能两分钟就卸载了。一个长久稳定的用户,成本之高,难以想象。中国的互联网企业竞争异常激烈,如何快速发布新功能抢占市场?如何将各种功能聚合到一个App上?还有65535,应用之间的互相调用等问题频发…正因如此,插件化技术应运而生。Andriod原生系统是不允许插件化App存在的,插件化App根本无法上架Go

2021-12-29 14:55:52 164

原创 Android开发:你错就错在以为靠技术就能生存下,android混合开发基础恶补篇

随后这个人得到了试用机会,如果没意外的话,他一定会是下一个项目经理的继任者。朋友们你知道吗?不管你技术有多强,你也不可能自由的腾出时间像别人那样研究一下LINUX源码,甚至写一个LINUX样的杰作来表现你的才能。需要做的就是按照要求写代码,写代码的含义就是都规定好,你按照规定写,你很快就会发现你昨天写的代码,跟今天写的代码有很多类似,等你写过一段时间的代码,你将领略:复制,拷贝,粘贴那样的技术对你来说是何等重要。(如果你没有做过1年以上的真正意义上的开发不要反驳我)。如果你幸运的能够听到市场人员的谈话,

2021-12-29 14:54:28 105

原创 Android性能优化:看完这篇文章,至少解决-APP-中-90-%-的内存异常问题

分析代码//step 1 gcTest1 引用 + 1 = 1//step 2 gcTest2 引用 + 1 = 1//step 3 gcTest1 引用 + 1 = 2//step 4 gcTest2 引用 + 1 = 2//step 5 gcTest1 引用 - 1 = 1//step 6 gcTest2 引用 - 1 = 1很明显现在 2 个对象都不能用了都为 null 了,但是 GC 确不能回收它们,因为它们本身的引用计数不为 0 。不能满足被回收的条件,尽管调用 System.gc(

2021-12-28 13:32:39 148

原创 GitHub标星7-8K,各级别Android岗最优质面试题集,移动终端软件开发颜色演示

Android校招面试指南 有答案解析https://github.com/LRH1993/android_interviewAndroid Interview 一线互联网公司内部题库 ,gitbook 有答案解析,很方便观看,非常推荐http://www.jackywang.tech/AndroidInterview-Q-A/技术面试基础知识,4万starhttps://github.com/CyC2018/CS-NotesAndroid面试知识库,一万star的面试.

2021-12-23 14:18:33 183

原创 ForkJoinPool使用以及原理解读,android面试题2018

final int doExec() {int s; boolean completed;if ((s = status) >= 0) {try {completed = exec();} catch (Throwable rex) {return setExceptionalCompletion(rex);}if (completed)s = setCompletion(NORMAL);}return s;}也即是,现有ForkJoinTask的子类exec方法,均是返回t

2021-12-23 14:17:13 139

原创 Flutter这么火为什么不了解一下呢?(下,Android基础面试常常死在这几个问题上

Icons.star,color: Colors.red[500],),new Text(‘41’),],),);//…}Tip: 粘贴代码到工程中时,代码缩进可能错乱。如果是在IntelliJ中,可以有单机选择Reformat with Dart Style。或者在命令行中使用dartfmt命令。Tip: 为体验更快开发过程,尝试使用Flutter的热加载功能。热加载使得在修改代码同时快速地在查看到修改后的效果,而不用重运行app。##Step 3:实现按钮行(Button

2021-12-23 14:16:15 604

原创 Flutter的原理及美团的实践(下),android开发前景2020

L.w(“AllCategory”, Arrays.toString(frameDurations.toArray()));}}}, new Handler(Looper.getMainLooper()));}super.onCreate(savedInstanceState);// …}}Flutter在Framework层只能取到每帧中UI操作的CPU耗时,GPU操作在Flutter引擎内部实现,所以要修改引擎来监控完整的渲染耗时,在Flutter引擎目录下src/flutter/sh

2021-12-23 14:14:52 100

原创 Flutter沉浸式透明状态栏-flutter自定义凸起BottomAppBar导航

}}}注意:flutter项目默认是使用Kotlin语言在Google I/O 2017中,Google 宣布 Kotlin 取代 Java 成为 Android 官方开发语言。Kotlin详情见:https://www.kotlincn.net/通过 flutter create flutter_app 命令创建flutter项目时,默认是Kotlin语言模式,如果想要修改成Java语言,则运行如下命令创建项目即可flutter create -a java flutter_app

2021-12-23 14:11:07 1457

原创 Flutter开发之——多组件布局容器-Wrap,BATJ等企业Android面试知识分享

2.1 构造方法Wrap({Key? key,this.direction = Axis.horizontal,this.alignment = WrapAlignment.start,this.spacing = 0.0,this.runAlignment = WrapAlignment.start,this.runSpacing = 0.0,this.crossAxisAlignment = WrapCrossAlignment.start,this.textDirection,t.

2021-12-23 14:10:09 100

原创 Flutter开发之——IOS通信BasicMessageChannel,android应用开发期末考试题

var channel:FlutterBasicMessageChannelinit(messenger: FlutterBinaryMessenger) {channel = FlutterBasicMessageChannel(name: “com.example.flutterios.BasicMessageChannel”, binaryMessenger: messenger)channel.setMessageHandler { (message, reply) inif let dic

2021-12-23 14:07:38 485

空空如也

空空如也

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

TA关注的人

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